Wikibooks enwikibooks https://en.wikibooks.org/wiki/Main_Page MediaWiki 1.47.0-wmf.21 first-letter Media Special Talk User User talk Wikibooks Wikibooks talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Cookbook Cookbook talk Transwiki Transwiki talk Wikijunior Wikijunior talk Subject Subject talk TimedText TimedText talk Module Module talk Event Event talk C programming/Variables 0 543 4671995 4652599 2026-09-23T18:45:40Z Schweikhardt 1008853 /* Scope */ Use Standard terminology: global scope does not exists, it is called file scope. 4671995 wikitext text/x-wiki {{nav}} Like most programming languages, C uses and processes '''variables'''. In C, variables are human-readable names for the places where data used by a running program is stored. Imagine variables as placeholders for values, much like in mathematics. You can think of a variable as being equivalent to its assigned value. So, if you have a variable <math>x</math> with the value <math>4</math>, then it follows that <math>x + 1 = 5</math>. Before we can continue on this topic, though, we must first look at how C organizes memory. == Data locations == [[Image:Typical computer data memory arrangement.png|thumb|right|Data locations in RAM for a loaded and executing program. ''Text'' here refers to the machine code of your program, not human-readable text.]] Literals and other constants (explained later) may be loaded and used directly by the compiled machine code, or they might be loaded from a read-only ''data segment'' in your program that is created during the build process. Where does the rest of the information for your program go? CPUs have a small number of low-capacity but high-speed ''registers'' for data storage. When you create a variable, your compiler will likely assign a register for it to live in while it exists. These registers are nowhere near large enough to contain all the information our programs need, though. The rest of the data for your variables lives in RAM, which the C runtime splits into two areas: * the ''stack'', a space for short-lived data that operates on a ''first-in-last-out'' model * the ''heap'', a space for longer-lived, typically larger data Data is said to be ''pushed'' when it is added to the stack, and ''popped'' when it is removed. In this section, the variables we create will exist in CPU registers and the stack. == Introduction == === Declaring variables === Here is an example of declaring an integer, which we've called <code>some_number</code>. <syntaxhighlight lang="c"> int some_number; </syntaxhighlight> {{XNote|Recall that statements must end with semicolons.}} This statement tells the compiler to create a variable called <code>some_number</code> and associate it with a location in memory, either in a register (if there is room) or on the stack. We also tell the compiler the type of the data that will be stored there, in this case an {{Shi|c|int}} for integer. This lets the compiler know how much total memory to set aside for the data. On most modern machines, an {{Shi|c|int}} is 4 bytes in length. Multiple variables can be declared with one statement, like this: <syntaxhighlight lang="c"> int a_number, another_number, yet_another_number; </syntaxhighlight> === Assignment === After declaring variables, you can assign a value to a variable later on using a statement like this: <syntaxhighlight lang="c"> some_number = 3; </syntaxhighlight> The above statement directs the compiler to insert an integer representation of the number 3 into the memory location associated with <code>some_number</code>. You can also assign variables to the value of other variable, like so: <syntaxhighlight lang="c"> some_number = another_number; </syntaxhighlight> Or assign multiple variables the same value with one statement: <syntaxhighlight lang="c"> a_number = another_number = yet_another_number = 8; </syntaxhighlight> === Initialization === We can save a bit of typing by declaring a variable and assigning it data at the same time: <syntaxhighlight lang="c"> int some_new_number = 4; </syntaxhighlight> == Naming rules == Variable names in C are made up of letters (upper and lower case), digits, and underscores (<code>_</code>). Names must not begin with a digit. {{XNote|Unlike some languages (such as [[w:Perl|Perl]] and some [[w:BASIC programming language|BASIC]] dialects), C does not use any special prefix characters on variable names.}} Some examples of valid (but not very descriptive) C variable names: * <code>foo</code> * <code>Bar</code> * <code>BAZ</code> * <code>foo_bar</code> * <code>_foo42</code> * <code>_</code> * <code>QuUx</code> Some examples of invalid C variable names: * <code>2foo</code> (must not begin with a digit) * <code>my foo</code> (spaces not allowed in names) * <code>$foo</code> ($ not allowed&mdash;only letters, and _) * <code>while</code> (language keywords cannot be used as names) As the last example suggests, certain words are reserved as keywords in the language, and these cannot be used as variable names. When working with other developers, you should take steps to avoid using the same name for global variables or function names. Some large projects adhere to naming guidelines<ref>Examples of naming guidelines are those of the [https://developer.gnome.org/programming-guidelines/stable/namespacing.html GNOME Project] or the parts of the [https://www.python.org/dev/peps/pep-0007/ Python interpreter] that are written in C.</ref> to avoid duplicate names and for consistency. There are certain sets of names that, while not language keywords, are reserved for one reason or another. For example, a C compiler might use certain names "behind the scenes", and this might cause problems for a program that attempts to use them. Also, some names are reserved for possible future use in the C standard library. The rules for determining exactly what names are reserved (and in what contexts they are reserved) are complex,<ref>{{Cite web |title=Reserved Names |url=https://sourceware.org/glibc/manual/latest/html_node/Reserved-Names.html |access-date=2025-11-03 |website=The GNU C Library Reference Manual}}</ref> and as a beginner you don't need to worry about them much anyway. For now, just avoid using names that begin with an underscore character. {{XNote|The naming rules for C variables also apply to naming other language constructs such as function names, struct tags, and macros, all of which will be covered later.}} It is not allowed to use the same name for multiple variables in the same scope. What is a scope? Read on: == Scope == ''Scope'' is the level at which a piece of data (or a function) is visible. Scopes are nested inside each other, and the outermost scope is the ''file scope''. Something visible in a given scope is visible in all inner scopes, but no outer scopes. When something that is visible in a given scope is also defined in that same scope, we say that thing is ''local'' to that scope. It is possible to give a variable in an inner scope the same name as one defined in an outer scope. In that inner scope, and all scopes inside it, the reused name refers to the new variable. But, outside that scope, the name refers to the old variable, which remains unaffected by anything that happened in the inner scope. It's as if the outer variable is invisible while in the inner scope. We say that the outer variable has been ''shadowed'' by the inner variable. Let's look at an example to get a better idea of scope. {{XExample|<syntaxhighlight lang="c" line> int main(void) { // This is the beginning of a block. int i = 6; // This is the first variable of this block, 'i'. { // This is a new block, which has its own scope. // This is also a variable called 'i', but in a different block. // It has the same name as the other 'i', but it's not the same variable! int i = 5; printf("%d\n", i); // This refers to the inner 'i'. } // Back in the scope of 'main', 'i' refers to the variable from the start of the function again. printf("%d\n", i); return 0; } </syntaxhighlight> Output: 5 6}} == Constants == When you write C programs, you may be tempted to write code that will depend on certain numbers. For example, you may be writing a program for a grocery store. This complex program has thousands upon thousands of lines of code. The programmer decides to represent the cost of a can of corn, currently 99 cents, as a literal throughout the code. Now, assume the cost of a can of corn changes to 89 cents. The programmer must now go in and manually change each entry of 99 cents to 89. While this is not that big a problem, considering the "global find-replace" function of many text editors, consider another problem: the cost of a can of green beans is also initially 99 cents. To reliably change the price, you have to look at every occurrence of the number 99. C possesses certain functionality to avoid these ''magic numbers''. By declaring a ''constant''... <syntaxhighlight lang="c"> const int corn_price = 89; </syntaxhighlight> ...a programmer can simply change that constant and not have to worry about setting the value elsewhere. When the {{Shi|c|const}} qualifier is used, the declared variable must be initialized at declaration. It is then not allowed to be changed. Constants are useful for most than just having a single source of truth for some data. For one thing, many compilers can perform some small optimizations on data when it knows that data will never change. The compiler might decide that it would be more performant to avoid accessing memory to read the constant and instead copy the value of the constant throughout the compiled program. == {{Shi|c|sizeof}} == If you are curious how much space something takes in memory, use {{Shi|c|sizeof}}: <!-- Note: sizeof really needs the parentheses only when the argument is a type, see ISO 9899:2011 6.5.3.4/2 ``The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type.'' --> <syntaxhighlight lang="c"> sizeof object </syntaxhighlight> Or, for the size of anything of a certain type: <syntaxhighlight lang="c"> sizeof(type) </syntaxhighlight> The two expressions above evaluate to the size of the object (or type) specified, in bytes. The return type is {{Shi|c|size_t}} (defined in the header <code>stddef.h</code>), which is an unsigned integer large enough to represent any possible object size. This is not a function; when your program is compiled, the expression is replaced with a constant number of bytes. The C standard does not set in stone the data type sizes described earlier, but your compiler knows how much space each type takes on your system, and uses that knowledge to replace uses of {{Shi|c|sizeof}}. == {{Shi|c|static}} == When you declare a local variable as {{Shi|c|static}}, it is created just like any other variable. However, when the variable goes out of scope&mdash;the block it was local to exits&mdash;the variable stays in memory, retaining its value. The variable stays in memory until the program ends. While this behavior resembles that of global variables, static variables still obey scope rules and therefore cannot be accessed outside of their scope. This is called ''static storage duration''. Variables declared {{Shi|c|static}} are initialized to zero by default. They can be initialized explicitly on declaration to any constant value. The initialization is made just once, at compile time. Consider this example: {{XExample|1=<syntaxhighlight lang="c" line highlight="8,15"> #include <stdio.h> void up(void) { /* k is set to 0 when the program starts. The line is then "ignored" * for the rest of the program (i.e. k is not set to 0 every time up() * is called) */ static int k = 0; k++; printf("up() called. k = %2d\n", k); } void down(void) { static int k = 0; k--; printf("down() called. k = %2d\n", k); } int main(void) { int i; for (i = 0; i < 3; i++) up(); for (i = 0; i < 2; i++) down(); return 0; } </syntaxhighlight> Output: up() called. k = 1 up() called. k = 2 up() called. k = 3 down() called. k = -1 down() called. k = -2}} The <code>k</code> variables retain their value, but they are two different variables, one in each of their scopes. == Other modifiers == Included here, for completeness, are more of the modifiers that standard C provides. ''volatile'' is more of interest to advanced programmers. ''register'' is deprecated and generally not of interest to either beginning or advanced programmers. ===volatile=== '''<code>volatile</code>''' is a special type of modifier which informs the compiler that the value of the variable may be changed by external entities other than the program itself. This is necessary for certain programs compiled with optimizations – if a variable were not defined <code>volatile</code> then the compiler may assume that certain operations involving the variable are safe to optimize away when in fact they aren't. ''volatile'' is particularly relevant when working with embedded systems (where a program may not have complete control of a variable) and multi-threaded applications. ===auto=== {{Outdated|C23 redefines {{Shi|c|auto}} for type inference.}} <code>'''auto'''</code> is a modifier which specifies an "automatic" variable that is automatically created when in scope and destroyed when out of scope. If you think this sounds like pretty much what you've been doing all along when you declare a variable, you're right: all declared items within a block are implicitly "automatic". For this reason, the ''auto'' keyword is more like the answer to a trivia question than a useful modifier, and there are lots of very competent programmers that are unaware of its existence. ===register=== '''<code>register</code>''' is a hint to the compiler to attempt to optimize the storage of the given variable by storing it in a register of the computer's CPU when the program is run. Most optimizing compilers do this anyway, so use of this keyword is often unnecessary. In fact, ANSI C states that a compiler can ignore this keyword if it so desires – and many do. Microsoft Visual C++ is an example of an implementation that completely ignores the ''register'' keyword. == References == {{reflist}} [[de:C-Programmierung: Variablen und Konstanten]] [[et:Programmeerimiskeel C/Muutujad]] [[fi:C/Muuttujat]] [[fr:Programmation C/Bases du langage]] [[it:C/Variabili, operatori e costanti/Variabili]] [[ja:C言語 変数]] [[pl:C/Zmienne]] [[pt:Programar em C/Variáveis]] {{nav}} q01bkc7mbufr7av8ducmohksrxyjjr2 Wikibooks:Requests for permissions 4 840 4671980 4671902 2026-09-23T15:46:11Z Codename Noreste 3441010 /* DavidCota64 (discuss · contribs · count · SUL account · logs · block log · rfp · rights) (Reviewer) */ reply: {{done}}. (-) ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 4671980 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Requests for permissions/Archives}} {{shortcut|WB:RFP|WB:PERM}} [[Category:Wikibooks administration|{{PAGENAME}}]] All [[Wikibooks:User rights|rights]] available on Wikibooks are handled here, including [[Wikibooks:Autoreviewed users|autoreview]], [[Wikibooks:Reviewers|reviewer]], [[Wikibooks:Importers|importer]], [[Wikibooks:Import uploaders|import uploader]], [[Wikibooks:Uploaders|uploader]], [[Wikibooks:Temporary account IP viewer|temporary account IP viewer]], [[Wikibooks:Administrators|administrator]], [[Wikibooks:Interface administrators|interface administrator]], [[Wikibooks:Administrators|bureaucrat]], [[m:CheckUser|CheckUser]], [[Wikibooks:Pseudo-bots|pseudo-bot]], and [[Wikibooks:Bots|bot]] flags. A nomination must demonstrate how the project will benefit from granting the rights. ;Nominations :To nominate a user (including yourself), add their username to the appropriate section below. Please explain why you feel the nominated user would be a good choice. All registered Wikibookians may comment, and provide arguments in support or opposition. For the bot flag, technical information about the bot may be requested. See the specific requirements for each type of access on their respective pages. Please do not nominate other users unless they have already agreed to be nominated. ;Outcome :Consensus does not need to be demonstrated &mdash;though discussion is welcome&mdash; in granting autoreview, reviewer, importer, and uploader flags. Administrators may use their best judgement in granting those. Interface admin was historically part of the administrator tool set and is granted on request to administrators. All other tools require community consensus and can only be granted by bureaucrats. Access to CheckUser is governed by [[meta:CheckUser policy|CheckUser policy]]. After about one week, if there is consensus to grant access, then a [[Special:ListUsers/bureaucrat|bureaucrat]] (or steward if there are no bureaucrats) will make it so and record the fact here. If not, the bureaucrat or steward may refuse to grant the rights and the request will remain until a consensus is reached. The importer and import uploader permissions require a 5-day discussion before the right(s) can be granted. ;Note(s) :This project allows [[Wikibooks:Global rights policy#Global bots|global bots]], but otherwise does ''not'' allow automatic approval, nor does it utilize the [[:m:Bot policy|standard bot policy]]. = Removal of permissions= {{mbox | image = [[File:Symbol comment vote.svg|40px]] | text = '''Note:''' You may request removal of ''your own'' rights at [[meta:Steward requests/Permissions]]. Requests to remove others' rights should be placed here, whether due to inactivity, or abuse. Proposals for the removal of advanced permissions (included admin and bureaucrat rights) are governed by the [[WB:ADMIN]] policy. A minimum discussion of two weeks is required to remove an admin or bureaucrat for inactivity. }} = Requests for permissions = {{mbox | image = [[File:Symbol comment vote.svg|40px]] | text = '''Note:''' When adding nominations, please use the format <code>=={{tlx|usercheck|Username}} (Right requested)==</code> followed by the nomination. }} == {{usercheck|DavidCota64}} (Reviewer) == I am requesting reviewer permission because automatic promotion appears not to have occurred, although my account meets the published criteria. The account was registered in July 2025, has a confirmed email address, more than 100 edits, sufficient non-talk edits and edit summaries, edits across more than ten pages, the required temporal distribution, and current activity in Recent Changes. I have never been blocked or previously had reviewer permission removed. The permission would support the maintenance and stabilisation of the 46-page active edition of Foundations of the Ontology of Emergent Complexity, whose current revisions are largely awaiting review. [[User:DavidCota64|DavidCota64]] ([[User talk:DavidCota64|discuss]] • [[Special:Contributions/DavidCota64|contribs]]) 11:21, 18 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:46, 23 September 2026 (UTC) =={{usercheck|TechVindicator}} (Autoreview)== I am requesting autoreview permissions because I believe I have largely met the criteria, and published high quality pages onto Wikibooks, that, I believe, do not require reviewing. An example is [[Wikijunior:Africa/Central African Republic]]. I have also made more than 100 edits to Wikibooks and helped with moderation, as well as welcoming new users. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 07:13, 23 September 2026 (UTC) 290hwzi9gfhgf52gnyxsiboo7080bjd 4671981 4671980 2026-09-23T15:46:52Z Codename Noreste 3441010 /* TechVindicator (discuss · contribs · count · SUL account · logs · block log · rfp · rights) (Autoreview) */ reply ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]]) 4671981 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{Requests for permissions/Archives}} {{shortcut|WB:RFP|WB:PERM}} [[Category:Wikibooks administration|{{PAGENAME}}]] All [[Wikibooks:User rights|rights]] available on Wikibooks are handled here, including [[Wikibooks:Autoreviewed users|autoreview]], [[Wikibooks:Reviewers|reviewer]], [[Wikibooks:Importers|importer]], [[Wikibooks:Import uploaders|import uploader]], [[Wikibooks:Uploaders|uploader]], [[Wikibooks:Temporary account IP viewer|temporary account IP viewer]], [[Wikibooks:Administrators|administrator]], [[Wikibooks:Interface administrators|interface administrator]], [[Wikibooks:Administrators|bureaucrat]], [[m:CheckUser|CheckUser]], [[Wikibooks:Pseudo-bots|pseudo-bot]], and [[Wikibooks:Bots|bot]] flags. A nomination must demonstrate how the project will benefit from granting the rights. ;Nominations :To nominate a user (including yourself), add their username to the appropriate section below. Please explain why you feel the nominated user would be a good choice. All registered Wikibookians may comment, and provide arguments in support or opposition. For the bot flag, technical information about the bot may be requested. See the specific requirements for each type of access on their respective pages. Please do not nominate other users unless they have already agreed to be nominated. ;Outcome :Consensus does not need to be demonstrated &mdash;though discussion is welcome&mdash; in granting autoreview, reviewer, importer, and uploader flags. Administrators may use their best judgement in granting those. Interface admin was historically part of the administrator tool set and is granted on request to administrators. All other tools require community consensus and can only be granted by bureaucrats. Access to CheckUser is governed by [[meta:CheckUser policy|CheckUser policy]]. After about one week, if there is consensus to grant access, then a [[Special:ListUsers/bureaucrat|bureaucrat]] (or steward if there are no bureaucrats) will make it so and record the fact here. If not, the bureaucrat or steward may refuse to grant the rights and the request will remain until a consensus is reached. The importer and import uploader permissions require a 5-day discussion before the right(s) can be granted. ;Note(s) :This project allows [[Wikibooks:Global rights policy#Global bots|global bots]], but otherwise does ''not'' allow automatic approval, nor does it utilize the [[:m:Bot policy|standard bot policy]]. = Removal of permissions= {{mbox | image = [[File:Symbol comment vote.svg|40px]] | text = '''Note:''' You may request removal of ''your own'' rights at [[meta:Steward requests/Permissions]]. Requests to remove others' rights should be placed here, whether due to inactivity, or abuse. Proposals for the removal of advanced permissions (included admin and bureaucrat rights) are governed by the [[WB:ADMIN]] policy. A minimum discussion of two weeks is required to remove an admin or bureaucrat for inactivity. }} = Requests for permissions = {{mbox | image = [[File:Symbol comment vote.svg|40px]] | text = '''Note:''' When adding nominations, please use the format <code>=={{tlx|usercheck|Username}} (Right requested)==</code> followed by the nomination. }} == {{usercheck|DavidCota64}} (Reviewer) == I am requesting reviewer permission because automatic promotion appears not to have occurred, although my account meets the published criteria. The account was registered in July 2025, has a confirmed email address, more than 100 edits, sufficient non-talk edits and edit summaries, edits across more than ten pages, the required temporal distribution, and current activity in Recent Changes. I have never been blocked or previously had reviewer permission removed. The permission would support the maintenance and stabilisation of the 46-page active edition of Foundations of the Ontology of Emergent Complexity, whose current revisions are largely awaiting review. [[User:DavidCota64|DavidCota64]] ([[User talk:DavidCota64|discuss]] • [[Special:Contributions/DavidCota64|contribs]]) 11:21, 18 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:46, 23 September 2026 (UTC) =={{usercheck|TechVindicator}} (Autoreview)== I am requesting autoreview permissions because I believe I have largely met the criteria, and published high quality pages onto Wikibooks, that, I believe, do not require reviewing. An example is [[Wikijunior:Africa/Central African Republic]]. I have also made more than 100 edits to Wikibooks and helped with moderation, as well as welcoming new users. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 07:13, 23 September 2026 (UTC) : {{done}}. However, once you automatically receive reviewer permissions, your autoreviewed user status will be removed accordingly. It will have no effect whatsoever. Thank you. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:46, 23 September 2026 (UTC) jlvpjl3p43l1i4tumh4n0h5ueky12mz Wikijunior:Solar System/Mars 110 16736 4672043 4654282 2026-09-24T04:15:36Z ~2026-51336-50 3626726 Idk 4672043 wikitext text/x-wiki <div style="float:right; border:2px solid #aaaaaa; width:250px; margin-left:0.2em; padding:0.4em"> [[Image:Mars symbol (heavy blue).svg|80px|♂]] '''Mars Facts''': *Mars is red because of rust in the surface rocks *A volcano on Mars called ''Olympus Mons'' is the highest mountain in our Solar System. *Mars has polar ice caps that look like the ones on [[../Earth/]]. *Mars has ancient river beds where scientists think liquid water flowed millions or billions of years ago. *The ''Tooting'' crater on Mars was named after a suburb in London because the discoverer "thought [his] mum and brother would get a kick out of having their home town paired with a land form on Mars". </div> Mars is the fourth planet from the Sun. It is called a ''terrestrial'' planet because its outer layers are made of rocky material like the Earth. == How big is the planet?== [[File:Mars_Earth_Comparison.png|thumb|left|Comparison of the size of Mars and the Earth]] Mars is the second smallest of the eight major planets in the Solar System. Only Mercury is smaller. It is nearly 7,000 kilometres (km) wide; just over half the width of the Earth. Its volume is about 15% of the Earth. Since a lot of the Earth is covered by water, the total surface area of the Mars is nearly as large as all of the land on the Earth. It is possible that its size may eventually permit human colonies. {{clear}} == What is its surface like? == [[File:Spirit_Lookout_L256t-A413R1_br2.jpg|center|thumb|upright=3|A panorama view from the Mars rover ''Spirit''.]] The surface of Mars is a lot like a desert on Earth; it is very dry and dusty, but it is also very cold. There are a lot of loose rocks and dunes of fine sand. Crater impacts mark the surface, but these are not as common as on the Moon. One of the craters is the huge ''Hellas Planitia''. It is about half the size of the continental United States. The southern half of the planet has more craters than in the north. The south is also higher in elevation. [[Image:Olympus Mons.jpg|thumb|An overhead view of ''Olympus Mons'', the highest mountain in the Solar System.]] There is an area on Mars called the ''Tharsis Bulge'', which has four huge volcanoes. These volcanoes have not erupted for millions of years. The largest volcano is called Olympus Mons. It is 27 km tall, making it the highest mountain in the Solar System; ''more than three times'' higher than Mount Everest on Earth. It is around 625 km across and takes up an area as big as the US state of Arizona. Mars also has a huge canyon called the ''Valles Marineris''. It is much bigger than the Grand Canyon on Earth. It is 4000 km long, up to 7 km deep and up to 200 km wide. Scientists think that when the ''Tharsis Bulge'' was created, the surface of Mars cracked to form the ''Valles Marineris''. Like the Earth, Mars has ice caps at its poles. However, they are made from frozen carbon dioxide as well as ice. During the Martian winter at each pole, the cap grows as carbon dioxide from the atmosphere freezes. The cap shrinks again during the Martian summer. As on Earth, when it is winter at one pole it is summer at the other. In some places, there are dry ''channels'' that look like they were made by running water. So, a long time ago Mars may have had lakes and streams made of water. Now all of the water is frozen into ice under the surface. There is an atmosphere on Mars, but it is very thin. There is also much more carbon dioxide in it than oxygen. (Oxygen is the gas we need when we breathe in; carbon dioxide the gas we get rid of when we breathe out.) So, we would need spacesuits to visit Mars. The atmosphere helps protect the surface from smaller meteorites. When Mars comes closest to the Sun, the atmosphere can stir up storms of dust. Some of these storms are gigantic; they can cover the entire planet in clouds of dust. Dust storms on Mars can last for hundreds of days, with wind speeds of up to 200 kilometres per hour. Huge storms like these have been seen from the Earth through telescopes. {{clear}} {{ {{BOOKTEMPLATE}} }} {{{{BOOKTEMPLATE}}/Mars}} == How long is a day and year on this planet? == One day on Mars is only 39 minutes and 35 seconds longer than a day on Earth (1.026 Earth days). A year on Mars is almost two Earth years long (687 Earth days). Much like the Earth, the axis of rotation of Mars is tilted at an angle. This tilt causes seasons on Mars as it travels around the Sun. Summer occurs on the half of the planet that is tilted toward the Sun, and winter on the other half. After half a Martian year has passed, the seasons are reversed. But these seasons are about twice as long as on Earth. == What is it made of? == [[Image:Mars interior.jpg|thumb|left|visualization of the Martian interior.]] The outer, rocky surface of Mars is called the crust. Most of the crust is made from basalt, a type of rock made when lava grows cold. Like the Earth, Mars has a thick layer of rock below the crust called the mantle. The mantle is much hotter than the crust, and the mantle rock is partly molten. But the crust on Mars has grown thick, so the lava from the mantle no longer reaches the surface. There are volcanoes on Mars, but they are no longer active. At the center of Mars is a core made of the metals iron and nickel. If Mars were the same size as the Earth, the core of Mars would be smaller than the Earth's core. So a larger amount of Mars is made out of rock. Because rock is lighter than the metals in the core, Mars has a lower density than the Earth. {{clear}} == How heavy would I be on Mars? == [[Image:MarsFromAbzt.jpg|thumb|Detailed picture of Mars]] If you were on Mars, you would be lighter, as Mars' gravity only has a force about two fifths as strong as the that of Earth's. You could lift objects that weigh almost three times as much compared to similar objects here on the Earth. You could jump up almost three times higher, and it would take much longer to fall to the ground from the same height. Even though it looks as though you would be like a comic-book hero on Mars, there are some things you couldn't do. Although a big rock would ''weigh'' less and you could pick it up, it would still have the same ''mass''. If you tried to catch it, it would knock you over, and if it landed on you it would crush you. A car on the surface of Mars would need the same amount of power to speed up, although going uphill would be less of a problem. It may, however, need more room to stop. Because of the reduced gravity a vehicle would not "grip" the ground on Mars as strongly, but the constant mass would keep the vehicle moving just as strongly, making it easy to go into a skid. == Who was it named after?== In Roman mythology, Mars was the god of war and agriculture. The planet Mars was named this because the planet looks red like blood, from rust in its surface rocks. == Who discovered Mars? == Nobody knows, but the earliest records we know of were by Ancient Egyptians, more than 4000 years ago, noting Mars' movement. On one pharaoh's tomb, named ''Seti I'', Mars is drawn on the ceiling. The Babylonians (in the Middle East), Chinese, and Greeks also studied Mars more than 3000 years ago. The Greeks learned about Mars from the Babylonians, and since the Babylonians called it their god of war, named ''Nergal'', the Greeks called it their own god of war, ''Ares''. Exploration of Mars was first attempted in 1960, with Mars 1. It failed, along with several other missions by the Soviet Union in the 1960s. The first successful mission to Mars was in 1964, by Mariner 4, by the U.S. Most of the other Mariner missions to Mars were successful. The last Mariner mission to Mars, Mariner 9, got there in the midst of a dust storm, and orbited the planet for several months before it could get a good look at the surface. So far, all these missions were flybys or orbiters. The first spacecraft to land on Mars was Viking 1 in 1976. Viking 2 landed 19 days later. Together, they took many good pictures of Mars' surface. {| |- | <!-- For over 2 decades, until Pathfinder, Viking 1/2 images were our only images taken on the surface of Mars --> {{multiple image | align = left <!-- Set so all images have a height of 100 pixel. --> | width1 = 100 | width2 = 110 | width3 = 122 | width4 = 123 | width5 = 100 | width6 = 196 | image1 = Mars Viking 11h016.png | caption1 = Viking&nbsp;1 lander site (February 11, 1978). | image2 = PIA00563-Viking1-FirstColorImage-19760721.jpg | caption2 = Viking&nbsp;1 lander site (1st color, July 21, 1976). | image3 = First Color Image of the Viking Lander 2 Site.jpg | caption3 = Viking&nbsp;2 lander site (1st color, September 5, 1976). | image4 = Vl2 22g144-MarsViking2-19770925.gif | caption4 = Viking&nbsp;2 lander site (September 25, 1977). | image5 = Mars Viking 21i093.png | caption5 = Frost at Viking&nbsp;2 site (May 18, 1979). | image6 = Mars Viking 12a240.png | caption6 = Martian sunset over Chryse Planitia at Viking&nbsp;1 site (August 20, 1976). }} |} [[../Asteroid belt|Next Topic: Asteroid belt]] == References == * Steven W. Squyres, ''Mars'', World Book Online Reference Center, World Book, Inc., 2004. [https://www.nasa.gov/worldbook/mars_worldbook.html] [http://www.worldbookonline.com/wb/Article?id=ar346000] * "a ''terrestrial'' planet" [http://www.solarviews.com/eng/solarsys.htm] * "How big is the planet?" [https://nssdc.gsfc.nasa.gov/planetary/factsheet/marsfact.html] [https://solarsystem.jpl.nasa.gov/planets/profile.cfm?Object=Mars&Display=Facts] * "How long is a day on this planet?" [http://www.solarviews.com/eng/mars.htm] [https://solarsystem.jpl.nasa.gov/planets/profile.cfm?Object=Mars&Display=Facts] * "What is it made of?" Steven W. Squyres, ''ibid.'' d1b075ngh0rac361a219nnldxcctgtd Art History/20th Century 0 19784 4672001 4614539 2026-09-23T20:18:25Z CommonsDelinker 49843 Replacing Le_Voyage_dans_la_lune_(black_and_white,_1902).webm with [[File:Le_Voyage_dans_la_Lune_(1902).webm]] (by [[:c:User:CommonsDelinker|CommonsDelinker]] because: [[:c:COM:Duplicate|Duplicate]]: Exact or scaled-down duplicate: [[:c::File:Le Voyage da 4672001 wikitext text/x-wiki {{TOCright}} The twentieth century has seen huge changes in the modes and meanings of artistic production that mirror the enormous social changes that have occurred during the same time period. Continuing with the break with the academic values such as the hierarchy of genres, many movements and many countries re-evaluated aesthetics, technique, color, media, meaning, and many other aspects of artistic enterprise. Technology has had not only an indirect impact on artists, but often is the subject matter, or even the media that artists have worked with. The Impressionists, at the end of the nineteenth century, who championed landscape painting and revolutionized technique and use of color, helped to open the floodgates for many more movements (not all of which identified themselves as such). The Secession movement, Fauvism, Cubism, Expressionism, Dada, The Bauhaus, Futurism, Surrealism, Suprematism, De Stijl, Abstract Expressionism, Pop Art, Op Art, Minimalism, and the Postmodern are some of the major movements that have shaped the century and changed our very conceptions of what art is. ==Secessionist movement== [[File:The Kiss - Gustav Klimt - Google Cultural Institute.jpg|thumb|left|The Kiss by Gustav Klimt - 1907-1908.]] The Secessionist movement was the Austrian branch of a larger movement known primarily as Art Nouveau ("new art"). Depending on the country, the style is also known as Jugendstil (Germany), Style Liberty (Italy), Modernisme (Spain), or Latvian Romanticism. Art Nouveau is an umbrella term but also refers to works of this style produced in France and Belgium. Art Nouveau has its roots in the English Arts and Crafts movement of the 19th century; in fact, certain artists, like Charles Rennie Mackintosh, work in both styles. The purpose of Art Nouveau was to create what is known as a complete work of art - a work that includes painting, drawing and printmaking as well as applied arts and architecture. For this reason, some of the most beautiful and informative Art Nouveau works are complete rooms or houses where every object within is executed in Art Nouveau style. Art Nouveau is characterized by free-flowing floral, vegetal, and other typically feminine motifs. It also features a kind of romantic mysticism that can be traced back to the Pre-Raphaelite and Symbolist movements of the 19th century. Some well-known Art Nouveau artists and craftsmen include Alphonse Mucha (Czech), an accomplished printmaker and painter; Antoni Gaudi (Spanish), whose architectural works dot Barcelona; Hector Guimard (French), whose wrought-iron entrances for the Paris metro have become his legacy; Gustav Klimt (Austrian), who led the Austrian Secessionists with his opulent and complex paintings; and Louis Comfort Tiffany (American), who is well-known for his distinctive stained-glass work. ==Fauvism== [[File:Robert Delaunay L'homme à la tulipe (Portrait de Jean Metzinger) 1906.jpg|thumb|''L'homme à la tulipe (Portrait de Jean Metzinger)'' Fauvist painting by Jean Metzinger - 1906.]] Fauvism, whose name derives from the French word for "wild beast," was a Primitivist movement centered in Paris in the first decade of the 20th century. The most well-known Fauvist artists are Henri Matisse and Andre Derain. The large blocks of color and simplified forms Fauvist artists used undoubtedly influenced the Cubist movement, which overlapped Fauvism by a few years. ==Cubism== [[File:Juan Gris - Portrait of Pablo Picasso - Google Art Project.jpg|left|thumb|A cubist Portrait of Pablo Picasso, done by Juan Gris.]] The Father of Cubism is said to be [[wikipedia:Cezanne|Cezanne]]. Pablo [[wikipedia:Picasso|Picasso]], a Spanish artist, who had many phases in his long career, picked up the gauntlet of Cubism. His famous "Demoiselles d'Avignon" of 1907, housed in the Museum of Modern Art in New York, depicts five nude women, possibly prostitutes, in an interior. The painting is primitivistic - Picasso synthesized his well-documented interest in African masks into the faces of the figures. The fragmentation and flattening of the figures also anticipates the development of analytical Cubism a few years later. One of the Spaniard's most socio-political cubist paintings is "Guernica" of 1937, his grey, black and white portrait of the horrors of war. The basque town of Guernica was bombed by the German Luftwaffe on April 26, 1937.[http://en.wikipedia.org/wiki/Bombing_of_Guernica] Another founding member of the Cubist movement was Georges Braque, a French artist whose analytical Cubist work from the 1910s is quite similar to Picasso's. Braque and Picasso worked together closely, and Braque's influence on Picasso (and vice versa) should not be downplayed. Other major artists of the analytical Cubist movement include Juan Gris, whose interest in mathematics made his art more regularized, and less fragmented, than Picasso's; Marcel Duchamp, whose early, pre-readymade works such as "Nude Descending a Staircase" are highly fragmented and undeniably Cubist; Jean Metzinger; and Albert Gleizes. ==Dadaism== [[File:Grand opening of the first Dada exhibition, Berlin, 5 June 1920.jpg|thumb|1920 Dada exhibition in Berlin.]] Dadaism was a German-French-American movement of the 1920s up to the 1960s which was a reaction to the horrors of World War I; it incorporated wordplay (largely nonsensical) and collage. It was founded by the poet and playwright Tristan Tzara in the Cabaret Voltaire, France. Major members included Francis Picabia, Hugo Ball, Hannah Höch, and Marcel Duchamp. ==Futurism== Futurism was an Italian movement in the 1910s and 1920s that was based on a fascination with movement, technology, and machinery. Major members included the founder Filippo Marinetti (''Zang Tumb Tumb''; poem), Umbertro Boccioni (''Unique Forms of Continuity in Space''; sculpture) and Giacomo Balla (''Dynamism of a Dog on a Leash''; painting), the latter two both painters and sculptors. ==Vorticism== [[File:Dazzle-ships in Drydock at Liverpool.jpg|thumb|left|The Vorticist Dazzle-ships in Drydock at Liverpool]] Vorticism was an English movement of the 1910s; it was founded by writer and painter Wyndham Lewis as a reaction to Futurism. The movement officially began in 1914, in the first issue of literary magazine ''BLAST'', but ended after the main members witnessed (or died in) World War I. The war painter Christopher Richard Wynne Nevinson was briefly involved, but was later expelled from the group and became identified as a Futurist. Sculptor Jacob Epstein was not formally involved, but his ''Torso in Metal from Rock Drill'' is regarded as a major Vorticist work. Major members included David Bomberg (''The Mud Bath''; painting), Edward Wadsworth (''Dazzle-ships in Drydock at Liverpool''; painting), Henri Gaudier-Brzeska (''Vortex (written from the trenches)''; essay) and Ezra Pound (''Vortex''; essay). ==Postmodernism== Postmodern artist Barbara Kruger is known for critical images inspired by commercial advertising. She is the author of several books. "Love for Sale" shows Kruger's blown up photographic black and white images with text in a red box superimposed creating a new meaning for the viewer. Kruger taught at the Art Institute and Cal Arts during the 70s. Kruger's work often focuses on feminist issues. Kruger's Whitney Biennial 2'x3' work, enlarged as she tackled billboards in the US and other countries. She was the subject of a lecture given at the 3rd Annual Conference of the Society of the Word and Image at Carleton University in Ontario, Canada in 1993. ==Abstract Expressionism== A school of painting that flourished after World War II until the early 1960s, characterized by the view that art is nonrepresentational and chiefly improvisational. Abstract art is defined as art that has no reference to any figurative reality. In its wider definition the term describes art that depicts real forms in a simplified or rather reduced way - keeping only an allusion of the original natural subject. The abstract paintings of Joan Miró are a good example of this wider definition. The term non-figurative is used as a synonym. In the twentieth century Wassily Kandinsky is considered as the inventor of non-figurative art. Over a period of several years his paintings moved gradually away from figurative subjects. In 1910 he created the first completely abstract work of art - a watercolor - without any reference to reality. Wassily Kandinsky not only became the first abstract artist, he also promoted it as a theorist. In 1912 his book On the Spiritual in Art was published. A movement of abstract painting that emerged in New York City during the mid-1940s and attained singular prominence in American art in the following decade; also called action painting and the New York school. Jackson Pollock 's turbulent yet elegant abstract paintings, which were created by spattering paint on huge canvases placed on the floor, brought abstract expressionism before a hostile public. Willem de Kooning 's first one-man show in 1948 established him as a highly influential artist. Other important artists involved with the movement included Hans Hofmann , Robert Motherwell , and Mark Rothko ; among other major abstract expressionists were such painters as Clyfford Still , Theodoros Stamos, Adolph Gottlieb, Helen Frankenthaler, Lee Krasner, and Esteban Vicente. ==20th Century Art Gallery== ===1900-1920=== <gallery mode="packed" heights="250"> File:The Capture of the Forts at Taku.jpg|''The Capture of the Forts at Taku'' by Fritz Neumann (Between 1900 and 1919) File:Gustav Klimt, 1907, Adele Bloch-Bauer I, Neue Galerie New York.jpg|''Portrait of Adele Bloch-Bauer I'' by Gustav Klimt - 1907. File:Robert Delaunay, 1912, Les Fenêtres simultanée sur la ville (Simultaneous Windows on the City), 40 x 46 cm, Kunsthalle Hamburg.jpg| ''Simultaneous Windows on the City'' Abstract Cubist painting by Robert Delaunay - 1912. File:Egon Schiele - Portrait of Wally Neuzil - Google Art Project.jpg|''Portrait of Wally Neuzil'' by Egon Schiele - 1912. File:Slovane v pravlasti 81x61m.jpg|''Slavs in their Original Homeland: Between the Turanian Whip and the Sword of the Goths'' by Alphonse Mucha - 1912 File:KlimtDieJungfrau.jpg|''The Virgin'' by Gustav Klimt - 1913 File:Brooklyn Museum - Painting No. 48 - Marsden Hartley - overall.jpg|''Painting No. 48.'' by Marsden Hartley - 1913. An example of American Modernism. File:Bluemner-Form and Light.jpg|''Form and Light, Motif in West New Jersey'' by Oscar Florianus Bluemner - 1914. An example of American Modernism. File:Portrait of a German Officer, Marsden Hartley.jpg|''Portrait of a German Officer'' by Marsden Hartley - 1914. An example of American Modernism. File:Vorticist Study (1914).jpg|''Vorticist Study'' by Edward Wadsworth - 1914 File:AT&T's Spirit of Communications (Golden Boy) sculpture in its current location outside of AT&T's headquarters in Dallas, Texas.jpg|''Spirit of Communications'' Bronze statue by Evelyn Beatrice Longman - 1914-1916. File:Kazimir Malevich, 1915, Black Suprematic Square, oil on linen canvas, 79.5 x 79.5 cm, Tretyakov Gallery, Moscow.jpg|''Black Square'' by Kazimir Malevich - 1915. File:Interior of a Studio.jpg|''Interior of a Studio'' by Sigrid Hjertén - 1916 File:Bermuda No. 2, The Schooner MET DP242074.jpg|''Bermuda No. 2, The Schooner'' Cubist and Futurist art by Charles Demuth - 1917. File:Marcel Duchamp, 1917, Fountain, photograph by Alfred Stieglitz.jpg|''Fountain'' by Marcel Duchamp - 1917. File:Stanton Macdonald-Wright - Synchromy No. 3 - Google Art Project.jpg|''Synchromy No. 3'' by Stanton Macdonald-Wright - 1917. An example of Synchromism. </gallery> ===1920-1945=== <gallery mode="packed" heights="250"> File:15 23 0110 lincoln.jpg|''Abraham Lincoln'' Marble statue by Daniel Chester French - 1920. File:Florine Stettheimer. Asbury Park South, 1920.jpg|''Asbury Park South'' by Florine Stettheimer - 1920. An example of Jazz Age inspired artwork. File:Joost Schmidt Bauhausausstellung 1923.jpg|''Bauhausausstellung'' Bauhaus style by Joost Schmidt - 1923. File:Vassily Kandinsky, 1923 - On White II.jpg|''On White II'' by Vassily Kandinsky - 1923. File:NY Met demuth figure 5 gold.JPG|''I Saw the Figure 5 in Gold'' Cubist and Futurist art by Charles Demuth - 1928. File:Grant Wood - American Gothic - Google Art Project.jpg|''American Gothic'' Social Realism painting by Grant Wood - 1930. File:Slav Epic poster - Alfons Mucha.jpg|''The Slav Epic'' Poster by Alfons Mucha - 1930 File:KogaHarue Make-up on the outside of Window.png|''Makeup through the Window'' by Harue Koga - 1930. An example of Japanese surrealism. File:Aerial view of the Statue of Christ the Redeemer.jpg|''Christ the Redeemer'' statue - 1931. File:Guardians of Traffic (34751724693).jpg|4 of 8 ''Guardians of Traffic'' art deco sculptures by Henry Hering and Frank Walker ~ 1932. File:Chicago world's fair, a century of progress, expo poster, 1933, 2.jpg|Chicago World's Fair art deco poster - 1933. File:Mural-Ariel-Rios-Marsh-1.jpg|''Workers Sorting the Mail'' Art Deco mural by Reginald Marsh - 1936. File:Nighthawks by Edward Hopper 1942.jpg|''Nighthawks'' by Edward Hopper - 1942. </gallery> ===1945-1970=== <gallery mode="packed" heights="250"> File:Paolo Monti - Servizio fotografico (Italia, 1953) - BEIC 6342543.jpg|''spiralis'' by Roberto Crippa - 1953. An example of Spatialism. File:Ernani Costantini 1956 jazz.jpg|''Jazz'' by Ernani Costantini - 1956. File:The (old) Detroit City-County Building (Not sure what it's called now) - panoramio.jpg|''Spirit of Detroit'' bronze statue by Marshall Fredericks - 1958. File:Welcome to Fabulous Las Vegas.jpg|''Welcome to Fabulous Las Vegas'' sign, an iconic example of Googie style - 1959. File:Picture produced by Drawing Machine 1.jpg|Picture by Drawing Machine 1, by Desmond Paul Henry - 1962. File:Miriam Laufer 1962.jpg|Miriam Laufer with paining in 1962. File:IKB 191.jpg|''IKB 191'' Minimalist work by Yves Klein - 1962 File:SMITH CUBI VI.JPG|David Smith, ''Cubi VI'' - 1963. File:Mosaik Alexanderstr 9 (Mitte) Unser Leben&Walter Womacka&19642.jpg|''Our Life'', an East German mural in the social realism style - 1964. File:Marta Minujín Leyendo las noticias3.jpg|''Leyendo las noticias'' by Marta Minujín - 1965. An example of ''Happening'' performance art. File:Who's Afraid of Red, Yellow, and Blue I.svg|''Who's Afraid of Red, Yellow, and Blue I'' Minimalist artwork by Barnett Newman - 1966. File:Geisser Plakat Mohrenball 1969.jpg|Poster in the International Typographical Style - 1969. </gallery> ===1970-1999=== <gallery mode="packed" heights="250"> File:Salvador Dali The Rainbow 1972.jpg|''The Rainbow'' by Salvador Dali - 1972. File:AA78 by Zdzislaw Beksinski 1978.jpg|''AA78'' a painting in the Fantastic Realism style by Zdzisław Beksiński - 1978. File:Meteorite milton becerra.png|''Meteorite'' by Milton Becerra - 1985. An example of the "Land Art" style. File:Riteofspring.jpg|''Rite of Spring'' by Ronnie Landfield - 1985. An example of the ''Color field'' style of abstract painting. File:Hommage à Newton.jpg|''Homage to Newton'', a surrealist sculpture by Salvador Dali - 1985. </gallery> ===Architecture=== <gallery mode="packed" heights="250"> File:Paris Metro 2 Porte Dauphine Libellule.JPG|Porte Dauphine station of the Paris Métro, an Art Nouveau building - 1900. File:Moana surfrider.JPG|''Moana Hotel'' - 1901. File:Le sacre coeur.jpg|''Sacré-Cœur''- 1919. File:Empire State Building (aerial view).jpg|''Empire State Building'' Art deco architecture - 1931. File:CMC-Union Terminal.jpg|''Cincinnati Union Terminal'' Art Deco train station - 1933. File:Wright Sketches for Broadacre City.jpg|Frank Loyd Wright sketches for ''Broadacre City''. File:Below Golden Gate Bridge.jpeg|''Golden Gate Bridge'' Art Deco bridge - 1937. File:Jefferson Memorial At Dusk 1.jpg|''Jefferson Memorial'' - 1943. File:Tokyo Tower 20060211.JPG|''Tokyo Tower'' - 1958. File:NYC - Guggenheim Museum.jpg|''Solomon R. Guggenheim Museum'' Modern architecture by Frank Loyd Wright - 1959. File:Space Needle 2011-07-04.jpg|''Space Needle'' - 1961. File:LAX LA.jpg|''Theme Building'' - 1961. File:17-08-islcanus-RalfR-DSC 3883.jpg|''Montreal Biosphere'' - 1967. File:St Louis night expblend cropped.jpg|''Gateway Arch'' - 1967. File:Catedral Metropolitana de Brasilia.jpg|''Cathedral of Brasília'' - 1970. File:World Trade Center, New York City - aerial view (March 2001).jpg|''World Trade Center'' New Formalism architecture - 1973. File:Sydney Opera House - Dec 2008.jpg|''Sydney Opera House'' Modernist expressionist architecture - 1973. File:Willis Tower From Lake.jpg|''Willis Tower''/''Sears Tower'' International architectural style - 1974. File:Le Stade Olympique de Montréal Nuit Arriere Edit 1.jpg|Olympic Stadium in Montréal - 1970's-1980's. File:HK Bank of China Tower View.jpg|''Bank of China Tower'' - 1990. File:Petronas Panorama II.jpg|''Petronas Towers'' Postmodern Islamic Architecture - 1999. </gallery> == Photography == <gallery mode="packed" heights="300"> File:Prokudin-Gorskii-19.jpg|Early high quality color photograph - 1911. File:Lunch atop a Skyscraper - Charles Clyde Ebbets.jpg|''Lunch atop a Skyscraper'' - 1932. File:Lange-MigrantMother02.jpg|''Migrant Mother'' by Dorothea Lange - 1936. File:Hindenburg disaster.jpg|Hindenburg disaster - 1937. File:Raising the Flag on Iwo Jima by Joe Rosenthal.jpg|''Raising the Flag on Iwo Jima'' - 1945. File:Raising a flag over the Reichstag.jpg|''Raising a flag over the Reichstag'' - 1945. File:Che Guevara - Guerrillero Heroico by Alberto Korda.jpg|''Guerrillero Heroico'' - 1960. File:NASA-Apollo8-Dec24-Earthrise.jpg|''Earthrise'' - 1968 File:Aldrin Apollo 11 original.jpg|Buzz Aldrin on the Moon - 1969. File:The Earth seen from Apollo 17.jpg|''Blue Marble'' - 1972. File:Eagle nebula pillars.jpg|''Pillars of Creation'' - 1995. </gallery> == Film == <gallery mode="packed" heights="250px"> File:Le Voyage dans la Lune (1902).webm|''A Trip to the Moon'', a film directed by Georges Méliès - 1902. File:The Great Train Robbery (1903).webm|''The Great Train Robbery'' - 1903. File:Gertie the Dinosaur.ogv|''Gertie the Dinosaur'' - 1914 File:Charlie Chaplin, The Bond, 1918.ogv|''The Bond'' - 1918. File:FelixTheCat-1919-FelineFollies silent.ogv|''Feline Follies'' - 1919. File:Manhatta (1921).webm|''Manhatta'' by Paul Strand - 1921. The 20th century saw photography and videography take great advances in artistic expression. File:The General (1926).webm|''The General'' - 1926. File:Don Juan (1926).webm|''Don Juan'' introduced synchronized recording music with film - 1926. File:Fifth-Column Mouse 190611 LTGC.webm|''The Fifth-Column Mouse'' an example of a wartime propaganda film - 1943. </gallery> {{status|50%}} {{BookCat}} fnyg3ch8tw4f55nxqww4ljact9chefd Ukrainian 0 19851 4672007 4671903 2026-09-23T22:47:52Z It-is-Truly-Meet 3624460 The break tag is needed to prevent the text from wrapping over the images. Moreover, the print functionality is common to the language Wikibooks (e.g., one can print the German Wiki-book). However, I agree that external links shouldn't be in a book. 4672007 wikitext text/x-wiki {{Expand}} {{Attention}} {{book title|Ukrainian Language Handbook}} {{Category 3}} You are welcome to study one of the most beautiful languages in the world, the descendant of the language of ancient sacred Slavic texts, the Principality of Rus, the language of Cossacks—free people by the will of God known all over the world—and the modern Ukrainian (Ukrainian Cossack) nation, state, and society. Please remember, the main secrets of quickly learning every language are freedom of mind, constant training, using and speaking it. If you want to learn our language—read, write, listen, and make friends with us—and soon you will become the real Cossack, a free-minded man of the world—one of us. :) Don't worry about pronouncing or saying it in your own way or using mixed language—we, Ukrainians, often also use it, and we like to talk and make friends with people from all parts of our world despite their language skills, because we believe that all humanity is one big community of friends, or in our language—real Cossacks. :) Such sites as [[:w:uk:|Wikipedia in Ukrainian]] and [https://translate.google.com/ Google Translate] (one of the best translators in the modern world) will be a great help for you, especially during first time. {{Multiple image |image1=Flag of Ukraine.svg |image2=Найкращі миті життя.jpg |image3=2017 - Київ - Світанок над Дніпром.jpg |image4=Scene along Vorskla River - Poltava - Ukraine - 02 (42920318075).jpg}}<br clear="all"> ==Table of Contents== {{Book search}} {{Print version}} ===Chapter I: Introduction to Ukrainian=== * [[/Introduction/]] * [[/History/]] * [[/Alphabet and Pronunciation/]] ===Chapter II: Nouns=== * [[/Words/]] * [[/Simple Sentences/]] * [[/Complex Sentences/]] * [[/Common Phrases/]] * [[Ukrainian/Texts|Parallel English-Ukrainian and Ukrainian-English Texts]] ===Chapter III: Verbs=== * [[/The Present Tense/]] ===Chapter IV: Ukrainian Culture=== * [[/Ukrainian Culture/Naming|Naming]] * [[/Religion/]] ===Appendices=== * [[/Glossary of Grammatical Terms/]] ===Authors & Contributors=== * [[/Authors & Contributors/]] {{Shelves|Ukrainian language}} {{alphabetical|U}} {{status|25%}} __NOTOC__ __NOEDITSECTION__ [[be:Українська мова]] [[he:אוקראינית]] l1utnw55vi66u1tvzj9p5shdusutiin 4672019 4672007 2026-09-24T01:44:48Z It-is-Truly-Meet 3624460 4672019 wikitext text/x-wiki {{Expand}} {{Attention}} {{book title|Ukrainian Language Handbook}} {{Category 3}} You are welcome to study one of the most beautiful languages in the world, the descendant of the language of ancient sacred Slavic texts, the Principality of Rus, the language of Cossacks—free people by the will of God known all over the world—and the modern Ukrainian (Ukrainian Cossack) nation, state, and society. Please remember, the main secrets of quickly learning every language are freedom of mind, constant training, using and speaking it. If you want to learn our language—read, write, listen, and make friends with us—and soon you will become the real Cossack, a free-minded man of the world—one of us. :) Don't worry about pronouncing or saying it in your own way or using mixed language—we, Ukrainians, often also use it, and we like to talk and make friends with people from all parts of our world despite their language skills, because we believe that all humanity is one big community of friends, or in our language—real Cossacks. :) Such sites as [[:w:uk:|Wikipedia in Ukrainian]] and [https://translate.google.com/ Google Translate] (one of the best translators in the modern world) will be a great help for you, especially during first time. {{Multiple image |image1=Flag of Ukraine.svg |image2=Найкращі миті життя.jpg |image3=2017 - Київ - Світанок над Дніпром.jpg |image4=Scene along Vorskla River - Poltava - Ukraine - 02 (42920318075).jpg}}<br clear="all"> ==Table of Contents== {{Book search}} {{Print version}} ===Chapter I: Introduction to Ukrainian=== # [[/Abbreviations/]] # [[/Glossary of Grammatical Terms/]] # [[/Introduction/]] # [[/History/]] # [[/Alphabet and Pronunciation/]] ===Chapter II: Nouns=== # [[/Words/]] # [[/Simple Sentences/]] # [[/Complex Sentences/]] # [[/Common Phrases/]] # [[Ukrainian/Texts|Parallel English-Ukrainian and Ukrainian-English Texts]] ===Chapter III: Adjectives=== ===Chapter IV: Pronouns=== ===Chapter V: Numerals=== ===Chapter VI: Verbs=== # [[/The Present Tense/]] ===Chapter VII: Adverbs and Adverbial Constructions=== ===Chapter VIII: Conjunctions=== ===Chapter IX: Ukrainian Culture=== # [[/Ukrainian Culture/Naming|Naming]] # [[/Religion/]] ===Appendices=== # ===Authors & Contributors=== * [[/Authors & Contributors/]] {{Shelves|Ukrainian language}} {{alphabetical|U}} {{status|25%}} __NOTOC__ __NOEDITSECTION__ [[be:Українська мова]] [[he:אוקראינית]] da3ezevwb5znzherwgzfp0gfx966hkx 4672042 4672019 2026-09-24T04:00:24Z It-is-Truly-Meet 3624460 This course should completely cover Ukrainian and not simply be a handbook (see the discussion). 4672042 wikitext text/x-wiki {{Expand}} {{Attention}} {{book title|Ukrainian Language Textbook}} {{Category 3}} You are welcome to study one of the most beautiful languages in the world, the descendant of the language of ancient sacred Slavic texts, the Principality of Rus, the language of Cossacks—free people by the will of God known all over the world—and the modern Ukrainian (Ukrainian Cossack) nation, state, and society. Please remember, the main secrets of quickly learning every language are freedom of mind, constant training, using and speaking it. If you want to learn our language—read, write, listen, and make friends with us—and soon you will become the real Cossack, a free-minded man of the world—one of us. :) Don't worry about pronouncing or saying it in your own way or using mixed language—we, Ukrainians, often also use it, and we like to talk and make friends with people from all parts of our world despite their language skills, because we believe that all humanity is one big community of friends, or in our language—real Cossacks. :) Such sites as [[:w:uk:|Wikipedia in Ukrainian]] and [https://translate.google.com/ Google Translate] (one of the best translators in the modern world) will be a great help for you, especially during first time. {{Multiple image |image1=Flag of Ukraine.svg |image2=Найкращі миті життя.jpg |image3=2017 - Київ - Світанок над Дніпром.jpg |image4=Scene along Vorskla River - Poltava - Ukraine - 02 (42920318075).jpg}}<br clear="all"> ==Table of Contents== {{Book search}} {{Print version}} ===Chapter I: Introduction to Ukrainian=== # [[/Abbreviations/]] # [[/Glossary of Grammatical Terms/]] # [[/Introduction/]] # [[/History/]] # [[/Alphabet and Pronunciation/]] ===Chapter II: Nouns=== # [[/Words/]] # [[/Simple Sentences/]] # [[/Complex Sentences/]] # [[/Common Phrases/]] # [[Ukrainian/Texts|Parallel English-Ukrainian and Ukrainian-English Texts]] ===Chapter III: Adjectives=== ===Chapter IV: Pronouns=== ===Chapter V: Numerals=== ===Chapter VI: Verbs=== # [[/The Present Tense/]] ===Chapter VII: Adverbs and Adverbial Constructions=== ===Chapter VIII: Conjunctions=== ===Chapter IX: Ukrainian Culture=== # [[/Ukrainian Culture/Naming|Naming]] # [[/Religion/]] ===Appendices=== # ===Authors & Contributors=== * [[/Authors & Contributors/]] {{Shelves|Ukrainian language}} {{alphabetical|U}} {{status|25%}} __NOTOC__ __NOEDITSECTION__ [[be:Українська мова]] [[he:אוקראינית]] 9doyhx4xba21v31g3mmhqdxqqybi5wv Cookbook:Units of measurement 102 23123 4672070 4477571 2026-09-24T08:37:01Z R. Henrik Nilsson 3395618 Farenheit > Fahrenheit 4672070 wikitext text/x-wiki {{Unit of measurement}} Recipes from different parts of the world use different '''units of measurement'''. This page is a guide to those that are most commonly used in cooking which follow [[w:List of metric units|metric units]], [[w:Imperial units|imperial units]], and [[w:United States customary units|US customary units]]. == List of Units == ===Volume=== ==== Metric ==== *[[Cookbook:Milliliter|ml or mL]], also '''milliliter''', '''millilitre''', '''cc (cubic centimeter)''' *[[Cookbook:Liter|l or L]], also '''liter''', '''litre''', *[[Cookbook:Deciliter|dl or dL]], also '''deciliter''', '''decilitre''' ==== Imperial and US customary ==== *[[Cookbook:Teaspoon|teaspoon]] (also '''t''' or '''tsp.''') *[[Cookbook:Tablespoon|tablespoon]] (also '''T''', '''tbl.''', '''tbs.''', or '''tbsp.''') *[[Cookbook:Fluid Ounce|fluid ounce]] (also '''fl oz''') *[[Cookbook:Gill|gill]] (about 1/2 cup) *[[Cookbook:Cup|cup]] (also '''c''') *[[Cookbook:Pint|pint]] (also '''p''', '''pt''', or '''fl pt''') *[[Cookbook:Quart|quart]] (also '''q''', '''qt''', or '''fl qt''') *[[Cookbook:Gallon|gallon]] (also '''g''' or '''gal''') === Weight === ==== Metric ==== *[[Cookbook:mg|mg]] (also '''milligram''' or '''milligramme''') *[[Cookbook:g|g]] (also '''gram''' or '''gramme''') *[[Cookbook:kg|kg]] (also '''kilogram''' or '''kilogramme''') ==== Imperial and US customary ==== *[[Cookbook:Pound|pound]] (also '''lb''' or '''#''') *[[Cookbook:Ounce|ounce]] (also '''oz''') ===Length=== ==== Metric ==== *[[Cookbook:mm|mm]] (also '''millimeter''' or '''millimetre''') *[[Cookbook:Centimetre (cm)|cm]] (also '''centimeter''' or '''centimetre''') *[[Cookbook:Metre (m)|m]] (also '''meter''' or '''metre''') ==== Imperial and US customary ==== *[[Cookbook:Inch|inch]] (also '''in''' or '''"''') *yard ===Temperature=== See the [[Cookbook:Oven temperatures|oven temperature]] table. ==== Metric ==== * [[Cookbook:Celsius|°C]] (also '''degree Celsius''') ==== Imperial and US customary ==== * °F (also '''degree Fahrenheit''') ==== Other ==== * Gas mark (informal temperature measurement on gas cookers) == Metric Units == Metric units are made up of a ''base unit'' and a scale ''modifier''. Each type of measurement has its own base unit. The modifiers are shared between all units. The relevant base units for cooking are: * Mass: gram (g) * Length: meter (m) * Volume: cubic meter (m<sup>3</sup>) Commonly used prefix modifiers are: * 1/1000 milli (m) * 1/100 centi (c) * 1/10 deci (d) * 100 hecto (h) * 1000 kilo (k) In cooking the old unit Liter (l) is commonly used to measure volume. One liter is (exactly) equal to 0.001 cubic meters, or 1 cubic ''deci''meter, written like: 1 l = 1 dm<sup>3</sup>. The prefix modifiers can be used with any unit and thus 1 cl (centiliter) is equal to 1/100 of a liter. The unit for volume is ''derived'' from the unit for length. Two lengths forms an ''area'', which is length x length and has the derived unit square meter (m<sup>2</sup>). Three lengths forms the volume metric m<sup>3</sup>. This has the consequence that a m<sup>3</sup> is equal to 1000 dm<sup>3</sup>, that is 10<sup>3</sup> = 10x10x10. Examples relevant for cooking: * 1 l = 10 dl = 100 cl = 1000 ml = 1 dm<sup>3</sup> = 0.264 US gallons * 1 kg = 10 hg = 1000 g = 2.2 pounds * 1 cm = 0.39 inches Some recipes in Wikibooks Cookbook use American measurement units (''pounds and ounces, Fahrenheit, fluid ounces and pints, etc.'') and some recipes use metric units (''grammes and kilograms, Celsius, milliliter, etc.''). An attempt to ensure that all Cookbook recipes use metric units (alone or alongside American units) is an ongoing job. A list of recipes which have been confirmed as having metric units can be found [http://en.wikibooks.org/wiki/Category:Recipes_with_metric_units here]. ==Avoirdupois Conversion Reference== ===Volume=== ; American (US) units: * 1 T = 3 t = 1/2 fl oz * 2 T = 1 fl oz * 1 cup = 16 T = 8 fl oz * 1 pint = 2 cups = 16 fl oz * 1 qt = 2 pints * 1 gal = 4 qt ===Mass=== *1 lb = 16 oz ===Mass/Volume conversions=== Approximate conversions based on water density. These conversions are useful for more than just water. Although other things have different densities, they are good enough for most estimates. *1 fl oz = 1 oz *1 pint = 1 lb *2 cups = 1 lb Water has a density of exactly 1 g/cm³ *1 ml = 1 g *1 L = 1 kg An American stick of butter is 1/4 lb, and is divided into 8 tablespoons. So, 1 tbsp butter = 1/2 oz butter. ==Kitchen measures around the world== [[Image:Swedish Measuring Spoon Set.jpeg|thumb|192px|right|Swedish measuring spoons]] === '''Nigeria''' === Empty tins of saturated milk are commonly used in Nigeria as a dry measure for foodstuff such as rice, beans and flour. This might cause some confusion when examining recipes from this region. Usually, the recipe will specify "two milk cups of beans" or "two milk tins of rice." Guidelines to convert these figures into more familiar ones are widely available online. ===Sweden=== Sweden uses the following standard set of volume measures in recipes. (In the picture, from left to right, deciliter, tablespoon, teaspoon and milliliter.) All are metric, with the tablespoon defined as exactly 15 ml and the teaspoon as exactly 5 ml. * deciliter (dl) = 100 ml * tablespoon (''"matsked"'', msk) = 15 ml * teaspoon (''"tesked"'', tsk) = 5 ml * milliliter (''"kryddmått"'', krm) = 1 ml === Finland === Finland uses the following abbreviations. * tablespoon (''"ruokalusikka"'', rkl) = 15 ml * teaspoon (''"teelusikka"'', tl) = 5 ml ==See also== * [http://www.seriouseats.com/2015/03/how-to-measure-wet-dry-ingredients-for-baking-accurately-best-method.html The Best and Most Accurate Way to Measure Wet and Dry Ingredients for Baking]: spooned flour is less dense (weights less) than scooped flour. [[Category:Cookbook]] [[es:Artes culinarias/Pesos y medidas]] [[fr:Livre de cuisine/Techniques/Poids et mesures]] 1tuh82hcm1k46ikjmpz93olqx14j28n Talk:C programming/Variables 1 32078 4671992 4652601 2026-09-23T18:38:40Z Schweikhardt 1008853 Image has wrong order of segments 4671992 wikitext text/x-wiki {{User:MiszaBot/config |archive = Talk:C Programming/Variables/Archive %(counter)d |algo = old(360d) |counter = 1 |maxarchivesize = 150K |archiveheader = {{Archive}} |minthreadstoarchive = 1 |minthreadsleft = 3 }} {{Talk header}} == C level one doubt == main() { int a=5,b=2; printf("%d", a+++b); } what will be the output?? {{unsigned|115.241.34.90}} :You could just try it. It outputs 7. I guess the question is whether <code>a+++b</code> is interpreted as <code>a++ +b</code> (it is), or as <code>a+ ++b</code>. This sort of question never occurs to me because I make effective use of whitespace when I write code. Ambiguous code is hard to maintain, and is therefore bad code. --[[User:Jomegat|Jomegat]] ([[User talk:Jomegat|discuss]] • [[Special:Contributions/Jomegat|contribs]]) 15:36, 22 September 2011 (UTC) == Contents/In this section == At the end of the page there is a section about '''Contents''' and '''In this section''' These do not appear correct as they mention arrays, which are not discussed there. [[User:MadCowpoke|MadCowpoke]] ([[User talk:MadCowpoke|discuss]] • [[Special:Contributions/MadCowpoke|contribs]]) 05:52, 21 May 2012 (UTC) == missing int8_t, uint16_t, etc. == Hi! I find it more and more important to think about different processor architectures (16 bit, 32 bit, 64 bit...). In general it's a good idea to determine how "big" your integer variables need to be. Therefore I think it might be good to mention these specific integer data types.<br> Further more, it should be shown that integer variables can be split bitwise. Example: * uint16_t nibble1:4, nibble2:4, nibble3:4, nibble4:4; * uint8_t bit0:1, bit1:1, threebits:3; What do you think about this? Maybe it's not that important for a beginner's guide... I don't know... --[[User:Lexikorn|Lexikorn]] ([[User talk:Lexikorn|discuss]] • [[Special:Contributions/Lexikorn|contribs]]) 07:22, 8 January 2023 (UTC) :{{re|Lexikorn}} The C ISO standards declare the <code>uint''N''_t</code> types ''optional''. I think this chapter is really too early to address such details. ‑‑&nbsp;[[User:Kai Burghardt|Kai Burghardt]] ([[User talk:Kai Burghardt|discuss]] • [[Special:Contributions/Kai Burghardt|contribs]]) 17:44, 10 January 2023 (UTC) == Image has wrong order of segments Usually the sequence for ELF is text, (=initialized) data, bss (=uninitialized data, but often cleared with zeros), heap, stack. 6wuq3bnha8ggd6pl8xfht7v9skgndrj 4671993 4671992 2026-09-23T18:38:57Z Schweikhardt 1008853 4671993 wikitext text/x-wiki {{User:MiszaBot/config |archive = Talk:C Programming/Variables/Archive %(counter)d |algo = old(360d) |counter = 1 |maxarchivesize = 150K |archiveheader = {{Archive}} |minthreadstoarchive = 1 |minthreadsleft = 3 }} {{Talk header}} == C level one doubt == main() { int a=5,b=2; printf("%d", a+++b); } what will be the output?? {{unsigned|115.241.34.90}} :You could just try it. It outputs 7. I guess the question is whether <code>a+++b</code> is interpreted as <code>a++ +b</code> (it is), or as <code>a+ ++b</code>. This sort of question never occurs to me because I make effective use of whitespace when I write code. Ambiguous code is hard to maintain, and is therefore bad code. --[[User:Jomegat|Jomegat]] ([[User talk:Jomegat|discuss]] • [[Special:Contributions/Jomegat|contribs]]) 15:36, 22 September 2011 (UTC) == Contents/In this section == At the end of the page there is a section about '''Contents''' and '''In this section''' These do not appear correct as they mention arrays, which are not discussed there. [[User:MadCowpoke|MadCowpoke]] ([[User talk:MadCowpoke|discuss]] • [[Special:Contributions/MadCowpoke|contribs]]) 05:52, 21 May 2012 (UTC) == missing int8_t, uint16_t, etc. == Hi! I find it more and more important to think about different processor architectures (16 bit, 32 bit, 64 bit...). In general it's a good idea to determine how "big" your integer variables need to be. Therefore I think it might be good to mention these specific integer data types.<br> Further more, it should be shown that integer variables can be split bitwise. Example: * uint16_t nibble1:4, nibble2:4, nibble3:4, nibble4:4; * uint8_t bit0:1, bit1:1, threebits:3; What do you think about this? Maybe it's not that important for a beginner's guide... I don't know... --[[User:Lexikorn|Lexikorn]] ([[User talk:Lexikorn|discuss]] • [[Special:Contributions/Lexikorn|contribs]]) 07:22, 8 January 2023 (UTC) :{{re|Lexikorn}} The C ISO standards declare the <code>uint''N''_t</code> types ''optional''. I think this chapter is really too early to address such details. ‑‑&nbsp;[[User:Kai Burghardt|Kai Burghardt]] ([[User talk:Kai Burghardt|discuss]] • [[Special:Contributions/Kai Burghardt|contribs]]) 17:44, 10 January 2023 (UTC) == Image has wrong order of segments == Usually the sequence for ELF is text, (=initialized) data, bss (=uninitialized data, but often cleared with zeros), heap, stack. slef7xcq7taw4293d2wa7jz1ahwyarv 4671994 4671993 2026-09-23T18:39:18Z Schweikhardt 1008853 4671994 wikitext text/x-wiki {{User:MiszaBot/config |archive = Talk:C Programming/Variables/Archive %(counter)d |algo = old(360d) |counter = 1 |maxarchivesize = 150K |archiveheader = {{Archive}} |minthreadstoarchive = 1 |minthreadsleft = 3 }} {{Talk header}} == C level one doubt == main() { int a=5,b=2; printf("%d", a+++b); } what will be the output?? {{unsigned|115.241.34.90}} :You could just try it. It outputs 7. I guess the question is whether <code>a+++b</code> is interpreted as <code>a++ +b</code> (it is), or as <code>a+ ++b</code>. This sort of question never occurs to me because I make effective use of whitespace when I write code. Ambiguous code is hard to maintain, and is therefore bad code. --[[User:Jomegat|Jomegat]] ([[User talk:Jomegat|discuss]] • [[Special:Contributions/Jomegat|contribs]]) 15:36, 22 September 2011 (UTC) == Contents/In this section == At the end of the page there is a section about '''Contents''' and '''In this section''' These do not appear correct as they mention arrays, which are not discussed there. [[User:MadCowpoke|MadCowpoke]] ([[User talk:MadCowpoke|discuss]] • [[Special:Contributions/MadCowpoke|contribs]]) 05:52, 21 May 2012 (UTC) == missing int8_t, uint16_t, etc. == Hi! I find it more and more important to think about different processor architectures (16 bit, 32 bit, 64 bit...). In general it's a good idea to determine how "big" your integer variables need to be. Therefore I think it might be good to mention these specific integer data types.<br> Further more, it should be shown that integer variables can be split bitwise. Example: * uint16_t nibble1:4, nibble2:4, nibble3:4, nibble4:4; * uint8_t bit0:1, bit1:1, threebits:3; What do you think about this? Maybe it's not that important for a beginner's guide... I don't know... --[[User:Lexikorn|Lexikorn]] ([[User talk:Lexikorn|discuss]] • [[Special:Contributions/Lexikorn|contribs]]) 07:22, 8 January 2023 (UTC) :{{re|Lexikorn}} The C ISO standards declare the <code>uint''N''_t</code> types ''optional''. I think this chapter is really too early to address such details. ‑‑&nbsp;[[User:Kai Burghardt|Kai Burghardt]] ([[User talk:Kai Burghardt|discuss]] • [[Special:Contributions/Kai Burghardt|contribs]]) 17:44, 10 January 2023 (UTC) == Image has wrong order of segments == Usually the sequence for ELF is text, (=initialized) data, bss (=uninitialized data, but often cleared with zeros), heap, stack. --[[User:Schweikhardt|Schweikhardt]] ([[User talk:Schweikhardt|discuss]] • [[Special:Contributions/Schweikhardt|contribs]]) 18:39, 23 September 2026 (UTC) agoyanz6t0vy8nxibbmqshm0ohwwf7z Diagnostic Radiology/Musculoskeletal Imaging/Trauma/Segond fracture 0 39587 4672079 3247087 2026-09-24T08:52:57Z R. Henrik Nilsson 3395618 experiements > experiments 4672079 wikitext text/x-wiki Avulsion fracture of the lateral tibial plateau immediately distal to the articular surface. Originally described by Dr. Paul Segond in 1879 after a series of cadaver experiments, the Segond fracture occurs in association with ACL tears (75-100%) and medial meniscal injury (66-75%), as well as injury to the posteriolateral knee structures. Originally thought to be a result of avulsion of the medial third of the lateral collateral ligament, more recent research suggests that the insertion of the iliotibial tract (ITT) and the anterior oblique band (AOB), a ligamentous attachment of the fibular collateral ligament to the midportion of the lateral tibia, also play an important role. A rare, mirror image of the Segond fracture has also been described. The so-called "reverse Segond" fracture is comprised of avulsion fracture of the tibial component of the medial collateral ligament in association with posterior cruciate ligamentous injury and medial meniscal tears. ==Mechanism== Segond fracture is typically the result of abnormal varus stress and internal rotation. Reverse Segond fracture, as its name suggests, is caused by abnormal valgus stress and external rotation. ==Clinical Significance== Because of the high rate of associated ligamentous and meniscal injury, the presence of a Segond or reverse Segond fracture requires these other pathologies must be specifically ruled out. ==Radiologic Findings== Segond and reverse Segond fractures are characterized by a small avulsion fragment of characteristic size that is best seen on plain radiography in the AP plane. Nonetheless, the avulsion fragment may be very difficult to see, and the only direct imaging evidence of this pathology may be by MRI. MRI findings include improved visualization of the fracture fragment on T1W images and marrow edema of the underlying tibial plateau on fat saturated T2W and STIR images, as well as the associated findings of meniscoligamentous injury. ==References== *[http://uwmsk.org/moodle/mod/resource/view.php?id=40 Segond Fracture] by Brandt Mohr, M.D., University of Washington Department of Radiology. *Segond P. Recherches cliniques et expérimentales sur les épanchements sanguins du genou par entorse. Progres Med 1879; 7:297-299, 319–321, 340–341. *Escobedo EM, Mills WJ, Hunter JC. Reverse Segond Fracture. [http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids= AJR 2002; 178:979-983]. *Campos JC, Chung CB, Letrakul N, Pedowitz R, Trudell D, Yu J, Resnick D. Pathogenesis of the Segond fracture: anatomic and MR imaging evidence of the an iliotibial tract or anterior oblique band avulsion. [http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=11323461 Radiology 2001; 219:318-386]. {{BookCat}} 4qptxj6seiu965ebwgtk1lcw8kg0vgk Chinese Tractor Maintenance/General Maintenance 0 60190 4672072 4091983 2026-09-24T08:39:49Z R. Henrik Nilsson 3395618 fuild > fluid 4672072 wikitext text/x-wiki This page contains general maintanence information applicable to most tractor models. This page is part of the Chinese Tractor Maintenance book. Go to the [[Chinese Tractor Maintenance]] book. == Fluids== This section is a summary of the recommendations of Chinese tractor owners for changing fluids in their tractors. The fluids of concern here are cooling, hydraulic fluid, engine oil and gear oil. Recommendations for fluids to change and the fluids to use when you first get your tractor are given. General procedures for changing fluids are described that are applicable to most tractors. Procedures for specific tractor models can be found in sections for the tractor model. === Changing Fluids After Delivery === Tractors are delivered in two likely conditions: * Crate * Assembled If your tractor arrives disassembled in a crate (a crate tractor) then it is highly recommended that you change all of your fluids before running the tractor. Although fluids shipped with crate tractors are improving, there is a long history of these fluids being of substandard quality and causing mechanical problems long before the factory recommended first fluid change. Another issue with the Chinese tractors is the metal shavings, chips, flakes, dust and dropped parts that the manufacturing process leaves in the fluid pathways that have not been cleaned out. By removing the original fluids, flushing, replacing filters and replacing the fluids you will remove most of the offending material. This will reduce clogging, premature wear and breakdown of your tractor. If you are buying/have bought an assembled tractor from a dealer, ask the dealer if the fluids have been changed. If the dealer has changed the fluids you may want to ask some details about how it was done. If no flushing was done during the fluid change then you may still want to do your own fluid change. Regardless of whether you change the fluids when you first receive your tractor you should replace them after you have run the tractor for a few hours (5–10 hours). During the first few hours of operation many mill marks on mating metal surfaces of moving parts will wear off and be suspended in the working fluid, caught in a filter or settled on the bottom of a pan. Any metal fragments that remain suspended in the fluid will cause additional wear on the tractor's working parts. These metal flakes should be removed after a few hours by flushing and replacing the fluids to prevent unneeded wear. === General Fluid Change/Flushing Procedure === This section contains general instructions for flushing out the fluids the first time you change the fluids in your tractor. Subsequent fluid replacement should not require flushing unless you detect excessive metal particles in the drained fluid. Kerosene can be used as the flushing agent. It has sufficient lubrication that it can be used for a short time for running in your tractor for the engine oil, hydraulic oil and gear oil. It is thin enough to work as a solvent to break loose metal particles in pans and on the walls of fluid passageways. Kerosene can be reused if it is filtered between uses. About 10 gallons will be sufficient for most Subcompact and Compact Chinese tractors if it is reused. It can be run through an oil filter for filtering. Since gear oil is the heaviest oil in your tractor, if you are reusing the kerosene for flushing all of the oil based fluids, perform the gear oil flush last. ==== Engine Oil The main function of engine oil is to keep the engine cool and maintain its temperature in cold weather too and to dissolve the dirt particle in it and set them down.The additive in engine oil work as a detergent and mix the dirt particles in it and keep away from the engine from friction.The good engine oil will always in its natural colour that is golden.The best engine oil does not contains any colour additives,it will be in pure golden colour. The shell rimula and helix are the best engine oil of the world. ==== Injector Pump Fluid Change ==== (TBS) ==== Hydraulic Fluid Change/Flush ==== (Intro TBS) The following is the procedure for replacing the hydraulic fluid: * Drain the hydraulic fluid: ** Start tractor. ** Allow the engine to run a few minutes to warm up the hydraulic fluid and pump. ** Cycle the 3 Point Hitch (3PH) a few times. Leave the 3 Point Hitch fully raised. ** If you have a Front End Loader (FEL) cycle the lift and bucket on the Front End Loader a few times. Leave in the up position. ** Turn off engine. ** Place bucket under hydraulic fluid reservoir drain. ** Open drain on hydraulic fluid reservoir. ** Lower the 3PH. ** Lower the FEL. ** At this point for tractor owners with a single pump for both Hydraulics and power steering the following is done: *** Follow the procedure in [[#Power Steering Fluid Change/Flush]] ** Close the reservoir drain. ** If there is fluid remaining in the reservoir then you can remove it with a suction device like a turkey baster. ** Locate the hydraulic fluid screen if you have one. Clean the screen and put it back in. If you have a hydraulic fluid filter then leave it in place for now. * If you which to flush the hydraulic system (see [[#Changing Fluids After Delivery]]) then do the following: ** Fill the hydraulic reservior with kerosene. ** Follow the procedures to drain the hydraulic fluid. * If you have a hydraulic fluid filter then replace it. * Fill the hydraulic fluid reservoir. * Start the engine and cycle the 3PH and/or FEL. * If the hydraulics do not work then follow the procedure here [[Chinese Tractor Maintenance/Trouble Shooting#Replacing/Flushing Hydraulic Fluid Caused 3 Point Hitch/FEL/Power Steering To Quit Working]] ==== Power Steering Fluid Change/Flush ==== * Drain Power Steering: ** Raise front end of tractor (allows wheels to be turned). ** Remove the hydraulic hoses from steering cylinder. ** Turn steering wheel left and right. ** Reattach hydraulic hoses to power steering cylinder. ** Lower front end of tractor. ==== Gear Oil Change/Flush ==== The oil used in the transmission and rear axle is normally the same as in is used in the 4x4 front axle. Also use the same procedure for flushing. ===== Transmission/Rear Axle Fluid Change Flush ===== * Drain out the old gear oil. See the section for your specific tractor for the location of the drain plugs. * Fill the transmission and axle to the normal level with kerosene. * Start up the engine (you didn't drain the engine oil and forget to put it back in did you?) and drive the tractor. Use both forward and reverse gears so that the faces of the gears get flushed. This should only require a few minutes. * Stop the tractor and park on a level surface. * Drain the kerosene from the transmission and axle. * Refill the transmission and axle with your choice of gear oil. ** Fill until the dip stick shows full or oil drips out of the unscrewed weep hole in the housing (whichever is applicable). ** Since gear oil can be thick it can take time for it to level out throughout its housing. When you think you have it full wait for 10 minutes and then check again. It may require several iterations of filling and waiting to completely fill the gear case. ===== 4x4 Front Axle Fluid Change Flush ===== Do the front axle flush at the same time as the transmission if you have sufficient kerosene. Follow the same procedure as with the transmission. ==== Fuel ==== Another "fluid" to change is the fuel. Just to be on the safe side it is a good idea to drain the fuel from the fuel system. You don't know how long the fuel has been in the tank or what its quality is. Replacing the fuel might prevent you from having to clean/replace your fuel injectors. * Drain fuel tank. * Drain sediment bowl. * Replace the fuel filter. * Fill fuel tank. If there seems to be significant sediment or "chunks" in your drained fuel you may have algae in your tank. When you put new fuel in the tank obtain some biocide and add the recommended amount. === Replacement Fluids === There are a great variety of brands and types of fluids that can be successfully used in your Chinese tractor. Many of the fluids have been found by owners at Walmart and Napa. ==== Engine Oil ==== (Intro TBS) In cold weather climates a lighter weight engine oil should be used to aid in cold cranking and to reduce the work load on the engine. Engine oils used successfully by Chinese tractor owners include: * Shell Rotella or Delo 400 15W/40 * shell Rimula 20w/40 is a multigrade oil and best for tractors ==== Injector Pump Fluid ==== Use non-detergent oil. Use a weight appropriate for your air temperature. 30wt is a good all-around choice. ==== Hydraulinc Fluid / Power Steering ==== In cold weather climates a lighter weight fluid should be used to aid increase the operating speed of the equipment. Hydraulic fluid that has been successfully used by Chinese tractor owners include: * AW32 (for cold country). (will speed up operation). * Walmart Super Tech Transmission/Hydraulic oil (not all Walmart stores have it). ==== Coolant ==== (TBS) ==== Gear Oil ==== Gear oil is used in the tractor transmission/rear axle and if the tractor has 4 wheel drive it us used in the front axle. Since Chinese tractors use "yellow metal" for some parts the gear oil must be yellow metal safe. Yellow metal is copper, brass, bronze etc. The gear oil that you buy should say on the label that it is "yellow metal safe". Gear oil that does not say that it is "yellow metal safe" may have added agents to aid in its performance in high heat and/or high pressure environments. These additives will cause oxidation of the yellow metal. The oxidation will cause pits in the surface of the metal and eventually the part will fail. One sign that your yellow metal has oxidized is a black color on the surface. Gear oil should show that it is low/anti foaming on the label. Gear oils that have been successfully used by Chinese tractor owners include: * Rotella GL-4 - walmart * GL-5 80W/90 * Super Tech 85W/140 * Kubota Super UDT (true synthetic for winter). ==== Fuel ==== Diesel fuel obtained from your local filling station as well as truck stops can be used in your tractor. == Cooling System == === Radiator Fin Cleaning === The radiator fins, over time, accumulate dust and debri between the fins reducing the cooling efficiency of the radiator. This causes the engine to run hotter. When dust and/or debri builds up between the fins the fins must be cleaned. One method of cleaning is to use compressed air. * Remove the radiator screen * Blow the compressed air into the BACK of the radiator so that the debri goes back out the front of the radiator. Trying to blow air into the front of the raditor may cause debri to become lodged tighter into the radiator fins. * Replace the radiator screen. High pressure water is NOT recommended for cleaning the radiator. This can easily damage the radiator fins. To reduce the amount of debri entering the radiator the radiator screen can be replaced by a filter or augmented. See [[Chinese Tractor Maintenance/Modified Cooling System#Radiator Screen]] {{BookCat}} f6j3pf2854myk1i5dax19e558noeyk5 Proteomics/Protein Sample Preparation/Protein Handling and Storage 0 72729 4672065 4094179 2026-09-24T08:31:48Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672065 wikitext text/x-wiki {{Simple Page Navigation| BookName=[[Proteomics/Protein Sample Preparation|Protein Sample Preparation]]| CurrentPage=Protein Handling and Storage| PrevPage=[[Proteomics/Protein Sample Preparation| Introduction]]| NextPage=[[Proteomics/Protein Sample Preparation/Contaminant Elimination|Contaminant Elimination]]}} __FORCETOC__ <!-- #[[Proteomics/Protein Sample Preparation|Introduction]] #[[Proteomics/Protein Sample Preparation/Protein Handling and Storage|Protein Handling and Storage]] #[[Proteomics/Protein Sample Preparation/Contaminant Elimination|Contaminant Elimination]] #[[Proteomics/Protein Sample Preparation/Sample Preparation for Chromatography|Sample Preparation for Chromatography]] #[[Proteomics/Protein Sample Preparation/Sample Preparation for Electrophoresis|Sample Preparation for Electrophoresis]] #[[Proteomics/Protein Sample Preparation/Sample Preparation for Mass Spectrometry|Sample Preparation for Mass Spectrometry]] #[[Proteomics/Protein Sample Preparation/References|References]] --> ==Protein Handling and Storage== <p>Over time, changes will take place in protein structure that could potentially alter experimental results. There are also many problems that can arise from improper handling of proteins. Contaminants in samples can cause results to be skewed, and may even damage equipment. However, there are many steps that can be taken in the protein handling and storage processes that help to minimize any damage and in turn, maximize accuracy of results.</p> <br> ====Sterile Work Environment==== <p>Whenever handling protein samples, it is very important to wear gloves. Often times gloves are used to protect us when handling harmful substances, but the gloves are also used to shelter the sample from any foreign proteins or chemicals found on our hands. Contamination could not only lead to unexpected results but could potentially damage our sample. For this same reason it is also very important to always use sterile containers, pipette tips, etc.</p> <br> ====Flash Freezing==== </p>At some point it may be desirable to store a protein for use months down the road; most often, this is achieved by freezing. By storing proteins at temperatures as low as -20 degrees Celsius, the structural components of the molecule can be preserved until its use, assuring functionality. However, if the freezing process is not carried out correctly, the protein can actually be subjected to drastic changes in pH as well as in salt concentration. To avoid these environmental changes over time, the sample can be "flash frozen" by dipping the tube containing protein sample in a mixture of dry ice, ethanol and acetone. After being frozen, the sample can then be rapidly thawed in a beaker of water.</p> <br> ====Protein Loss==== <p>While performing any proteomics experiment care must be aware of potential for loss of proteins or peptides due to chemical properties of those proteins in a sample. For example, it is not uncommon for hydrophobic proteins to stick to the walls of test tubes or chromatography columns in solution. If a protein of interest is known to be hydrophobic, the glass ware to be used can be <b>silanized</b> or salanized glassware can be purchased to prevent loss of the protein. </p> <br> ====Working with Small Samples==== <p>Micro-biopsies, laser capture micro-dissection, and stem cell therapy only provide small, non-conventional sample sizes, and in order to take advantage of these small samples, a less wasteful sample preparation is needed. Trifluoroethanol provides a viable alternative to accomplish this.</p> <br> ====Hydrostatic Pressure Cycling Technology==== [[Image:Pct-lipids-fullsize.png | thumb | right | 450px | PCT dissociates lipids, protein remains intact; protein is released from lipid tissue. ]] <p>Pressure cycling technology (PCT) alternates pressure in a reaction vessel. For example, a sample is placed in an air-tight vessel and next the pressure in the vessel is alternated between very high pressure and room pressure. When pressure drops from very high down to room levels, compressible molecules (such as lipids) tend to dissociate. One example of useful dissociation is that of bilayer lipid membranes, which results in the release of proteins and other metabolites from the bilipid layer.</p> <p>PCT-assisted liquid-liquid extraction {{ref|Gross}} leverages PCT to fraction a sample into different classes, using class-specific immiscible solvents within the same reaction vessel. The initial solvents are combined with the raw sample, then the pressure is raised. As the pressure peaks, the solvents mix, forming a temporary solvent, and the sample dissolves in this new temporary solvent. The pressure is lowered, and the temporary solvent separates back into the initial solvents, fractioning the dissolved sample in the process (the different classes of sample molecules being more soluble in a particular initial solvent) . At room pressure, each class of sample molecules are found isolated within each of the initial, immiscible solvents.</p> <br> ==Articles Summarized== ===Development and Evaluation of a Micro- and Nano-Scale Proteomic Sample Preparation Method=== [http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1781925&tool=pmcentrez Haixing Wang,Wei-Jun Qian,Heather M. Mottaz,Therese R.W. Clauss,David J.Anderson,Ronald J.Moore,David G.Camp,Maria Pallavicini,Desmond J.Smith and Richard D.Smith'' J Proteome Res.'' '''4(6):'''2397–2403 (2005)] '''Main Focus''' Using an organic co-solvent (TFE) instead of traditional detergents minimizes sample loss. [[Image:2,2,2-trifluoroethanol.svg | thumb | right | 200px | Structure of Trifluoroethanol. ]] [[Image:2,2,2-trifluoroethanol-3D-vdW.png | thumb | right | 250px | 3D Conformation of Trifluoroethanol. ]] '''Summary''' Micro-biopsies, laser capture micro-dissection, and stem cell therapy only provide small, non-conventional sample sizes, and in order to take advantage of these small samples, a less wasteful sample preparation is needed. Typical protocols for proteomic sample processing usually involve a strong denaturant such as urea or guanidine hydrochloride combined with different types of detergents. These methods are rapid, however, the detergents or salts need to be entirely removed from the sample before the LC-MS analysis. If they are not properly removed, the level of detection sensitivity may not be enough for the peptides. These procedures show their weaknesses when working with sample sizes less than a microgram, because some of the sample is inevitably left behind when removing the detergents. To get around the issues involved with using detergents, a different sample preparation technique using only a single tube was used. The technique used trifluoroethanol (TFE), in a hypotonic aqueous buffer as a replacement for the detergents. TFE is better because it improves protein solubility and denaturation, and it readily evaporates, so there’s no need to remove the TFE when no longer needed. So using TFE in the place of detergents removes the cleanup step, eliminating the waste involved with removing the detergent. An experiment was conducted to test this hypothesis using two different mouse brain tissue samples. One was disrupted in a buffer of denaturants and CHAPS, and the other one in a hypotonic buffer containing 50% TFE. The chromatogram figures of the two samples indicated that the presence of detergent in the first sample has suppressed the signals of peptides that are co-eluted with the detergent. A larger number of proteins were identified using the TFE protocol rather than CHAPS protocol. Also, TFE proved to be more efficient than the traditional detergent based protocol even with processed MCF cells, with a larger number of proteins identified than when using traditional methods. The TFE based protocol proved to be more efficient in micro and nano scale sample processing than traditional methods. The main advantage in using the TFE based protocol is that extra cleanup steps are eliminated and the whole process is carried out in a single tube, hence there is no manhandling and no loss of sample. Other advantages of TFE are that it improves protein solubilization, increases protein denaturation, and finally it can be removed by tryptic digestion without performing any extra clean up step. The TFE based protocol also provides better sample recovery and better reproducibility. '''New Terms''' ;Organic Solvent: A chemical compound (usually liquid) containing carbon to dissolve another substance (the solute). ( http://www.knowledgebank.irri.org/glossary/Glossary/O.htm ) ;Trifluoroethanol: The organic compound with the formula CF<sub>3</sub>CH<sub>2</sub>OH. Also known as TFE or trifluoroethyl alcohol, this colourless, water-miscible liquid has a smell reminiscent of ethanol. ( http://en.wikipedia.org/wiki/Trifluoroethanol ) ;Liquid Chromatography: A separation method based on the distribution of sample compounds between a stationary phase and a liquid mobile phase. ( http://www.nhml.com/resources_NHML_Definitions.cfm ) ;Solid Phase Extraction: A separation process that is used to remove certain compounds from a mixture of impurities based on their physical and chemical properties. ( http://en.wikipedia.org/wiki/Solid_phase_extraction ) ;Zwitterion: A chemical compound that carries a total net charge of 0, thus electrically neutral but carries formal positive and negative charges on different atoms. ( http://en.wikipedia.org/wiki/Zwitterionic ) ;Voxellation: High-throughput acquisition of multiple volumetric images of brain gene expression. ( http://labs.pharmacology.ucla.edu/smithlab/publications_files/pdf/Singh_JNM_2003.pdf ) '''Course Relevance''' Sample preparation efficiency can be a large problem when trying to detect different proteins in a proteome, because if a proteome only has a tiny amount of a certain protein to begin with, then any loss of the sample during preparation may mean the loss of some or all of that protein. Therefore, learning a variety of different sample preparation methods, preferably the most efficient methods, is useful to students hoping to work with and prepare proteomic samples. ===Tissue Fractionation by Hydrostatic Pressure Cycling Technology: The Unified Sample Preparation Technique for Systems Biology Studies=== [http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=19137106 Gross V, Carlson G, Kwan AT, Smejkal G, Freeman E, Ivanov AR, Lazarev A. ''Journal of Biomolecular Techniques'' '''19:'''189-199 (2008)] '''Main Focus''' The authors present a novel, detergent-free, concurrent sampling process for high yield extraction of multiple classes of biological molecules from the same sample, using pressure cycling technology (PCT) as the basis of the new process. A significant advantage of the new process is that the samples may either be used directly in another (compatible) process for further analysis (such as MS), or require very minimal cleanup before additional analysis. Relevance to systems biology studies is emphasized.{{ref|Gross}} [[Image:Pct-lipids-fullsize.png | thumb | right | 600px | PCT dissociates lipids, protein remains intact; protein is released from lipid tissue. ]] '''Summary''' Given the widening popularity of systems biology studies, it's become increasingly important to improve the consistency and quality of the samples under analysis. Many current high quality sampling techniques are geared toward a single type of analysis (DNA/RNA, or protein, or lipids). Concurrent sampling techniques are important, in particular with regard to systems biology studies, because of the way that information from several classes of molecules must be correlated during analysis. Concurrent techniques are also critical where small sample size is a constraining factor (for example, human biopsy tissue). The authors have developed a new concurrent sampling protocol that cleanly separates DNA, RNA, proteins, and lipids using detergent-free processes. The new protocol leverages pressure cycling technology (PCT), as well as a proprietary set of partitioning reagents that separate molecules by class. PCT destabilizes molecular interactions by quickly alternating pressure, from very high to low. High pressure mostly affects compressible molecules (lipids), which subsequently dissociate when the pressure is lowered. PCT does not impact covalent bonds, so DNA, RNA, and proteins remain intact while lipid bilayers are dismantled. PCT-assisted liquid-liquid extraction is another PCT-based technique that's used to partition a sample given a set of partitioning solvents. For example, two solvents are combined with the sample, the solvents being immiscible. Pressure is then increased, and the solvents begin to merge. When the pressure is high enough, the solvents mix and form a temporary tertiary solvent in which the sample dissolves. The pressure is then lowered, and the tertiary solvent separates back into the initial two solvents, particles of the original sample being partitioned into either of the two solvents. When the pressure is back to “normal”, the original sample has been cleanly partitioned into the separate solvent phases. In previous works, the authors have evolved the above PCT-based techniques, with some commercial success. The newly developed ProteoSolve-SB protocol builds upon this previous work such that the new protocol cleanly separates DNA, RNA, proteins, and lipids from a single sample. ProteoSolve-SB is compared to current protocols, including Thizol, AllPrep, and PARIS. Thizol shows good DNA recovery, but suffers from slow extraction and cleanup from the organic phase, as well as from possible protein modification. Thizol works well with relatively low sample concentrations (less than 10% of volume), whereas ProteoSolve-SB is compatible with sample concentrations up to 25% to 30% of the overall volume. Sample concentration is an important factor since subsequent precipitation procedures are more efficient with higher concentrations of the sample. AllPrep had RNA recovery volume similar to Thizol and ProteoSolve-SB, however it's a more expensive process and required multiple columns for the test procedure. AllPrep also suffers from the side-effect of potential protein loss: many proteins may not unbind from RNA, so they may not be recoverable. Also, the proteins that are recovered must be cleaned before SDS-PAGE; the cleaning process may incur additional protein loss. PARIS recovered less than half the RNA as compared to the other tested protocols, which was expected since only half the sample was used for the RNA analysis: the other half was used for protein analysis. In addition to low yields of RNA, the recovered proteins required additional cleanup (dialysis, filtration). ProteoSolve-SB has been shown to yield high recovery of DNA, RNA as well as a significant recovery of protein and an simplified recovery of lipids (fewer steps than other methods, less hands-on time). Sample homogenization via PCT yields more consistent samples, as opposed to sonication or grinding in liquid nitrogen. Once centrifuged, minimal cleanup is required for analysis: the proteins are ready to go after drying; lipids are ready to go for MALDI-TOF MS, and; DNA, RNA may be extracted from the solid phase using common, compatible extraction protocols. Future work will focus on scaling down the process further for applications such as needle biopsies, as well as for cell cultures derived from individual stem cells. '''New Terms''' ;Biopsy: The removal and examination of a sample of tissue from a living body for diagnostic purposes.{{ref|Biopsy}} ;Dialysis: Separation of substances in solution by means of their unequal diffusion through semipermeable membranes.{{ref|Dialysis}} ;Hydrostatic: Of or relating to fluids at rest or to the pressures they exert or transmit.{{ref|Hydrostatic}} ;Sonication: Disruption of cells or DNA molecules by high frequency sound waves. a.k.a. ultrasonication. {{ref|Sonication}} ;Systems biology: A field that seeks to study the relationships and interactions between various parts of a biological system (metabolic pathways, organelles, cells, and organisms) and to integrate this information to understand how biological systems function. {{ref|SystemsBiology}} '''Course Relevance''' This new process provides a low-loss rate for proteins in the original sample, as well as avoids detergents and other solvents that may change the protein before it can be analyzed further downstream. It's relevant to proteomics because it provides another method of extracting proteins from cell tissue in a manner that reduces the loss and/or the contamination of the proteins from the original sample. It's also a relevant process for samples that are unique or hard to obtain. ==Websites summarized== ===Cleanup of detergents=== ''Cleanup of protein detergents:'' A gas chromatographic method for quantification of detergents frequently used in membrane protein structural studies Gas Chromatography http://www.separationsnow.com/coi/cda/detail.cda?chId=3&id=20260&type=Feature&page=1/ (2009-01-26) '''Main Focus''' The traditional method of protein extraction involves use of detergents. Though they affect the stability of the proteins, they were used in the extraction for quite a long time until the advantages of organic solvents are known. '''Summary''' Structure of proteins are studied outside the functional environment in conditions different to normal conditions. The most conventional method is the use of detergents in the extraction, purification, concentration and crystallization of proteins. But the concentration of detergents have a strong impact on the stability of the proteins. The procedure of measuring the amount of detergent associated with the protein was illustrated by using four detergents decyl maltoside, dodecyl maltoside, dodecyl phosphocholine and lauryldimethylamine N-oxide. Separation of the detergents was carried out at a temperature gradient of 200-280C and low injection volumes of 1 microlitre. The retention times for all these four detergents were suitable for the separation and identification of detergent mixtures. Separations were carried out under the experimental conditions and the resultant calibration curves matched with the quadratic regression curves. Thus this is one of the most easy methods for the separation of detergent mixtures from the proteins. [[Image:CHCA cleavable detergent.png| thumb |280px|Example of a detergent]] '''New Terms''' ;Amphipathic: Molecule containing both polar and non polar portions. (http://www.biology-online.org/dictionary/Amphipathic) ;Quadratic regression: It is a process by which equation of a parabola of best fit is found for a set of data. (http://calculator.maconstate.edu/quad_regression/index.html) ;Centricon filtering: Centricon filtering devices provide fast efficient concentration and desalting of macromolecules by ultrafiltration.(http://www.millipore.com/userguides/tech1/p99259) ;Elution buffer: Elution buffer is used to was out any left over proteins from the previous experiment.(http://wiki.answers.com/Q/What_is_an_elution_buffer) ;Gas Chromatography: A process by which the components of a mixture are separated from one another by volatilizing the sample into a carrier gas stream and passing the gas through a column containing a substance that selectively retains (absorbs) and releases the volatile constituents. (http://www.biotechmedia.com/definitions-g.html) '''Course relevance''' Detergent based extraction is used for the extraction of proteins.The advanced method in this is extraction of proteins using organic solvents for which separation is not needed usually they are evaporated. ===Next Generation Pharmaceutical=== ''Pressure Cycling Technology (PCT): a Novel Sample Preparation Approach to Biomarker Discovery and Drug Development in Lipid-Rich Samples'' Pressure Biosciences http://www.ngpharma.com/article/Issue-9/Drug-Discovery/Pressure-Cycling-Technology-PCT-a-Novel-Sample---Preparation-Approach-to-Biomarker-Discovery-and-Drug-Development-in-Lipid-Rich-Samples/ (2009-03-24) '''Main Focus''' PCT will improve the rate of discovery for proteomics-based research by providing practitioners with a technology that safely and efficiently fractions biological samples into specific biological classes (proteins, lipids) that may, in some cases (especially for proteins), be fed directly into common downstream analysis processes. '''Summary''' Major diseases in the US continue to be targets of biological research: namely obesity, heart disease and diabetes.{{ref|Pressure}} The relationships between such diseases are complex as are the analyses of the biological mechanisms. Improved processes and technology are needed to battle these diseases, and of particular importance is more efficient drug discovery and drug development cycles. Such improvements will increasingly support complex research efforts, including the use biomarkers and proteomics to drive discovery forward. There are some important technological challenges to address in the proteomics space, including the need for processes which are increasingly sensitive to lower protein concentrations as well as in tissue proteomics, where proteins of interest are found primarily in lipids. Sample preparation techniques play a large role in the outcome of proteomics experiments, and many current preparation techniques have problems such as safety, contamination, long processing times and are not easily automated. Compounding the problem is that some techniques are only useful for specific sample types. As a consequence, experimental results are not easily, reliably reproduced. Proteins found in high lipid concentration tissue are critical to our understanding of important diseases. The use of detergents presents a challenge because not all the protein in a sample may be exposed, especially if the lipid concentration exceeds sixty percent and the sample is prepared in an aqueous solution. Furthermore, detergents are not always compatible with subsequence analysis procedures. There have also been cases where proteins of interest have been discarded with pellets as cell debris. These types of challenges can have negative impacts on the pace of research. [[Image:Pct-liquid-liquid.png | thumb | right | 400px | PCT-based liquid-liquid extraction breaks apart cells, separates molecules into solvent fractions; no detergents necessary. ]] Pressure cycling technology (PCT) addresses the aforementioned concerns. In a single step, using all organic (not detergent-based) solvents, lipids and proteins are dissociated and partitioned in a manner that is very safe for the researcher. PCT-based liquid-liquid extraction is leveraged to capture dissociated molecules in different solvent fractions. Samples are added to a combination of immiscible solvents. Next, PCT makes use of high pressure in the reaction vessel to break apart and mix samples with liquid solvents. Upon the release of the high pressure, sample molecules are fractioned in the initial liquid solvents. The reaction vessel in PCT (special reaction tubes) are designed to withstand high pressure, isolate the sample and solvents from contaminants as well as to provide safety to the researcher. PCT is especially good at releasing proteins from their captivity in lipid tissues. In a study between Pressure BioSciences and Harvard School of Public Health, the results of proteomic analysis of adipose tissue were deemed useful for the mechanistic studies of diabetes and obesity. In the results of the study, PCT is reported to have higher protein yields compared to more “traditional” techniques. PCT results were high yield and efficient to come by. PCT was also compatible with the downstream protein identification method (HPLC-ES/MS). PCT processes are also highly reproducible. Other applications may include those dealing with neurological conditions, such as Alzheimer's, Parkinson's, Multiple Sclerosis, hyperactivity, depression and/or schizophrenia. Neurological disorders make an interesting research target because myelin, which coats a major portion of neuron cells, has a protein/lipid ratio of about three to seven. Phospholipids, which tend to be membrane proteins, are important for neuron regulation – as such, phospholipids also make an interesting research target. '''New Terms''' ;Adipocyte: Animal connective tissue cell specialized for the synthesis and storage of fat. Such cells are bloated with globules of triglycerides.{{ref|Adipocyte}} ;Biomarker: A biochemical feature or facet that can be used to measure the progress of disease or the effects of treatment.{{ref|Biomarker}} ;Cavitation: The formation and instantaneous collapse of innumerable tiny voids or cavities within a liquid subjected to rapid and intense pressure changes. Cavitation produced by ultrasonic radiation is sometimes used to effect violent localized agitation. Cavitation caused by severe turbulent flow often leads to cavitation damage.{{ref|Cavitation}} ;Delipidation: The removal of lipids or lipid groups, often from a protein.{{ref|Delipidation}} ;Immiscible: Incapable of being mixed without separation phases. Water and petroleum oil are immiscible under most conditions, although they can be made miscible with the addition of an emulsifier.{{ref|Immiscible}} '''Course Relevance''' PCT is relevant to proteomics because it is the basis of an efficient, safe, automated, reproducible sample preparation technique, of particular importance with respect to protein extraction from lipid tissues. ==References== #{{note|Gross}}[http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=19137106 Gross V, Carlson G, Kwan AT, Smejkal G, Freeman E, Ivanov AR, Lazarev A. ''Journal of Biomolecular Techniques'' '''19:'''189-199 (2008)] #{{note|Pressure}}Pressure Biosciences http://www.ngpharma.com/article/Issue-9/Drug-Discovery/Pressure-Cycling-Technology-PCT-a-Novel-Sample---Preparation-Approach-to-Biomarker-Discovery-and-Drug-Development-in-Lipid-Rich-Samples/ (2009-03-24) #{{note|Down}}Steve Down #{{note|SystemsBiology}}''systems biology'' from http://publications.nigms.nih.gov/thenewgenetics/glossary.html#S #{{note|Sonication}}''sonication'' from http://www.fao.org/docrep/003/x3910e/X3910E22.htm #{{note|Dialysis}}''dialysis'' from http://wordnetweb.princeton.edu/perl/webwn?s=dialysis #{{note|Hydrostatic}}''hydrostatic'' from http://www.merriam-webster.com/dictionary/hydrostatic #{{note|Biopsy}}''biopsy'' from http://en.wiktionary.org/wiki/biopsy #{{note|Biomarker}}''biomarker'' from http://www.medicinenet.com/parkinsons_disease/glossary.htm #{{note|Cavitation}}''cavitation'' from http://www.hghouston.com/c.html #{{note|Adipocyte}}''adipocyte'' from http://www.bcerc.org/glossary.htm #{{note|Delipidation}}''delipidation'' from http://en.wiktionary.org/wiki/delipidation #{{note|Immiscible}}''immiscible'' from http://www.pneumatic-source.com/resources/glossary/i.shtml == Bibliography == Jörg von Hagen, VCH-Wiley 2008 Proteomics Sample Preparation. {{ISBN|978-3-527-31796-7}} {{BookCat}} bjsn8fx0a1be0ufm15ogtfikhq82tzd IB Biology/The Chemistry of Life 0 72805 4672066 4646926 2026-09-24T08:32:25Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672066 wikitext text/x-wiki ===Topic 3 The Chemistry of Life=== ====Chemical Elements and Water==== ---- ''' State that the most frequently occurring chemical elements in living things are carbon, hydrogen, oxygen, and nitrogen. ''' ''' State that a variety of other elements are needed by living organisms, including sulphur, calcium , phosphorus, iron and sodium. ''' ''' State one role for each of the elements mentioned above ''' :#Nitrogen: Required by proteins. (Remember, nitrogen is included in the amino acid structure) Essential to enzymes required for plant function. :#Calcium: The mineral that strengthens bone and teeth uses calcium. Also important in nerve synaptic transmission of nerve impulses and muscle contraction. Regulates the cell wall construction in plants. :#Phosphorus: Part of the phosphate groups in ATP and DNA molecules. In plants it is needed for cell reproduction and division. It is part of the cell membrane. :#Iron: found in the structure of hemoglobin and essential for the production of red blood cells. It is involved in the light energy transferring compounds involved in photosynthesis in plants. :#Sodium: Major ion associated with the propagation of a nerve impulse. Can replace potassium in some plants in membrane function. :#Sulfur: It is a component of amino acids. '''Outline the difference between an atom and an ion and a polypeptide''' :An atom is a single particle of a chemical element. When an atom either gains or loses an electron it then becomes an ion. Ions are charged, while atoms are uncharged. An Ion has either a negative or positive charge depending if it gained or lost an electron. On the other hand a polypepetide chain is a chain of amino acids joined through peptide bonds, the amino acids are molecules that are formed through the combination of ions. '''Outline the properties of water that are significant to living organisms, including transparency, cohesion, solvent properties and thermal properties. Refer to the polarity of water molecules and hydrogen bonding when relevant.''' :#Water is '''transparent''' which allows light to filter into aquatic environments, and thus aquatic plants can absorb light and perform photosynthesis. Since the ancestor of all plants originated in the ocean, the transparency of water has had an immeasurable influence on life as we know it. :#Water is also '''cohesive''', that is it binds to itself, due to the polarity of the water molecule. The positive, hydrogen side of the molecule binds to the negative, oxygen side of another water molecule. This bond is called a hydrogen bond. Water is also '''adhesive''', that is it binds to other things around it. This property allows for transport of water against gravity in plants. The water adheres to the xylem tube of plants and is able to be drawn up in long columns up the stem due to its strong cohesive force :#Water's solvent properties allows molecules to dissolve in it. This means that water can transport minerals up the xylem tube and sugars up the phloem tubes in plants. Blood in animals consists largely of water, allowing the transportation of oxygen, urea and glucose throughout the body. Water also is the site of metabolic reactions because reactions can occur between dissolved compounds. :#Water's polarity also inhibits movement of its molecules. Since all the molecules are connected, they cannot freely move about as other, non-polar molecules do. Heat, the kinetic energy of molecules, is thus restricted and so water has a high specific heat (it must absorb large amounts of energy in order to change states). This means that water can serve as a '''temperature insulator''', and does so in organisms of all kinds. :#Water's high latent heat of vaporization is due to strong hydrogen bonds existing between water molecules. A large amount of heat is released when water in the liquid state vaporizes into the gaseous state. '''Explain the significance to organisms of water as a coolant, transport medium and habitat in terms of its properties''' :#''''Coolant:''' Allows us to perform homeostasis. (We sweat to cool ourselves down). Additionally, water's high heat of vaporization allows water molecules to absorb large amounts of energy from the body before evaporating - thus, the sweating individual loses heat. :#'''Transport medium:''' Digestion, also important to help transport blood. Phloem in plants transport nutrients dissolved in water using the cohesive and adhesive properties. :#'''Habitat:''' Organisms need water; the ready availability of it is essential in the choosing of a habitat. Water's high heat capacity (the amount of energy needed to increase the temperature of 1gm of water by 1 degree Celsius) and high heat of vapourization (amount of energy absorbed by 1gm of liquid to be converted to the gaseous form) prevents from plants and animals from overheating and dying. ====Carbohydrates, Lipids, and Proteins.==== ---- '''Define organic''' :*Organic compounds are defined as compounds containing carbon that are found in living organisms. :*Compounds are considered inorganic when they contain carbon but are widely found in the environment (carbon dioxide and hydrogen). '''Draw the basic structure of a generalized amino acid''' <gallery> Image:Alpha-amino-acid-general-2D.png|<div style="text-align: center;">Generalized amino acid.</div> </gallery> '''Draw the ring structure of glucose and ribose''' <gallery> Image:Alpha-D-Glucose.svg|<div style="text-align: center;">Glucose.</div> Image:Beta-D-Ribofuranose.svg|<div style="text-align: center;">Ribose.</div> </gallery> '''Draw the structure of glycerol and a generalized fatty acid''' [http://www.public.iastate.edu/~cfford/101triacylglycerol.gif]click link for picture '''Outline the role of condensation and hydrolysis in the relationship between monosaccharides, disaccharides, and polysaccharides; fatty acids, glycerol and glycerides; amino acids, dipeptides, and polypeptides.''' :*In a condensation reaction, two molecules work together and form one big molecule along with water, because water is released during this reaction. So, two amino acids could join together and form a dipeptide and this would be a condensation reaction. Same applies for monosaccharides becoming disaccharides, you get the drift. :* Now in a hydrolysis reaction, water molecules are used up to make a large molecule into a small molecule. Think about it- "hydro" means water and "lysis" means splitting. So, water is used up to split a disaccharide into a monosaccharide. '''Draw the structure of a generalized dipeptide showing peptide linkage''' http://homepages.ius.edu/GKIRCHNE/peptide.jpg '''List three examples for each of monosaccharides, disaccharides, and polysaccharides''' :*'''Monosaccharide:''' Glucose, Fructose and ribose :*'''Disaccharide:''' Maltose (Glucose + Glucose) and Sucrose (Glucose + Fructose), and lactose. :*'''Polysaccharide:''' Starch (made of glucose subunits) and Glycogen (made of glucose subunits, but linked differently from starch). (Plants use mostly starch, humans use mostly glycogen) and cellulose. '''State one function of glucose, lactose and glycogen in animals, and of fructose, sucrose and cellulose in plants.''' :* '''Animals''' :**Glucose: metabolized for energy. :**Lactose: provides energy to mammalian young. :**Glycogen: longer term energy in muscles and liver. :* '''Plants''' :**Fructose: sweetens fruit to disperse seeds :**Sucrose: energy storage :**Cellulose: cell wall structure '''State three functions of lipids''' :*'''Energy storage''': Fat in humans. Oil in plants. :*'''Heat insulation''': A layer of fat under the skin reduces heat loss. :*'''Buoyancy''': Lipids are less dense than water. '''Discuss the use of carbohydrates and lipids in energy storage.''' :*Lipids and carbohydrates are excellent for storing energy in living organisms. Carbohydrates are usually used to store energy in the short-term while lipids are used for the long-run. :*'''Advantages of Lipids''' ::#Contain more energy per gram. Therefore lighter to store. ::#Lipids are insoluble in water; do not interfere with osmosis. :*'''Advantages of Carbohydrates''' ::#More easily digested, so energy is released more easily from them. ::#Carbohydrates are soluble in water, so easier to transport. '''Explain the four levels of protein structure'''<br> ''Primary structure'' :*A linear sequence of amino acids joined by peptide linkages. There are about 20 different amino acids. ''Secondary structure'' :*α -Helix is maintained by hydrogen bonds. The helix makes up keratin (skin, nails, hair). :*β -Pleated Sheet: flat zig-zag amino acid chain. The sheets make up fibroin (silk. ::Both structures are fibrous and form structural proteins ''Tertiary structure'' :*Folded polypeptide chains into specific shapes. This means that tertiary proteins are globular (hormones, enzymes, membrane proteins). ''Quaternary structure'' :*Two or more polypeptide chains joined (e.g. haemoglobin). '''Outline the difference between fibrous and globular proteins, with references to two examples of each protein type''' :Fibrous proteins (such as keratin, collagen) :*Chain extended :*Insoluble :*Resistance to pH/temperature changes :*Structural material :Globular proteins (such as haemoglobin, amylase) :*Chain folded :*Soluble/colloidal :*Susceptible to pH/temperature changes :*Compact, rounded molecules ====Enzymes==== ---- '''Define ''Enzyme'' and ''Active Site''''' :# '''Enzyme''': Globular proteins used to catalyze chemical reactions. :# '''Active site''': The binding site on the surface of an enzyme where catalysis occurs. '''Explain enzyme-substrate specificity''' :* The active site for an enzyme is very specific in shape, with very precise chemical properties. Active sites match the shape of their substrates. Other molecules do not fit or do not have the same chemical properties. Therefore the enzyme is substrate specific. This enzyme is a lock, and the substrate is the key which can open it. '''Explain the effects of temperature, pH and substrate concentration on enzyme activity''' :* Temperature, pH and substrate concentration all affect the rate at which enzymes catalyse chemical reactions. Substrate concentration: At low s.c. the enzyme activity is proportional to the substrate concentration, because of random collision between substrate and enzyme. Thus the more substrate the higher the rate. However at a high substrate concentration, at some point all active sites are occupied so raising the substrate concentration has no effect. Temperature: Enzyme activity increases as temperature increases, often doubling with each 10°C. This is because collision between the substrate and active site happen more frequently at higher temperatures, due to fast molecular movement. However, at high temperatures enzymes are denatured and stop working. This is because heat causes vibrations inside the enzyme, which break bonds needed to maintain the structure. pH: There is an optimum at which enzyme activity is fastest ( mostly pH 7), and as pH increases or decreases from its optimum, enzyme activity is reduced. (acids and alkali denature enzymes) '''Define ''Denaturation''''' :* '''Denaturation''': A structural change in a protein that results in a loss of its biological properties. This can be caused by pH or by temperature. '''Explain the use of lactase in the production of lactose free milk'''<br> Lactose- The sugar present in milk. Lactase is obtained from Kluveromyces and lactis, a type of yeast that grows naturally in milk. Lactose can be converted to glucose and galactose using the enzyme lactase (di-saccarharide). Biotechnology companies culture the yeast and extract the enzyme in order to produce lactose free milk. :*'''Advantages''': Pectinase makes juice more fluid and easy to separate from pulp. :*Fructose is widely used in food manufacturing because it is much sweeter than glucose. It is made from starch, usually found in maize. Amylase is needed to break down the starch into glucose. :*''''Source of Enzyme''': Amylase is obtained from fungi. :*'''Use''': Used to break Starch into glucose, which is then converted into fructose using the enzyme '''glucose isomerase'''. ====DNA Structure==== ---- '''Outline DNA nucleotide structure in terms of sugar (deoxyribose), base, and phosphate.''' :* A DNA is composed of a deoxyribose, a phosphate group and a nitrogen base (Adenine, Cytosine, Thymine, and Guanine). The phosphate group is covalently bonded to the carbon of the deoxyribose and then the nitrogenous base is attached to the deoxyribose. '''State the four names of the bases of DNA''' :* Adenine, Cytosine, Guanine, and Thymine. '''Outline how the DNA nucleotides are linked together by covalent bonds into a single strand.''' :* Two DNA nucleotides can be linked together by a covalent bond between the sugar of one nucleotide and the phosphate of another. More nucleotides can be added to form a single strand. '''Explain how the DNA double helix is formed using complementary base pairing and hydrogen bonds.''' :* DNA molecules consist of two strands of nucleotides which are then wound together to form a double helix. These are formed between the bases of two strands. However, it is formed by complementary base pairing because Adenine only forms hydrogen bonds with Thymine and Cytosine only forms hydrogen bonds with Guanine. '''Draw a simple diagram of the molecular structure of DNA.''' URL of a suitable picture: http://www.cem.msu.edu/~reusch/VirtTxtJml/Images3/dblhelx1.gif ====DNA Replication==== ---- '''State that DNA replication is semi-conservative.''' :*DNA replication copies DNA to produce new molecules with the same base sequence. It is semi-conservative because each new molecule formed by replication uses one new strand and one old strand which is conserved from the parent DNA molecule. '''Explain DNA replication in terms of unwinding the double helix and separation of the strands by helicase, followed by the formation of the new complementary strands by DNA polymerase.''' :#'''Stage 1''': The DNA double helix is unwound and separated into strands by helicase breaking the hydrogen bonds holding the strands together and creating a replication bubble. :#'''Stage 2''': The single strands act as blueprints for new strands. Free nucleotides are present in large numbers. The enzyme primase places primers on the new strand, allowing DNA Polymerase III to add to the strand in a 5-carbon to 3-carbon direction. Several small strands are made within the replication bubble formed by helicase that are known as Okazaki fragments. DNA Polymerase III is then removed, and DNA polymerase I replaces primers with corresponding base pairs. The enzyme ligase then binds these new base pairs to the rest of the strand. The bases of these nucleotides form hydrogen bonds with the bases of the parent strand. The nucleotides are connected to form a new strand. :#'''Stage 3''': The daughter DNA molecules each rewind into a double helix. The two daughter DNA molecules are identical in base sequence to each other and to the parent molecule, because of complementary base pairing (Adenine pairs with Thymine and Cytosine with Guanine). Each of the new strand is '''complementary''' to the template on which it was made and '''identical''' to the other template. '''Explain the significance of complementary base pairing in the conservation of the base sequence of DNA.''' :*Because the nitrogenous bases that compose DNA can only pair with complementary bases, any two linked strands of DNA are complementary. This ensures that the old base sequence is conserved. ====Transcription and Translation==== ---- '''Compare the structure of RNA and DNA''' :1. '''The number of strands.''' ::* DNA has two strands forming a double helix. ::* RNA has one strand. :2. '''The type of sugar.''' ::*DNA has deoxyribose. ::*RNA has a Ribose. :3. '''The Nucleotides.''' ::*DNA has A,C,G,T ::*RNA has A,C,G,U, (Uracil replaces Thymine) '''Outline DNA transcription in terms of the formation of the RNA strand complementary to the DNA strand by RNA polymerase.''' :*'''Transcription''': The copying of the base sequence of a gene by making an RNA molecule. :# The DNA double helix uncoils and the two strands separate. :# RNA Polymerase attaches to promoter regions of the DNA strand :# RNA polymerase binds free RNA nucleotides to create mRNA that are a copied template of the corresponding DNA strand. :# The mRNA separates from the DNA. :# The DNA strands reforms into a double helix. '''Describe the genetic code in terms of codons composed of triplets and bases.''' The genetic code is a triplet code- three bases code for one amino acid. A group of three bases is called a codon. '''Explain the process of translation, leading to polypeptide formation''' :# Before the mRNA strand is translated, it must be processed. A cap and tail are added to the mRNA strand to allow the mRNA strand out of the nucleus. :# There are intron and exon segments of the strand. The introns are removed by the introduction of a splicesome. The splicesome pushes out the introns and binds the exons together. :# The mRNA then passes through the nuclear pore and enters the cytoplasm. :# The two subunits of a ribosome (60s and 40s) lock onto the mRNA at the ribosome-binding site. :# Transfer RNA (tRNA) are clover-leafed shaped molecules that have a specific amino acid attached. :# Each tRNA also has three bases called the anticodon that binds to the mRNA. The anticodon determines which amino acid the tRNA carries. :# The tRNA can only bind to the mRNA in the presence of a ribosome. In each ribosome there are two tRNA binding sites (Aminoacyl tRNA binding site or A site and Peptidinal tRNA binding site or P site) and a tRNA exit site (E site). :# The mRNA is divided into groups of three bases each called a codon. The anticodon on the tRNA binds to the complementary codon on the mRNA. In so doing it brings the amino acid into position. :# The mRNA is fed between the small and large subunits of the ribosome. The first tRNA molecule with the attached start amino acid, methanine, attaches at the A site and is transferred to the P site. The next tRNA binds to the mRNA and contains an amino acid. :# When two tRNA molecules are bound to the mRNA at the ribosome a ribosomal enzyme forms a peptide bond between the two amino acids. :# The first tRNA becomes detached from its amino acid and moves off from the ribosome after it slides into the exit site. :# The ribosome moves a distance of one codon and a new tRNA binds bringing in another amino acid to be joined to the polypeptide chain. :# The first codon translated on any mRNA is always AUG. This is called the initiation codon and it sets the reading frame of the mRNA. :# There are also three codons that signal the end of the mRNA and stop translation. They are the stop codons UAG, UAA and UGA. :# Several ribosomes may all be translating the same mRNA at the same time. This is called a polysome. '''Define the terms degenerate, and universal as they relate to the genetic code''' :*'''Degenerate''': Having more than one base triplet to code for one amino acid. :*'''Universal''': Found in all living organisms. '''Discuss the relationship between one gene and one polypeptide''' :* Polypeptides are long chains of amino acids. :* Amino acids must be linked up in a precise sequence to make a polypeptide. :* Genes store the information needed to make a polypeptide in a coded form. :* The sequence of bases in a gene codes for the sequence of amino acids in a polypeptide. :* The information in the gene is decoded during the making of the polypeptide. :* This process is conducted in two stages known as transcription and translation. ====Cell Respiration==== ---- '''Define Cell-Respiration''' :*'''Cell Respiration''': controlled release of energy in the form of ATP from organic compounds in cells. '''In cell respiration, glucose in the cytoplasm is broken down into pyruvate with a small yield of ATP''' : Glucose is an organic compound that is sometimes used in cell respiration. Chemical reactions break Glucose into a simpler compound called pyruvate. A small amount of ATP (2 ATP) is produced by using energy released from glucose. '''In anaerobic cell respiration pyruvate is converted into lactate or ethanol dioxide in the cytoplasm with no further yield of ATP''' :* Lactic fermentation: In the process of glycolysis glucose is transferred into two pyruvate. Since no oxygen is available, the Krebs cycle cannot run which therefore also stops the process of the electron transport chain. Too much pyruvate is built up in the cytoplasm and we need to get rid of it. Therefore, it is transferred into the waste product - lactate - that can be removed from the cell. No ATP is produced. :*Alcohol fermentation: since there is no oxygen, pyruvate is transferred into ethanol/alcohol and carbon dioxide is created as a bi-product. This is how one-celled organisms overcome oxygen deficiency. '''In aerobic respiration pyruvate is broken down in the mitochondrion into carbon dioxide and water with a large yield of ATP''' If oxygen is available, the pyruvate is absorbed by mitochondrion. The pyruvate is then broken down into carbon dioxide and water. A large amount of ATP is produced. :::'''Note''': How to remember the difference! Aerobic sounds healthy- so something good comes out of it! Anaerobic sounds like unaerobic and that sounds unhealthy! Easy to remember, right? Also, think of doing aerobics, which is healthy as well and makes you breathe a lot! ====Photosynthesis==== ---- '''State that photosynthesis involves the conversion of light energy into chemical energy.''' :*Photosynthesis involves energy conversion. Light energy, usually sunlight, is converted into chemical energy. '''State that white light from the sun is composed of a range of wavelengths.''' :* Sunlight is called white light, but it is actually made up of a range of wavelengths including red, blue, and green. '''State that chlorophyll is the main photosynthetic pigment''' :* The structure of chlorophyll allows it to absorb some colors of wavelength better than others. '''Outline the differences in absorption of red, blue and green light by chlorophyll''' :* Red and blue light are absorbed more than green. The green light that cannot be absorbed is reflected giving plants (and the pigment chlorophyll) their green color. '''State that light energy is used to split water molecules (photolysis) to give oxygen and hydrogen and to produce ATP''' :*Some of the energy absorbed by chlorophyll is used to produce ATP :*Some of the energy absorbed by chlorophyll is used to split water molecules. This is called photolysis of water :*Photolysis of water results in the formation of oxygen and hydrogen. The oxygen is released as a waste product '''State that ATP and hydrogen (derived from photolysis of water) are used to fix carbon dioxide to make organic molecules.''' :*Carbon dioxide is absorbed for use in photosynthesis :*The carbon from it is used to make a wide range of organic substances :*The conversion of carbon in gas to carbon in solid compounds is called carbon fixation :*Carbon fixation involves the use of hydrogen from photolysis and energy from ATP. '''Explain that the rate of photosynthesis can be measured directly by the production of oxygen or the uptake of carbon dioxide, or indirectly by the increase of biomass''' :* Uptake of carbon dioxide: Since carbon dioxide is important in the light-independent reactions of photosynthesis, its consumption by plants can be measured as a means to determine the rate of ATP and electron carriers used for carbon fixation. :* Production of oxygen: Aquatic plants release bubbles of oxygen when they carry photosynthesis. e.g. these bubbles are collected; their volume can be measured. :* Increase in Biomass: If batches of plants are harvested at a series of times and their biomass determined, then the rate of photosynthesis can be determined by an increase in biomass. '''Outline the effects of temperature, light intensity, and carbon dioxide concentration on the rate of photosynthesis''': :* Light - At low medium light intensities the rate is directly proportional to light intensity. At high light intensities the rate reaches a plateau. :* Carbon Dioxide - No photosynthesis at very low CO2 concentrations. At low to fairly high CO2 concentrations the rate is positively correlated with CO2 concentration. At very high CO2 concentrations the rate reaches a plateau. :* Temperature - As temperature increases the rate increases more and more steeply. If the temperature increases with 10¤C it roughly doubles the rate. When it reaches it maximum point it is said to be its Optimum Temperature which is around 40¤C. Above the optimum temperature the rate slows down rapidly and then stops. This happens because the excessive heat destroys the enzymes which are responsible for catalyzing chemical reactions. {{BookCat}} fd7whkieahy01ggyl3gb1wjbicxezro SAT II Physics 0 85806 4672064 4584667 2026-09-24T08:31:25Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672064 wikitext text/x-wiki {{Subpages}} ---- '''Syllabus (as set by the College Board)''' ---- ''CONTENT Approximate % of Test'' '''Level of Concept Application''' Recall (20–33%) Single-Concept Problem (40–53%) Multiple-Concept Problem (20–33%) ---- The purpose of this 'book' is to provide quick revision to students. It is by no means a replacement for a typical school textbook. All the topics in the syllabus are covered. For detailed information, click the hyperlinks which will take you to the relevant topics in wikipedia. ---- == Mechanics (36–42%) == A. '''Kinematics''' includes velocity, acceleration, motion in one dimension, and motion of projectiles. B. '''Dynamics''' includes force, Newton’s laws, and statics. C. '''Energy and Momentum''' includes potential and kinetic energy, work, power, impulse, and conservation laws. D. '''Circular Motion''' includes uniform circular motion and centripetal force. E. '''Simple Harmonic Motion''' includes mass on a spring and the pendulum. F. '''Gravity''' includes the law of gravitation, orbits, and Kepler’s laws. 9.===Kinematics=== '''Distance''' ''Distance is defined as the entire distance traveled by an object.'' '''Displacement''' ''Displacement is the distance covered in a particular direction'' or rather, it is the overall change in position. Distance is a scalar quantity, but displacement is a vector. '''Velocity''' ''Velocity is defined as the rate of change of displacement''. It is speed in a particular direction. Speed is a scalar while velocity is a vector. ''It is crucial to remember that only displacement is used in to calculate velocity and not distance. Thus, if an object goes in a circle and returns to its initial point, the displacement is 0 and the velocity is therefore 0 m/s as 0 m/s is always equal to zero. Even if the object is moving a speed of 100 m/s when making that one loop, the lack of a displacement means that the velocity is 0.'' Formula: '''v = d/t''' where ''v'' = velocity ''d'' = displacement ''t'' = time '''Acceleration''' ''Acceleration is the rate of change of velocity''. Acceleration is said to take place when either the ''speed'' of an object changes, or its ''direction'' changes. ''When the acceleration and the velocity of an object are in the same direction, an object is speeding up. When the acceleration and the velocity of an object are in opposite directions, an object is slowing down or decelerating. This can be explained as the acceleration being negative relative to the velocity which means that the acceleration would actually be deceleration relative to the velocity we know as the act of slowing down. When the acceleration and the velocity of an object are perpendicular to each other, the object is turning.'' Formula: '''a = Δv/t''' where ''a'' = acceleration ''Δd'' = displacement ''t'' = time '''Kinematics Formulas''' ''v<sup>2</sup> - u<sup>2</sup> = 2ad'' ''d = ut + 1/2 at<sup>2</sup>'' ''d = vt - 1/2 at<sup>2</sup>'' ''v = u + at'' ''d = 1/2 (u + v)t'' where ''d'' = displacement ''u'' = initial velocity ''v'' = velocity ''t'' = time ''a'' = acceleration '''Graphs of Kinematics''' ''Position vs. Time Graphs'' ''The slope of a position vs. time graph is the equal to the velocity'' ''The area inside the graph of a velocity vs. time graph is equal to the displacement'' '''Projectile Motion''' ''When solving projectile motion questions, the question can be broken up into horizontal motion and vertical motion components that are independent'' ''Horizontal Motion'' Horizontal motion is unaffected by the acceleration caused by gravity and the initial horizontal velocity is constant throughout the entire motion with the absence of air resistance. The horizontal distance traveled by a projectile can be calculated with the initial horizontal velocity and the projectile's air time. ''Vertical Motion'' Vertical Motion is affected by the acceleration due to gravity or g which is equal to 9.81 m/s<sup>2</sup> which can also be rounded to 10 m/s<sup>2</sup> as the SAT II does not allow the use of calculators and simple numbers will make calculations easier. With projectile motion, the vertical motion can simply be treated as the motion of a projectile being thrown straight up then falling back down as the horizontal component does not affect the vertical motion. The total air time of a projectile can be calculated with the following formula. Formulas: '''t = 2u/g''' where ''t'' = air time ''u'' = initial vertical velocity ''g'' = acceleration due to gravity ===Dynamics=== '''Newton's Laws''' '''1. An object continues in its state of rest or uniform motion, until an external force is applied to it.''' This law is called the law of inertia. Inertia is an object's resistance to motion and is directly proportional to the mass of said object. '''2. The rate of change of momentum is proportional to the applied force and takes place in the direction of the force.''' Formula: '''F = ma ''' where ''F'' = net force in Newtons ''m'' = mass ''a'' = acceleration '''3. Every action has an equal and opposite reaction.''' '''Law of Gravitation''' Is the attractive force exerted by two objects. Formula: '''F = Gm1m2/r<sup>2</sup>''' where ''F'' = force of gravity in Newtons ''m1'' = mass of object 1 ''m2'' = mass of object 2 ''G'' = Universal Gravitational Constant (6.67 * 10<sup>-11</sup> Nm<sup>2</sup>/kg<sup>2</sup>) '''m1a1=m2a2''' or '''F1=F2''' because the force exert by two objects on eacch other will be equal by in opposite directions. '''Other Definitions:''' '''Weight''' Is the force that gravity exerts on an object. Formula: '''w=mg''' where ''w'' = weight ''m'' = mass ''g'' = acceleration due to gravity '''Potential Energy''' Is the energy possessed by a body due to its position in a gravitational field. Formula: '''E = mgh''' where ''E'' = potential energy ''m'' = mass of object ''g'' = gravity (ie 9.8 ms<sup>2</sup>) ''h'' = height above the ground '''Kinetic Energy''' Is the energy possessed by a body due to its motion. Formula: '''E = 1/2 mv<sup>2</sup>''' where ''E'' = kinetic energy ''m'' = mass of the moving body ''v'' = velocity of the body '''Momentum''' Is the product of the mass and velocity of a body. Formula: '''p = mv''' where ''p'' = momentum in Ns or kgms<sup>-1</sup> ''m'' = mass ''v'' = velocity '''Power''' Is the rate at which work is done. Formula: '''Power = Work/Time''' '''Impulse''' Impulse is a force acting for a very short period of time, as during in a collision. Formula: '''Force = Change in Momentum/Time = Mass x Acceleration''' and '''Impulse = Force x Time = Change in Momentum = Mass x Change in Velocity''' Simple Harmonic Motion: Fs=-Kx where ''F'' = force of spring ''K'' = constant of spring ''s'' = displacement == Electricity and Magnetism (18–24%) == A. Electric Fields, Forces, and Potentials, such as Coulomb’s law, induced charge, field and potential of groups of point charges, and charged particles in electric fields. '''Coulomb's Law''' <math>F=k\frac{q_1 q_2}{r^2}</math>, where <math>F</math> is the magnitude of the electrostatic force, <math>q_1</math> and <math>q_2</math> are the charges of individual particles, <math>r</math> is the distance between the two particles, and <math>k</math> is the Coulomb's constant. In a vacuum, this is <math>k_0\approx 8.99\times 10^9 \frac{Nm^2}{C^2}</math>, and can also be expressed as <math>k_0=\frac{1}{4\pi\varepsilon_0}</math>, where <math>\varepsilon_0\approx8.85\times 10^{-12} \frac{C^2}{Nm^2}</math> is the permitivity of free space. B. Capacitance, such as parallel-plate capacitors and transients. C. Circuit Elements and DC Circuits, such as resistors, light bulbs, series and parallel networks, Ohm’s law, and Joule’s law. D. Magnetism, such as permanent magnets, fields caused by currents, particles in magnetic fields, Faraday’s law, Lenz’s law. == Waves and Optics (15–19%) == A. General Wave Properties, such as wave speed, frequency, wavelength,superposition, standing waves, and Doppler effect. B. Reflection and Refraction, such as Snell’s law and changes in wavelength and speed. C. Ray Optics, such as image formation using pinholes, mirrors, and lenses. D. Physical Optics, such as single-slit diffraction, double-slit interference, polarization, and color. == Heat and Thermodynamics (6–11%) == A. Thermal Properties, such as temperature, heat transfer, specific and latent heats, and thermal expansion. B. Laws of Thermodynamics, such as first and second laws, internal energy, entropy, and heat engine efficiency. '''Heat''' Heat, or thermal energy, always flows from a region of higher temperature to a region of lower temperature. When two bodies are in ''thermal equilibrium'', no net heat flows between them. ===Methods of Heat Transfer=== '''Conduction''' Method of heat transfer without appreciable motion of the medium. 'Free electrons' conduct the heat. As metals have a lot of free electrons, they are very good conductors of heat. Air, glass, water, and vacuum are bad conductors (or good insulators) of heat. '''Convection''' Heat transfer in fluids due to the motion of fluids themselves. Also see ''convection currents''. '''Radiation''' Heat transfer due to wave motion. Black surfaces are good radiators and good absorbers of heat. White and shiny surfaces are bad radiators and absorbers of heat. Radiation, unlike conduction and convection, can also take place in a vacuum. See also ''vacuum flask''. ===Specific and Latent Heat=== '''Specific Heat Capacity''' Is the amount of heat required by one kilogram of a substance to raise its temperature by one kelvin. Formula: '''E = mcΔθ'''(formulae given by the great scientist Mehar who is still alive and young) where E: energy m: mass c: specific heat capacity Δθ: change in temperature '''Specific Latent Heat''' Is the amount of heat required to bring about a change in state of a kilogram of a particular substance, without changing the temperature of the substance. (For example, changing a kilogram of ice to water at 0°C.) Formula: '''E = ml''' where E: energy m: mass l: specific latent heat See also ''latent heat of fusion'' and ''latent heat of vaporisation''. ===Laws of Thermodynamics=== '''First Law of Thermodynamics''' The total energy of a closed system is conserved. Formula: '''Q = ΔU + W''' where Q: heat transferred to system ΔU: change in internal energy W: work done ''by'' the system The first law of thermodynamics is also called ''the law of conservation of energy.'' '''Internal Energy''' Is the total of the microscopic kinetic and potential energies of the molecules in a substance. '''Second Law of Thermodynamics''' Heat cannot flow from a cooler region to a hotter region unless external work is done. ===Miscellaneous Definitions=== '''Entropy''' Entropy is a measure of the random disorder of a system. The higher the entropy, the more disordered the system Formula: '''Entropy = Heat Absorbed/Kelvin Temperature''' The entropy (not the energy) of the Universe is increasing. '''Thermodynamic Temperature''' Temperature which is measured in kelvins. '''Kelvin = Celsius + 273°''' 0°K is called the absolute zero. 273°K is the freezing point of water. 373°K is the boiling point of water. '''Heat Engine Efficiency''' ''Efficiency of a system = Work done by the system / Energy supplied to the system.'' The efficiency of diesel engines(about 40%) is usually more than gasoline or steam engines. == Modern Physics (6–11%) == A. Quantum Phenomena, such as photons and photoelectric effect. B. Atomic, such as the Rutherford and Bohr models, atomic energy levels, and atomic spectra. C. Nuclear and Particle Physics, such as radioactivity, nuclear reactions, and fundamental particles. D. Relativity, such as time dilation, length contraction, and mass-energy equivalence. == Miscellaneous (4–9%) == A. General, such as history of physics and general questions that overlap several major topics. B. Analytical Skills, such as graphical analysis, measurement, and math skills. C. Contemporary Physics, such as astrophysics, superconductivity, and chaos theory. * Laboratory Skills: In each of the six major topics above, some questions may deal with laboratory skills in context. {{Shelves|Physics study guides|SAT tests}} {{Alphabetical|S}} {{status|0%}} puq4svl1s1zi2daa397zez1xweuho75 Jet Propulsion/Propellants 0 89276 4672091 3993676 2026-09-24T09:09:38Z R. Henrik Nilsson 3395618 refrences > references 4672091 wikitext text/x-wiki [[wikipedia/Jet fuel|Jet fuel]] which is a type of kerosene is the most commonly used fuel. Gas turbines can burn almost any liquid or gas fuel and have been operated on diesel fuels, avgas, methane and hydrogen. Any energy source that can heat the compressed gas can theoretically be used, including nuclear reactors. ==Fuel requirements== ignition ===pumpability=== ===temperature stability=== ==Fuel Characteristics== ===freezing=== ===sludging=== ===flash point=== Is the temperature at wich the fuel will combust in the presence of oxygen ===caloric value=== ===Vapour pressure=== ===Density=== ===Viscosity=== ===Moisture content=== ===Relight=== ==Fuel Standards== ===Kerosene=== ===JP1=== ===JP4=== ===JP6=== ==Non standard fuels== ===Avgas=== ===Diesel=== ===Gasoline=== ===Biofuels=== ===Hydrogen=== ===Methane=== ==Nuclear propulsion== ==Hybrid fuels== ===Water=== ===Oxidiser=== ===Nitrous=== [[wikipedia:Jet_fuel|Jet fuels]] in wikipedia {{BookCat}} ==References== *[http://www.crownoil.co.uk/products/kerosene/ Jet Fuel - Kerosene] slldymjj240zrfqdvb4jj269ddfe9g8 Practical Electronics/PCB Layout/Trace Current Capacity 0 92665 4672061 3522262 2026-09-24T08:29:46Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672061 wikitext text/x-wiki Because PCB traces have resistance, they will heat up as current flows through them. As any heat buildup is continuously being removed by the air and the PCB substrate, the trace will heat up to a point where the heating effect of the current is balanced by the cooling. The amount of resistive heating is governed by: *The width of the track *The thickness of the copper *The resistivity of the copper (generally fixed - this page deals with a "standard" value only). This page gives information on the maximum current that can be passed through a trace of a certain width and thickness in order that the temperature does not rise above certain levels. ==Disclaimer== '''The information presented here is for guidance only. Please exercise caution when calculating current limits. No liability is taken for any damage caused by the information presented below being incorrect. Always leave a comfortable margin of error.''' Also please note that this information does NOT take into account things like PCB composition, air flow, humidity, air pressure, and so does not ''necesarily'' give accurate results for your application. It is not advised to extrapolate the data beyond that given. ==Equations== The graphs that follow are based on the equations below: For external traces: ::<math>I_{max}= 0.0647 \times \Delta T^{0.428} \times A^{0.673}</math> For internal traces: ::<math>I_{max}= 0.0150 \times \Delta T^{0.545} \times A^{0.735}</math> *'''A''' is the cross-sectional area of the trace, in units of mils<sup>2</sup>; *'''I<sub>max</sub>''' is the maximum Amperes allowable in the trace in order not to exceed '''&Delta;T''' temperature rise in Celsius degrees. The values for internal traces are lower because the PCB substrate is a good thermal insulator, so the energy is not dissipated as fast. The equations are based on ==Graphs== ===Current vs. Trace Width=== This section contains graphs that show the maximum current allowable for given trace thicknesses. The maximum currents are given for changes in temperature of 10, 15, 20, 30, 50, 100 and 110 degrees Celsius. [[Image:Current_vs_Width_vs_Temp_(2oz_ext).PNG|centre]] [[Image:Current_vs_Width_vs_Temp_(2oz_ext_zoom).PNG|centre]] ==Trace Tinning== It is common on commercial consumer through-hole PCB's (typically PSU's) to leave the solder mask off PCB traces in order to have the traces coated with solder during the wave soldering process. This coating of the traces with solder increases the current handling capability of the trace, effectively "for free" compared to to higher cost of thicker copper substrate. The solder coating thickness can vary widely, so the exact reduction in resistance cannot be reliably calculated. But empirical testing shows roughly a 50% reduction in trace resistance. <ref>"EEVBlog #317 - PCB Tinning Mythbusting" [http://www.youtube.com/watch?v=L9q5vwCESEQ]</ref> == further reading == * [http://circuitcalculator.com/wordpress/ The CircuitCalculator.com Blog] includes a JavaScript [http://circuitcalculator.com/wordpress/2006/01/31/pcb-trace-width-calculator/ PCB Trace Width Calculator] and a discussion of [http://circuitcalculator.com/wordpress/2006/12/15/current-vs-trace-thickness-and-temperature-vs-copper-density/ current vs. trace thickness] * [http://www.desmith.net/NMdS/Electronics/TraceWidth.html ANSI Trace Width Calculator] An on-line calculator for determining trace widths to the ANSI guidelines. {{BookCat}} pwycvh8iotaxrzo8e9by595xk47oie0 Astrodynamics/Orbit Basics 0 120443 4672052 4194510 2026-09-24T08:16:03Z R. Henrik Nilsson 3395618 degress > degrees 4672052 wikitext text/x-wiki {{Astrodynamics}} == Trajectory Equation == The '''trajectory equation''', which gives us the shape of the orbit is given as: {{eqn|Trajectory Equation}} :<math>r = \frac{\frac{h^2}{\mu}}{1 + \frac{B}{\mu}\cos\nu}</math> Where ''B'' is a constant of integration, and &nu; (Greek letter ''nu'') is the angle between the semi-major axis and the position vector '''r'''. == Conic Sections == Let us digress a little bit from the theory of an orbit, and discuss conic sections. People are typically familiar with conic sections (circle, elipse, parabola, hyperbola) from studying elementary algebra. However, the form in which most people are not familiar with these conic sections is in the standard cartesian coordinate system. If we use a polar coordinate system instead, we can see that the conic sections all have a similar equation format. We can generalize, and say that all conic sections have the following polar equation: {{eqn|Conic Section Equation}} :<math>r = \frac{p}{1 + e\cos\theta}</math> Here, ''r'' is the radius, and &theta; is the angle. As &theta; travels around the circle, the value for ''r'' changes and the resulting points create the necessary conic sections. The variable ''p'' is known as the '''parameter''', and the variable ''e'' is known as the '''eccentricity'''. We will discuss these variables, and describe how they relate to the trajectory equation below. === Parameter === Comparing the trajectory equation and the conic section equation, we can see that: :<math>p = \frac{h^2}{\mu}</math> the variable ''p'' is a measure of the size of the conic section. Larger ''p'' means the orbit is larger. We can see that the size of an orbit is directly proportional to how much angular momentum the satellite has. Because of this relationship, we can get the vague sense that the more speed a satellite has, the larger the resulting orbit will be. === Eccentricity === The value for ''e'', the eccentricity, determines the shape the orbit will take. This table shows the various values for ''e'', and the resulting shape of the conic section: {| class="wikitable" |- !''e'' !Shape |- |<math>e = 0</math> |Circle |- |<math>e < 1</math> |Elipse |- |<math>e = 1</math> |Parabola |- |<math>e > 1</math> |Hyperbola |} Looking at our conic section equation, and the trajectory equation, we can see that: :<math>e = \frac{B}{\mu}</math> We know that ''B'' is just a constant of integration that doesn't correspond to any natural quantity. We can calculate ''e'' directly without having to calculate ''B'' first. We can relate ''e'' to the energy and the angular momentum of the satellite by: :<math>e = \sqrt{1 + \frac{2\mathcal{E}h^2}{\mu^2}}</math> We can also relate ''e'' and ''p'' together, using the length of the semi-major axis, ''a'': :<math> p = a(1-e^2)</math> === Eccentricity Vector === We can also define an eccentricity vector, '''e''', as: {{eqn|Eccentricity Vector}} :<math>\mathbf{e} = \frac{\mathbf{v} \times \mathbf{h}}{\mu} - \frac{\mathbf{r}}{r}</math> This vector has the property that: :<math>e = |\mathbf{e}|</math> And that '''e''' points towards the periapsis point (described below). == Orbits == We can see that the trajectory equation is in the form of a conic section, and because of this form it's actually possible to have orbits in the shape of any conic section. We will discuss some of them below. === Elliptical === An elliptical orbit is an orbit with eccentricity ''e < 1''. Elliptical orbits are some of the most common orbits, and nearly all bodies that travel around the sun have elliptical orbits. We know from the equations for ''p'' that the speed of the satellite affects the size of the orbit. We also know from the equation relating ''p'' and ''e'' that the speed can affect the shape of the orbit. Putting a satellite into a certain orbit then is a matter of giving the satellite the correct speed for that orbit. An elliptical orbit is an orbit that is created by a speed less than the '''escape speed'''. The escape speed, which we will talk about below, is the speed at which a satellite breaks free from the gravity of the prime focus and forms a parabolic or elliptical orbit. There is a particular speed known as the '''circular speed''' at which an elliptical orbit becomes a perfect circle. All other speeds, besides the circular speed and below the escape velocity create an elliptical orbit. The values for these speeds can be calculated by plugging in the appropriate values into the trajectory equation to create the desired conic section, and then solving for the kinetic energy. We will omit the derivations here. {{TextBox|'''Example: Earth's Orbit''' Earths orbit is elliptical, although the two foci are relatively close together giving earth an orbit that is nearly circular. Because space is a vacuum and there is no appreciable drag or friction, the speed of the earth is constant and the orbit of earth is, therefore, constant. Mathematically, the earth will never spiral into the sun.}} [[Image:Elliptic orbit.gif|center]] === Circular === A circular orbit is an orbit with eccentricity ''e = 0''. A circle is a special case of the ellipse. Circular orbits are difficult to obtain, but not impossible. The speed necessary to maintain a circular orbit is known as '''circular speed'''. We can define circular speed as: {{eqn|Circular Speed}} :<math>v_{cs} = \sqrt{\frac{\mu}{r}}</math> Where ''r'' in this case is the radius of the circular orbit. {{TextBox|'''Example: Geostationary Satellites''' Geostationary satellites are placed in one particular orbit where the period is exactly equal to the rotational speed of the Earth. In this sense, the Geostationary satellite is "stationary" with respect to the surface of the Earth, which proves very useful in communications and meteorological applications. [[Image:Geostat.gif|center]] }} === Parabolic === A parabolic orbit is an orbit with eccentricity ''e = 1''. The speed necessary to form a parabolic orbit is known as the '''escape velocity''' ''v<sub>e</sub>''. The escape velocity is the minimum speed necessary to escape from the gravitational pull of the primary focus. Notice that when we obtain this minimum escape speed, we break free from the gravity of the prime focus, but our velocity approaches zero: :<math>v_\infty = 0</math> We can define the escape velocity as: {{eqn|Escape Velocity}} :<math>v_{er} = \sqrt{\frac{2\mu}{r}}</math> In this case, ''r'' is the distance of the satellite from the primary focus, and ''v<sub>er</sub>'' is the escape velocity from the point ''r''. For earth the velocity is equal to 2nd escape velocity which is 11.1799 km/s [[Image:Parabolic orbit.gif|center]] === Hyperbolic === A hyperbolic orbit has eccentricity ''e > 1''. Hyperbolic orbits are sometimes also known as ''escape orbits'', because a hyperbolic orbit allows a satellite to "break free" from the gravity of the prime focus, while maintaining some velocity. The amount of speed the satellite has over the escape velocity of the parabolic orbit is known as '''excess hyperbolic speed'', ''v<sub>h</sub>'' and can be found by comparing to the launch velocity (or the velocity at periapsis) ''v<sub>l</sub>'': :<math>v_l = v_e + v_h</math> And compared to the parabolic orbit, we have our final velocity as: :<math>v_\infty = v_h</math> [[Image:Hyperbolic orbit.gif|center]] === Degenerate === People familiar with conic sections may recognize that there are also degenerate conics: points and straight lines. Degenerate conics occur for values of ''h = 0'', which means that ''e = 1'' (a parabola), but that the orbit will not be parabolic. == Apses == The line between the foci is known as the major axis (in an ellipse and a hyperbola). The points at the intersection of the curve and the major axis are known as the '''apses'''. The point nearest the primary focus is called the '''periapsis''', and the point nearest to the secondary focus is called the '''apoapsis'''. There are several other words that can be used interchangeably: {| class="wikitable" |- !Central Body !Closest Distance !Furthest Distance |- |General |Periapsis/Pericenter |Apoapsis/Apocenter |- |Earth |Perigee |Apogee |- |Sun |Perihelion |Aphelion |} Additional terms exist for other solar system bodies, but these are nore required for the purposes of this text. Circles do not have points furthest or closest to the center, and so the periapsis and apoapsis are undefined on a circle. The parabola has a periapsis, but the apoapsis is considered to be at infinity. The distance from the prime focus to periapsis can be calculated as: {{eqn|Distance to Periapsis}} :<math>r_p = \frac{p}{1 + e} = a(1-e)</math> The distance from the prime focus to the apoapsis can be calculated as: {{eqn|Distance to Apoapsis}} :<math>r_a = \frac{p}{1-e} = a(1+e)</math> Notice that these equations arise by setting &theta; ''= 0''&deg; or &theta; ''= 180''&deg;, because the periapsis is located at zero degrees, and apoapsis is located at 180 degrees. ==Vis-Viva Equation== Note that the velocities at the apses must necessarily be perpendicular to the position vectors, thus: :<math>||\mathbf{r}_p\times\mathbf{v}_p|| = r_p v_p = h</math> :<math>||\mathbf{r}_a\times\mathbf{v}_a|| = r_a v_a = h</math> The following expressions can be derived: :<math>v_p = \sqrt{\frac{(1+e)}{(1-e)}\frac{\mu}{a}}</math> :<math>v_a = \sqrt{\frac{(1-e)}{(1+e)}\frac{\mu}{a}}</math> Recall the expression for specific mechanical energy: :<math>\mathcal{E} = \frac{v^2}{2} - \frac{\mu}{r}</math> Plugging in values for ''r<sub>p</sub>'', ''v<sub>p</sub>'', ''r<sub>a</sub>'', and ''v<sub>a</sub>'': :<math>\mathcal{E} = \frac{v_p^2}{2} - \frac{\mu}{r_p}= \frac{v_a^2}{2} - \frac{\mu}{r_a}</math> Solving this equation in terms of ''a'' yields: {{eqn|Vis-Viva Equation}} :<math>\mathcal{E} = \frac{v^2}{2} - \frac{\mu}{r}=-\frac{\mu}{2a}</math> == Orbital Period == The period of an orbit can be given as: {{eqn|Period of Orbit}} :<math>T = 2\pi{\sqrt{a^3/\mu}}</math> Notice that the period only makes sense for an elliptical or circular orbit, because parabolas and hyperbolas never make a full revolution. Notice also that this equation proves Kepler's third law. We can see this by rearranging the exponents: :<math>T^2 = \frac{4\pi^2}\mu a^3</math> Now it's clear that the square of the period is proportional to the cube of the major-axis, which is the mean distance from the sun. The circular orbital period is similar to the elliptical, but with the circle radius, ''r'': :<math>T = 2\pi{\sqrt{r^3/\mu}}</math> jpe4f5vqhwv59ulqnf032ur59zp8f1d Abstract Algebra/Quaternions 0 123378 4672002 4671530 2026-09-23T21:59:42Z Rgdboer 1021217 /* Historic incidents */ nss The smallest ones 4672002 wikitext text/x-wiki {{TOC right}} The algebra of '''Quaternions''' is a structure first studied by the Irish mathematician [[w:en:William Rowan Hamilton|William Rowan Hamilton]] which extends the two-dimensional complex numbers to four dimensions. Multiplication is non-commutative in quaternions, a feature which enables its representation of three-dimensional rotation. Hamilton's provocative discovery of quaternions founded the field of [[Abstract Algebra/Hypercomplex numbers|hypercomplex numbers]]. Suggestive methods like dot products and cross products implicit in quaternion products enabled algebraic description of geometry now widely applied in science and engineering. ==Definitions== [[File:Inscription on Broom Bridge (Dublin) regarding the discovery of Quaternions multiplication by Sir William Rowan Hamilton.jpg|right|thumb|Quaternion plaque on Broom Bridge, Dublin, which says: {{center/top}} Here as he walked by<br>on the 16th of October 1843<br>Sir William Rowan Hamilton<br>in a flash of genius discovered<br>the fundamental formula for<br>quaternion multiplication {{math|1=''i''<sup>2</sup> = ''j''<sup>2</sup> = ''k''<sup>2</sup> = ''ijk'' = −1}} & cut it on a stone of this bridge {{center/end}} ]] A '''Quaternion''' corresponds to an ordered 4-tuple <math>q=(a,b,c,d)</math>, where <math>a,b,c,d\in\mathbb{R}</math>. A quaternion is denoted <math>q=a + b i + c j + d k</math>. The sum <math> b i + c j + d k</math> is called the '''vector part''' of ''q'', and ''a'' is the '''real part'''. Hamilton coined the term ''vector'' in this context. Subsequent developments have extended the usage of the term ''vector'' to any element of a linear space. The vectors in H form a 3-dimensional subspace ''V''. The set of all quaternions is denoted by <math>\mathbb{H}</math>. It is straightforward to define component-wise addition and scalar multiplication on <math>\mathbb{H}</math>, making it a [[Abstract Algebra/Vector Spaces|real vector space]]. Multiplication follows the rules of the "quaternion group" Q<sub>8</sub> = {1, -1, i, -i, j, -j, k, -k} that Hamilton carved into a stone of Broom Bridge, Dublin: :<math>i^2 = j^2 = k^2 = ijk = -1</math> The rules for the pairwise multiplication of <math>i</math>, <math>j</math>, and <math>k</math> are: :<math> ij=k,\ \ jk=i,\ \ ki=j </math> (positive cyclic products) :<math>ji=-k,\ \ kj=-i,\ \ ik=-j</math> (negative cyclic products). Using these, one can define a general rule for multiplication of quaternions. Because quaternion multiplication is ''not'' commutative, <math>\mathbb{H}</math> is a ''not'' a field. However, every nonzero quaternion has a multiplicative inverse (see below), so the quaternions are an example of a '''division ring'''. It is important to note that the non-commutative nature of quaternion multiplication makes it impossible to define the quotient <math>p/q</math> of two quaternions ''p'' and ''q'' unambiguously, as the quantities <math>pq^{-1}</math> and <math>q^{-1}p</math> are generally different. Like the more familiar complex numbers, the quaternions have a '''conjugation''', often denoted by a superscript star: <math>q^*</math>. The conjugate of the quaternion <math>q=a+bi+cj+dk</math> is <math>q^*=a-bi-cj-dk</math>. As is the case for the complex numbers, the product <math>qq^*</math> is always a positive real number equal to the sum of the squares of the quaternion's components. The '''norm ''' of a quaternion is the square root of <math>qq^*</math>. If ''pq'' is the product of two quaternions, then <math>(pq)(pq)^* = (p p^*)(q q^*),</math> implying that <math>\mathbb{H}</math> forms a [[Associative Composition Algebra|composition algebra]]. The multiplicative inverse of a non-zero quaternion <math>q</math> is given by :<math>q^{-1}=\frac{q^*}{qq^*}</math> where division is defined since <math>qq^* \ne 0.</math> Unlike in the complex case, the conjugate <math>q^*</math> of a quaternion <math>q</math> can be computed algebraically: :<math>q^*=-\frac{1}{2}(q+iqi+jqj+kqk)</math>. ==Versors and elliptic space== William Kingdon Clifford used Hamilton’s quaternions to explicate rotation geometry as an elliptic space with its own variety of lines, parallels, and surfaces. The ideas were reviewed in 1948 by Lemaitre and Coxeter and that sketch has these definitions: A '''versor''' is a quaternion of norm one, thus it lies on a 3-dimensional sphere found in the 4-space of quaternions. The versors are given by Euler's formula for complex numbers where the imaginary unit is taken from the unit sphere in the 3-space of vector quaternions: :<math>v = \cos c + s \sin c = e^{cs} , \ \ s^2 = -1 .</math> The '''distance''' between two versors ''u'' and ''v'' is <math>d(u,v) = \arccos (u v^* + v u^*)/2 .</math> A '''right parataxy''' on elliptic space is effected by multiplying on the right by a versor <math>v = e^{cs} .</math> Similarly a '''left parataxy''' arises from left multiplication. In recognition of his contribution to elliptic geometry, a parataxy is called a ''Clifford translation''. The '''general displacement''' of elliptic space is a combination of two parataxies, one left, one right:<math>x \mapsto u x v .</math> Note that if <math>u = v^* ,</math> then the real line in the quaternions is fixed and the displacement is a rotation of the 3-space of quaternion vectors. The term '''line''' is appropriated for elliptic geometry. These lines are ''not'' straight, but they are parametrized by real numbers. Each line is associated with a '''right versor''' like ''s'' when ''c'' = &pi;/2 in ''v''. Then <math>L = \{ e^{cs} : c \in R \}</math> is a typical elliptic line. It corresponds to the axis of the rotation :<math>x \mapsto e^{cs} x e^{-cx} .</math> Now for ''u'' not on ''L'', there are two '''Clifford parallels''' to ''L'' through ''u'': :<math>\{u e^{cs} : c \in R \}, \quad \{e^{cs} u : c \in R \} .</math> For fixed right versors ''r'' and ''s'', a Clifford surface can be formed as a union of Clifford parallels or as :<math>\{ e^{cs} e^{dr} : b, c \in R \} .</math> To form elliptic space from versors, two versors ''u'' and ''v'' are equivalent if ''u'' + ''v'' = 0. Modulo this equivalence, the versors, their algebra and geometry, represent elliptic space. ==Linear viewpoint== Quaternions may be represented by 2×2 matrices with complex number entries: the place of <math>i, j, k </math> is taken by these arrays: :<math>\begin{pmatrix} i & 0 \\ 0 & -i \end{pmatrix}, \quad \begin{pmatrix} 0 & 1 \\ -1 & 0 \end{pmatrix}, \quad \begin{pmatrix} 0 & i \\ i & 0 \end{pmatrix}.</math> One uses matrix multiplication to verify that these expressions obey the rules of presentation of Q<sub>8</sub>. M(2,C) denotes the full algebra of 2×2 complex matrices, which has eight real dimensions, and sustains a representation of <math>\mathbb{H}</math> as a four-dimensional subalgebra. The linear properties of <math>\mathbb{H}</math> and M(2,C) assure the fidelity of the representation once the copy of Q<sub>8</sub> has been identified. Quaternions, like other associative hypercomplex systems of the 19th century, eventually were viewed as matrix algebras in the 20th century. However, in 1853 Hamilton included biquaternions in his book of ''Lectures on Quaternions''. '''Biquaternions''' are quaternions with complex number coefficients, sometimes called ''complex quaternions''. Biquaternions form an algebra isomorphic to M(2,C). If the rows or columns of a matrix are proportional, then the [[Linear Algebra/Definition of Determinant|determinant]] is zero, and there is no inverse. Nevertheless, such matrices have been used in physical science to represent events on a light-path from the origin. Authors Silberstein and Lanczos refer to this algebra as the biquaternions, but other writers have abandoned the label: Elie Cartan used M(2,C) extensively in ''The Theory of Spinors'' (1938), and Wolfgang Pauli, in his matrix mechanics of the atom, caused himself to be associated with M(2,C). ===Pauli Spin Matrices=== Quaternions are closely related to the Pauli spin matrices of Quantum Mechanics. The Pauli matrices are often denoted as<br /> :<math>\sigma_1=\begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix}</math> , <math>\sigma_2=\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}</math> , <math>\sigma_3=\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}</math> (Where <math>i</math> is the well known quantity <math>\sqrt{-1}</math> of complex numbers) The 2×2 identity matrix is sometimes taken as <math>\sigma_0</math>. Thus <math>S</math>, the real linear span of the matrices <math>\sigma_0</math>, <math>i\sigma_1</math>, <math>i\sigma_2</math> and <math>i\sigma_3</math>, is isomorphic to <math>\mathbb{H}</math>. For example, take this matrix product: :<math>\begin{pmatrix}i & 0 \\ 0 & -i\end{pmatrix} \begin{pmatrix}0 & 1 \\ -1 & 0\end{pmatrix} = \begin{pmatrix}0 & i \\ i & 0\end{pmatrix}</math> Or, equivalently, &nbsp; <math>i\sigma_3 \ i\sigma_2 = i\sigma_1 .</math> All three of these matrices square to the negative of the identity matrix. If we take <math> 1=\sigma_0</math>, <math>i=i\sigma_3</math>, <math>j=i\sigma_2</math>, and <math>k=i\sigma_1</math>, it is easy to see that the span of the these four matrices is "the same as" (that is, isomorphic to) the set of quaternions <math>\mathbb{H}</math>. ==Exercises== # Using the presentation equations of Q<sub>8</sub>, write out the full product of two quaternions. In other words, given <math>q_1=a_1+b_1i+c_1j+d_1k</math> and <math>q_2=a_2+b_2i+c_2j+d_2k</math>, find the components of their product <math>q=q_1q_2 .</math> # Show the composition algebra property <math>(pq)(pq)^* = (p p^*) (q q^*) .</math> Hint: use [[w: Euler's four-square identity]]. ==Axial pencils== [[File:Sheaf_of_Planes.gif|thumb|right|250px|The axis of a pencil is the real axis in the 4-algebra]] Hamilton's quaternions provide a picture of a pencil of complex number planes that fill out his hyperspace. Another pair of pencils provide alternative descriptions of 4-space as made up of planar algebras: The hyperspace is <math>\reals^4</math> with the first coordinate taken as the real line, and as the axis of the various pencils. The Hamilton case uses the sphere of imaginary units :<math>S^2 = \{q \in H : q^2 = -1 \} = \{xi + yj + zk : x^2 + y^2 + z^2 = 1 \} .</math> Any pair of antipodal points on this sphere generates a plane isomorphic to the ordinary complex plane <math>\Complex .</math> The second and third pencils derive from the findings of James Cockle and Arthur Cayley. Cayley set up an arithmetic of matrix multiplication which has expedited modern science. For instance, the so-called imaginary units are represented by <math>\begin{pmatrix}0 & -1 \\ 1 & 0 \end{pmatrix}</math> which has multiplicative square equal to the negative of the identity matrix. But then there is also by <math>\begin{pmatrix}0 & 1 \\ 1 & 0 \end{pmatrix}</math> which generates an algebraic plane distinct from ordinary complex numbers. This algebra [[Associative Composition Algebra/Split-binarions|split-binarions]], has inverse proportion included as a structural feature, such as found in economics or spacetime. In fact, the Lorentz boost is exhibited by a split-binarion multiplication. The inherent relation was recognized in the 19th century by J. Cockle, W.K. Clifford, and A. Macfarlane in the English world and by some Serbians. The second pencil is an imaginary one without linear representation. As Hamilton had a sphere of imaginary units, Macfarlane would have a sphere of hyperbolic units ''u'' with ''u''<sup>2</sup> = +1. The full algebra of split-binarions is <math>A = \{ q = x + y u : x, y \in \reals \}</math> Any pair of elements that are polar opposite on this sphere generate a plane isomorphic to the split-binarions A. The 4-algebra containing this pencil is the '''hyperbolic quaternion''' algebra. As Oliver Heaviside and Willard Gibbs advocated a positive dot product for vectors, they have been associated with hyperbolic quaternions. When this algebra drew attention in the 1890s a "great vector debate" ensued in various publications including ''Nature''. When the failure of the algebra to satisfy the associative law of multiplication was noted, it was realized that no matrix representation would be found. Each plane of the pencil can represent a Lorentz boost. However, rotations of the vector subspace, an operation within the reach of Hamilton's structure, is beyond the means of hyperbolic quaternions, hence the Lorentz group cannot be represented with Macfarlane's algebra. The third pencil arises from both imaginary units and hyperbolic units as found in the ring of [[Abstract Algebra/2x2 real matrices|2x2 real matrices]]. In this figure there must be noted nilpotent matrices such as by <math>\begin{pmatrix}0 & 1 \\ 0 & 0 \end{pmatrix}</math> which correspond to [[Abstract Algebra/Shear and Slope|dual numbers]] in the matrix algebra. Such planes separate the complex and split-binarion planes, and are included in the pencil. The axis of the pencil is the line of matrices that are real multiples of the identity matrix. Over an alternate basis this ring is known as [[Associative Composition Algebra/Split-quaternions|split-quaternions]], and the pencil has three types of planar subrings. == Quaternion algebras == The real numbers are part of Hamilton's quaternions. An objective of abstract algebra is to show algebraic structures in their most general form. The real numbers satisfy the axioms of a field and they have other properties such as order and completeness. Given an arbitrary [[Abstract Algebra/Fields|field]] ''F'', it can be associated with an abstract algebra called a ''quaternion algebra'' as follows: The elements of a quaternion algebra are in the four-dimensional space over ''F'' : &nbsp;''V'' = ''F''<sup> 4</sup>. As in ''F'', there is a multiplicative identity 1 in ''V'', and hence a one-dimensional subspace <math>F \cdot 1.</math> The multiplication <math>\times</math> on ''V'' has the feature that basis vectors of the orthogonal complement of <math>F \cdot 1</math> in ''V'' are anticommutative. More particularly, with i and j perpendicular in this orthogonal complement of <math>F \cdot 1</math>, i j = &minus; j i. With k = i j, and perpendicular to the plane of i and j, associativity of multiplication implies jk = j i j = &minus; i j j = &minus;k j, and k i = i j i = &minus;i k, so k also anticommutes with i and j. The multiplication on ''V'' is determined by multiplication on its basis vectors. That multiplication is not commutative (due to anticommutivity) and includes the negative for each basis vector: <math>B = \{ 1, -1, i, -i, j, -j, k, -k \} \subset V .</math> There are only two non-commutative groups of order eight: the quaternion group Q<sub>8</sub> and the dihedral group of symmetries of a square figure D<sub>4</sub>. Thus, for any field ''F'', there are two quaternion algebras over ''F'' corresponding to the selection of multiplication on ''B'' according to Q<sub>8</sub> or D<sub>4</sub>. === The smallest ones === The finite fields GF(''q'' ) lead to finite quadratic algebras. Here ''q'' is a power of a prime number. Since i ≠ &minus; i in the groups, and since 1 ≡ &minus;1 (mod 2), GF(2) is too small. The field Z<sub>3</sub> is large enough and its quaternion algebras have 81 = 3<sup>4</sup> elements. The two basis-generated groups define multiplication in the algebras. The norms are isotropic quadratic forms since both algebras have null vectors, in the Q<sub>8</sub> case because of the finite characteristic of the field. === Historic incidents === The extension of quaternion theory to ''F'' = '''C''', the complex number plane, was given by Hamilton in his ''Lectures on Quaternions'' (1853).<ref>W. Hamilton (1853) ''Lectures on Quaternions'', [https://archive.org/details/lecturesonquater00hami/page/638/mode/2up Page 639], quaternions with complex number scalars</ref> There was a glitch in an early presentation, with ''F'' being the field of real numbers, and the basis group confused. In 1878 [[w:W. K. Clifford]] nearly described representation of split-quaternions with matrices:<ref>[[w:W. K. Clifford]] (1878) [https://archive.org/details/elementsofdynami01clifiala/page/170/mode/2up ''Elements of Dynamic''], page 170 via Internet Archive</ref> He used ''K'' to express the imaginary unit <math>\begin{pmatrix}0 & 1 \\ -1 & 0 \end{pmatrix}</math>. The only flaw was a missing minus sign in the equation :<math>J K = \begin{pmatrix}0 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix}0 & 1 \\ -1 & 0 \end{pmatrix} = \begin{pmatrix}-1 & 0 \\ 0 & 1 \end{pmatrix} = -I .</math> The inexplicable mistake in a case of a finite subgroup of the general linear group hindered understanding. Some clarity followed from a letter to the editor from [[w:C. G. Knott]]<ref>{{cite journal |first=C.G. |last=Knott |title=Recent Innovations in Vector Theory |journal=Nature |volume=47 |issue=1225 |pages=590–3 |year=1893 |doi=10.1038/047590b0 |bibcode=1893Natur..47R.590. |doi-access=free }} read before the Royal Society of Edinburgh 19 December 1892 and published in ''Proceedings''</ref> 1892) He reaffirmed Hamilton's products in this proposition: :If a 4-algebra on basis <math>\{1,\,i,\,j,\,k\}</math> is associative and off-diagonal products are given by Hamilton's rules, then <math>i^2=-\!1=j^2=k^2</math>. '''Proof:''' :<math>j = ki = (-ji)i = -j(ii)</math>, so <math>i^2 = -1</math>. Cycle the letters <math>i</math>, <math>j</math>, <math>k</math> to obtain <math>i^2=-1=j^2=k^2</math>. Another hitch is the notion of isomorphism of algebras, which should include preserving the field ''F''. Here [[w:Leonard Dickson]] ventured to nullify the difference between the complex algebras ( ''F'' = '''C''' ) over the two basis groups Q<sub>8</sub> and D<sub>4</sub>. He wrote in ''Linear Algebras''<ref>Leonard Dickson (1915) [https://archive.org/details/cu31924001557515/page/n25/mode/2up?q=quaternion Equivalence of complex quaternion and matric algebras], ''Linear Algebras'', page 15</ref> that the complex quaternion and matric algebras were equivalent. There is a real isomorphism between them, but that is not a complex isomorphism preserving the field. Nevertheless, Dickson was one of the first to acknowledge the existence of a four-dimensional, real subalgebra of M(2,'''C''') other than quaternions. So far algebras over a field have been described. When algebras over a [[Abstract Algebra/Rings|ring]] are considered, there are other "quaternion algebras". Clifford used split-binarions for scalars of his biquaternions, an algebra designated ''split-biquaternions''. Several authors use dual numbers as scalars, giving ''dual quaternions''. Another case abandons the Q<sub>8</sub> and D<sub>4</sub> convention for basis-element products. A quasigroup of order 8 and the real field give ''hyperbolic quaternions''. These three auxiliary algebras, using ''quaternion'' in their names, fall outside consideration of standard works using the presumption of an algebra over a field. == References == {{Reflist}} {{Subject|Abstract Algebra}} phbm23z2dozxb4f0xhlmu4utkwrwpfy Artificial Neural Networks/Neural Network Basics 0 138278 4672009 4032916 2026-09-23T23:49:29Z HopefullyTemporaryUsername 3626712 4672009 wikitext text/x-wiki {{ANN/Page}} == Artificial Neural Networks == Artificial Neural Networks, also known as “Artificial neural nets”, “neural nets”, or ANN for short, are a computational tool modeled on the interconnection of the neuron in the nervous systems of the human brain and that of other organisms. Biological Neural Nets (BNN) are the naturally occurring equivalent of the ANN. Both BNN and ANN are network systems constructed from atomic components known as “neurons”. Artificial neural networks are very different from biological networks, although many of the concepts and characteristics of biological systems are faithfully reproduced in the artificial systems. Artificial neural nets are a type of non-linear processing system that is ideally suited for a wide range of tasks, especially tasks where there is no existing algorithm for task completion. ANN can be trained to solve certain problems using a teaching method and sample data. In this way, identically constructed ANN can be used to perform different tasks depending on the training received. With proper training, ANN are capable of generalization, the ability to recognize similarities among different input patterns, especially patterns that have been corrupted by noise. === What Are Neural Nets? === The term “Neural Net” refers to both the biological and artificial variants, although typically the term is used to refer to artificial systems only. Mathematically, neural nets are nonlinear. Each layer represents a non-linear combination of non-linear functions from the previous layer. Each neuron is a multiple-input, multiple-output (MIMO) system that receives signals from the inputs, produces a resultant signal, and transmits that signal to all outputs. Practically, neurons in an ANN are arranged into layers. The first layer that interacts with the environment to receive input is known as the input layer. The final layer that interacts with the output to present the processed data is known as the output layer. Layers between the input and the output layer that do not have any interaction with the environment are known as hidden layers. Increasing the complexity of an ANN, and thus its computational capacity, requires the addition of more hidden layers, and more neurons per layer. Biological neurons are connected in very complicated networks. Some regions of the human brain such as the cerebellum are composed of very regular patterns of neurons. Other regions of the brain, such as the cerebrum have less regular arrangements. A typical biological neural system has millions or billions of cells, each with thousands of interconnections with other neurons. Current artificial systems cannot achieve this level of complexity, and so cannot be used to reproduce the behavior of biological systems exactly. == Processing Elements == In an artificial neural network, neurons can take many forms and are typically referred to as '''Processing Elements''' (PE) to differentiate them from the biological equivalents. The PE are connected into a particular network pattern, with different patterns serving different functional purposes. Unlike biological neurons with chemical interconnections, the PE in artificial systems are electrical only, and may be either analog, digital, or a hybrid. However, to reproduce the effect of the synapse, the connections between PE are assigned multiplicative weights, which can be calibrated or “trained” to produce the proper system output. === McCulloch-Pitts Model === Processing Elements are typically defined in terms of two equations that represent the McCulloch-Pitts model of a neuron: {{eqn|McCulloch-Pitts Model}} :<math>\zeta = \sum_i w_ix_i</math> :<math>y = \sigma(\zeta)</math> Where ζ is the weighted sum of the inputs (the inner product of the input vector and the tap-weight vector), and σ(ζ) is a function of the weighted sum. If we recognize that the weight and input elements form vectors '''w''' and '''x''', the ζ weighted sum becomes a simple dot product: :<math>\zeta = \mathbf{w} \cdot \mathbf {x}</math> [[File:Mcculloch pitts.svg|right|200px]] This may be called either the activation function (in the case of a threshold comparison) or a transfer function. The image to the right shows this relationship diagrammatically. The dotted line in the center of the neuron represents the division between the calculation of the input sum using the weight vector, and the calculation of the output value using the activation function. In an actual artificial neuron, this division may not be made explicitly. The inputs to the network, x, come from an input space and the system outputs are part of the output space. For some networks, the output space Y may be as simple as {0, 1}, or it may be a complex multi-dimensional space. Neural networks tend to have one input per degree of freedom in the input space, and one output per degree of freedom in the output space. The tap weight vector is updated during training by various algorithms. One of the more popular of which is the backpropagation algorithm which we will discuss in more detail later. == Why Use Neural Nets? == Artificial neural nets have a number of properties that make them an attractive alternative to traditional problem-solving techniques. The two main alternatives to using neural nets are to develop an algorithmic solution, and to use an expert system. Algorithmic methods arise when there is sufficient information about the data and the underlying theory. By understanding the data and the theoretical relationship between the data, we can directly calculate unknown solutions from the problem space. Ordinary von Neumann computers can be used to calculate these relationships quickly and efficiently from a numerical algorithm. Expert systems, by contrast, are used in situations where there is insufficient data and theoretical background to create any kind of a reliable problem model. In these cases, the knowledge and rationale of human experts is codified into an expert system. Expert systems emulate the deduction processes of a human expert, by collecting information and traversing the solution space in a directed manner. Expert systems are typically able to perform very well in the absence of an accurate problem model and complete data. However, where sufficient data or an algorithmic solution is available, expert systems are a less than ideal choice. Artificial neural nets are useful for situations where there is an abundance of data, but little underlying theory. The data, which typically arises through extensive experimentation may be non-linear, non-stationary, or chaotic, and so may not be easily modeled. Input-output spaces may be so complex that a reasonable traversal with an expert system is not a satisfactory option. Importantly, neural nets do not require any a priori assumptions about the problem space, not even information about statistical distribution. Though such assumptions are not required, it has been found that the addition of such a priori information as the statistical distribution of the input space can help to speed training. Many mathematical problem models tend to assume that data lies in a standard distribution pattern, such as Gaussian or Maxwell-Boltzmann distributions. Neural networks require no such assumption. During training, the neural network performs the necessary analytical work, which would require non-trivial effort on the part of the analyst if other methods were to be used. == Learning == Learning is a fundamental component to an intelligent system, although a precise definition of learning is hard to produce. In terms of an artificial neural network, learning typically happens during a specific training phase. Once the network has been trained, it enters a production phase where it produces results independently. Training can take on many different forms, using a combination of learning paradigms, learning rules, and learning algorithms. A system which has distinct learning and production phases is known as a static network. Networks which are able to continue learning during production use are known as dynamical systems. A learning paradigm is supervised, unsupervised or a hybrid of the two, and reflects the method in which training data is presented to the neural network. A method that combines supervised and unsupervised training is known as a hybrid method. A learning rule is a model for the types of methods to be used to train the system, and also a goal for what types of results are to be produced. The learning algorithm is the specific mathematical method that is used to update the inter-neuronal synaptic weights during each training iteration. Under each learning rule, there are a variety of possible learning algorithms for use. Most algorithms can only be used with a single learning rule. Learning rules and learning algorithms can typically be used with either supervised or unsupervised learning paradigms, however, and each will produce a different effect. Overtraining is a problem that arises when too many training examples are provided, and the system becomes incapable of useful generalization. This can also occur when there are too many neurons in the network and the capacity for computation exceeds the dimensionality of the input space. During training, care must be taken not to provide too many input examples and different numbers of training examples could produce very different results in the quality and robustness of the network. == Network Parameters == There are a number of different parameters that must be decided upon when designing a neural network. Among these parameters are the number of layers, the number of neurons per layer, the number of training iterations, et cetera. Some of the more important parameters in terms of training and network capacity are the number of hidden neurons, the learning rate and the momentum parameter. === Number of neurons in the hidden layer === Hidden neurons are the neurons that are neither in the input layer nor the output layer. These neurons are essentially hidden from view, and their number and organization can typically be treated as a black box to people who are interfacing with the system. Using additional layers of hidden neurons enables greater processing power and system flexibility. This additional flexibility comes at the cost of additional complexity in the training algorithm. Having too many hidden neurons is analogous to a system of equations with more equations than there are free variables: the system is over specified, and is incapable of generalization. Having too few hidden neurons, conversely, can prevent the system from properly fitting the input data, and reduces the robustness of the system. [[File:Neural network.svg|center|400px]] [[File:Artificial neural network.svg|center|400px]] Data type: Integer Domain: [1, ∞) Typical value: 8 Meaning: Number of neurons in the hidden layer (additional layer to the input and output layers, not connected externally). === Learning Rate === Data type: Real Domain: [0, 1] Typical value: 0.3 Meaning: Learning Rate. Training parameter that controls the size of weight and bias changes in learning of the training algorithm. === Momentum === Data type: Real Domain: [0, 1] Typical value: 0.9 Meaning: Momentum simply adds a fraction m of the previous weight update to the current one. The momentum parameter is used to prevent the system from converging to a local minimum or saddle point. A high momentum parameter can also help to increase the speed of convergence of the system. However, setting the momentum parameter too high can create a risk of overshooting the minimum, which can cause the system to become unstable. A momentum coefficient that is too low cannot reliably avoid local minima, and can also slow down the training of the system. === Training type === Data type: Integer Domain: [0, 1] Typical value: 1 Meaning: 0 = train by epoch, 1 = train by minimum error === Epoch === Data type: Integer Domain: [1, ∞] Typical value: 5000000 Meaning: Determines when training will stop once the number of iterations exceeds epochs. When training by minimum error, this represents the maximum number of iterations. === Minimum Error === Data type: Real Domain: [0, 0.5] Typical value: 0.01 Meaning: Minimum mean square error of the epoch. Square root of the sum of squared differences between the network targets and actual outputs divided by number of patterns (only for training by minimum error). == Examples and realizations == #[https://github.com/A1essandro/neural-network Repository] on GitHub. 9qoxxn7o9prrvbnq3yfx48uh9o3tsdi Wikibooks:Reading room/Administrative Assistance 4 140081 4671956 4671931 2026-09-23T12:13:30Z Xania 40302 /* CU request */ 4671956 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{shortcut|WB:AN|WB:AA}} {{TOC left}} {{User:MiszaBot/config |archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s |algo = old(14d) |counter = 1 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{ombox|type=content|text='''To request a rename or usurpation''', go to the global request page at Meta [[meta:SRUC|here]].<br />''Please do not post those requests here!''}} {{Clear}} Welcome to the '''Administrative Assistance reading room'''. You can request assistance from [[WB:ADMIN|administrators]] for handling a variety of problems here and alert them about problems which may require special actions not normally used during regular content editing. Please be patient as administrators are often quite busy with either their own projects or trying to perform general maintenance and cleanup. You can deal with most vandalism yourself: [[Wikibooks:Dealing with vandalism|fix it]], then [[Wikibooks:Templates/User_notices|warn the user]]. If there is repeated vandalism by one user, lots of vandalism on a single page, or vandalism from many users, tell an admin here, or in [irc://irc.freenode.net/wikibooks #wikibooks] (say <code>!admin</code> to get attention). For more general questions and assistance that doesn't require an administrator, please use the [[WB:HELP|Assistance Reading Room]]. {{clear}} [[Category:Reading room]] == Ridhisharma1999 reported by MathXplore == * {{userlinks|Ridhisharma1999}} Link spam, [[Special:AbuseLog/315435]] <!-- USERREPORTED:/Ridhisharma1999/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:01, 9 September 2026 (UTC) :{{Done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 12:02, 9 September 2026 (UTC) == Thenaoriudaipur reported by MathXplore == * {{userlinks|Thenaoriudaipur}} Link spam, [[Special:AbuseLog/315473]] <!-- USERREPORTED:/Thenaoriudaipur/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:47, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == Networkkingss reported by MathXplore == * {{userlinks|Networkkingss}} Link spam, [[Special:AbuseLog/315458]] <!-- USERREPORTED:/Networkkingss/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:50, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == ~2026-49226-92 reported by MathXplore == * {{anonlinks|~2026-49226-92}} Vandalism <!-- USERREPORTED:/~2026-49226-92/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:57, 10 September 2026 (UTC) : {{done}}. I also nuked all pages created by this user and their connected temporary accounts based on their associated IP(s). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:48, 10 September 2026 (UTC) == ~2026-49632-08 reported by MathXplore == * {{anonlinks|~2026-49632-08}} Spam <!-- USERREPORTED:/~2026-49632-08/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:08, 13 September 2026 (UTC) :{{done}} [[User:JackPotte|JackPotte]] ([[User talk:JackPotte|discuss]] • [[Special:Contributions/JackPotte|contribs]]) 06:39, 13 September 2026 (UTC) == Happyherbal26 reported by MathXplore == * {{userlinks|Happyherbal26}} Link spam, [[Special:AbuseLog/315518]] <!-- USERREPORTED:/Happyherbal26/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Shahadotdl reported by MathXplore == * {{userlinks|Shahadotdl}} Link spam, [[Special:AbuseLog/315516]] <!-- USERREPORTED:/Shahadotdl/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Sonarbanglahc reported by MathXplore == * {{userlinks|Sonarbanglahc}} Spam <!-- USERREPORTED:/Sonarbanglahc/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:41, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:47, 15 September 2026 (UTC) == Mehedii1234 reported by MathXplore == * {{userlinks|Mehedii1234}} Spam <!-- USERREPORTED:/Mehedii1234/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:42, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 15 September 2026 (UTC) == BhardwajGardening reported by MathXplore == * {{userlinks|BhardwajGardening}} Link spam, [[Special:AbuseLog/315583]] <!-- USERREPORTED:/BhardwajGardening/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:02, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:36, 17 September 2026 (UTC) == Manusheikh reported by MathXplore == * {{userlinks|Manusheikh}} Link spam, [[Special:AbuseLog/315575]] <!-- USERREPORTED:/Manusheikh/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:03, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Wrankerseo reported by MathXplore == * {{userlinks|Wrankerseo}} Link spam, [[Special:AbuseLog/315564]], [[Special:AbuseLog/315567]], [[Special:AbuseLog/315563]] <!-- USERREPORTED:/Wrankerseo/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:05, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Mscdubai reported by MathXplore == * {{userlinks|Mscdubai}} Spam <!-- USERREPORTED:/Mscdubai/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:28, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == Hasbaticom reported by MathXplore == * {{userlinks|Hasbaticom}} Spam <!-- USERREPORTED:/Hasbaticom/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 11:40, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == [[User:AAASecurityGuard]] reported by TechVindicator == Spam [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 10:03, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == AAASecurityGuard reported by MathXplore == * {{userlinks|AAASecurityGuard}} Spam <!-- USERREPORTED:/AAASecurityGuard/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:20, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == [[Wikibooks:AI For Beginners]] == '''Reason for reporting:''' Wrong title, renaming needed ([[AI For Beginners]]). [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:20, 22 September 2026 (UTC) :{{done|Moved to the correct namespace}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:17, 22 September 2026 (UTC) ::{{done|Ultimately deleted}} per [[WB:AI]]. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:51, 22 September 2026 (UTC) == CU request == {{ping|MarcGarver|Xania}} According to [[Special:Diff/4671813]], User:Sisterian ([[Special:Contributions/Sisterian]]) has been using genAI/LLMs for their contributions. User:Pamela Talemwa ([[Special:Contributions/Pamela_Talemwa]]) & User:Sisterian overlap at [[A Young Reader's Guide to a Healthy Environment]] ([https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&diff=prev&oldid=4671755&diffmode=source], [https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&oldid=4665328]). What do our admins and CUs think about this? [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:11, 23 September 2026 (UTC) :[[User:Sisterian]] has also created a page in another person's userspace, [[User:Samah2025/sandbox/A Young Girl’s Guide to Menstrual Health and Wellbeing]], so I will add [[User:Samah2025]] to the list. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:45, 23 September 2026 (UTC) :Hello, @[[User:MarcGarver|MarcGarver]], @[[User:Xania|Xania]], @[[User:TechVindicator|TechVindicator]]. I have been supporting a number of trainees with Wikibooks editing and its looks like a lot more was done outside of the guidance I provided. I am going to look into those contributions and rectify the underlying issues. Thank you. [[User:Sisterian|Sisterian]] ([[User talk:Sisterian|discuss]] • [[Special:Contributions/Sisterian|contribs]]) 08:52, 23 September 2026 (UTC) : OK --[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 12:13, 23 September 2026 (UTC) ob13ecy04tbrjfo161jafq8069mtcbw 4672051 4671956 2026-09-24T08:10:31Z ArchiverBot 1227662 Bot: Archiving 1 thread (older than 14 days) to [[Wikibooks:Reading room/Administrative Assistance/Archives/2026/September]] 4672051 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{shortcut|WB:AN|WB:AA}} {{TOC left}} {{User:MiszaBot/config |archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s |algo = old(14d) |counter = 1 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{ombox|type=content|text='''To request a rename or usurpation''', go to the global request page at Meta [[meta:SRUC|here]].<br />''Please do not post those requests here!''}} {{Clear}} Welcome to the '''Administrative Assistance reading room'''. You can request assistance from [[WB:ADMIN|administrators]] for handling a variety of problems here and alert them about problems which may require special actions not normally used during regular content editing. Please be patient as administrators are often quite busy with either their own projects or trying to perform general maintenance and cleanup. You can deal with most vandalism yourself: [[Wikibooks:Dealing with vandalism|fix it]], then [[Wikibooks:Templates/User_notices|warn the user]]. If there is repeated vandalism by one user, lots of vandalism on a single page, or vandalism from many users, tell an admin here, or in [irc://irc.freenode.net/wikibooks #wikibooks] (say <code>!admin</code> to get attention). For more general questions and assistance that doesn't require an administrator, please use the [[WB:HELP|Assistance Reading Room]]. {{clear}} [[Category:Reading room]] == Thenaoriudaipur reported by MathXplore == * {{userlinks|Thenaoriudaipur}} Link spam, [[Special:AbuseLog/315473]] <!-- USERREPORTED:/Thenaoriudaipur/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:47, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == Networkkingss reported by MathXplore == * {{userlinks|Networkkingss}} Link spam, [[Special:AbuseLog/315458]] <!-- USERREPORTED:/Networkkingss/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:50, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == ~2026-49226-92 reported by MathXplore == * {{anonlinks|~2026-49226-92}} Vandalism <!-- USERREPORTED:/~2026-49226-92/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:57, 10 September 2026 (UTC) : {{done}}. I also nuked all pages created by this user and their connected temporary accounts based on their associated IP(s). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:48, 10 September 2026 (UTC) == ~2026-49632-08 reported by MathXplore == * {{anonlinks|~2026-49632-08}} Spam <!-- USERREPORTED:/~2026-49632-08/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:08, 13 September 2026 (UTC) :{{done}} [[User:JackPotte|JackPotte]] ([[User talk:JackPotte|discuss]] • [[Special:Contributions/JackPotte|contribs]]) 06:39, 13 September 2026 (UTC) == Happyherbal26 reported by MathXplore == * {{userlinks|Happyherbal26}} Link spam, [[Special:AbuseLog/315518]] <!-- USERREPORTED:/Happyherbal26/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Shahadotdl reported by MathXplore == * {{userlinks|Shahadotdl}} Link spam, [[Special:AbuseLog/315516]] <!-- USERREPORTED:/Shahadotdl/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Sonarbanglahc reported by MathXplore == * {{userlinks|Sonarbanglahc}} Spam <!-- USERREPORTED:/Sonarbanglahc/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:41, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:47, 15 September 2026 (UTC) == Mehedii1234 reported by MathXplore == * {{userlinks|Mehedii1234}} Spam <!-- USERREPORTED:/Mehedii1234/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:42, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 15 September 2026 (UTC) == BhardwajGardening reported by MathXplore == * {{userlinks|BhardwajGardening}} Link spam, [[Special:AbuseLog/315583]] <!-- USERREPORTED:/BhardwajGardening/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:02, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:36, 17 September 2026 (UTC) == Manusheikh reported by MathXplore == * {{userlinks|Manusheikh}} Link spam, [[Special:AbuseLog/315575]] <!-- USERREPORTED:/Manusheikh/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:03, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Wrankerseo reported by MathXplore == * {{userlinks|Wrankerseo}} Link spam, [[Special:AbuseLog/315564]], [[Special:AbuseLog/315567]], [[Special:AbuseLog/315563]] <!-- USERREPORTED:/Wrankerseo/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:05, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Mscdubai reported by MathXplore == * {{userlinks|Mscdubai}} Spam <!-- USERREPORTED:/Mscdubai/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:28, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == Hasbaticom reported by MathXplore == * {{userlinks|Hasbaticom}} Spam <!-- USERREPORTED:/Hasbaticom/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 11:40, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == [[User:AAASecurityGuard]] reported by TechVindicator == Spam [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 10:03, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == AAASecurityGuard reported by MathXplore == * {{userlinks|AAASecurityGuard}} Spam <!-- USERREPORTED:/AAASecurityGuard/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:20, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == [[Wikibooks:AI For Beginners]] == '''Reason for reporting:''' Wrong title, renaming needed ([[AI For Beginners]]). [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:20, 22 September 2026 (UTC) :{{done|Moved to the correct namespace}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:17, 22 September 2026 (UTC) ::{{done|Ultimately deleted}} per [[WB:AI]]. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:51, 22 September 2026 (UTC) == CU request == {{ping|MarcGarver|Xania}} According to [[Special:Diff/4671813]], User:Sisterian ([[Special:Contributions/Sisterian]]) has been using genAI/LLMs for their contributions. User:Pamela Talemwa ([[Special:Contributions/Pamela_Talemwa]]) & User:Sisterian overlap at [[A Young Reader's Guide to a Healthy Environment]] ([https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&diff=prev&oldid=4671755&diffmode=source], [https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&oldid=4665328]). What do our admins and CUs think about this? [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:11, 23 September 2026 (UTC) :[[User:Sisterian]] has also created a page in another person's userspace, [[User:Samah2025/sandbox/A Young Girl’s Guide to Menstrual Health and Wellbeing]], so I will add [[User:Samah2025]] to the list. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:45, 23 September 2026 (UTC) :Hello, @[[User:MarcGarver|MarcGarver]], @[[User:Xania|Xania]], @[[User:TechVindicator|TechVindicator]]. I have been supporting a number of trainees with Wikibooks editing and its looks like a lot more was done outside of the guidance I provided. I am going to look into those contributions and rectify the underlying issues. Thank you. [[User:Sisterian|Sisterian]] ([[User talk:Sisterian|discuss]] • [[Special:Contributions/Sisterian|contribs]]) 08:52, 23 September 2026 (UTC) : OK --[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 12:13, 23 September 2026 (UTC) s4yehlewple8xfhzizmlj67q9y880cz 4672112 4672051 2026-09-24T11:05:09Z TechVindicator 3626296 Reporting DhaanishChennai123 4672112 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{shortcut|WB:AN|WB:AA}} {{TOC left}} {{User:MiszaBot/config |archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s |algo = old(14d) |counter = 1 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{ombox|type=content|text='''To request a rename or usurpation''', go to the global request page at Meta [[meta:SRUC|here]].<br />''Please do not post those requests here!''}} {{Clear}} Welcome to the '''Administrative Assistance reading room'''. You can request assistance from [[WB:ADMIN|administrators]] for handling a variety of problems here and alert them about problems which may require special actions not normally used during regular content editing. Please be patient as administrators are often quite busy with either their own projects or trying to perform general maintenance and cleanup. You can deal with most vandalism yourself: [[Wikibooks:Dealing with vandalism|fix it]], then [[Wikibooks:Templates/User_notices|warn the user]]. If there is repeated vandalism by one user, lots of vandalism on a single page, or vandalism from many users, tell an admin here, or in [irc://irc.freenode.net/wikibooks #wikibooks] (say <code>!admin</code> to get attention). For more general questions and assistance that doesn't require an administrator, please use the [[WB:HELP|Assistance Reading Room]]. {{clear}} [[Category:Reading room]] == Thenaoriudaipur reported by MathXplore == * {{userlinks|Thenaoriudaipur}} Link spam, [[Special:AbuseLog/315473]] <!-- USERREPORTED:/Thenaoriudaipur/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:47, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == Networkkingss reported by MathXplore == * {{userlinks|Networkkingss}} Link spam, [[Special:AbuseLog/315458]] <!-- USERREPORTED:/Networkkingss/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:50, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == ~2026-49226-92 reported by MathXplore == * {{anonlinks|~2026-49226-92}} Vandalism <!-- USERREPORTED:/~2026-49226-92/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:57, 10 September 2026 (UTC) : {{done}}. I also nuked all pages created by this user and their connected temporary accounts based on their associated IP(s). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:48, 10 September 2026 (UTC) == ~2026-49632-08 reported by MathXplore == * {{anonlinks|~2026-49632-08}} Spam <!-- USERREPORTED:/~2026-49632-08/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:08, 13 September 2026 (UTC) :{{done}} [[User:JackPotte|JackPotte]] ([[User talk:JackPotte|discuss]] • [[Special:Contributions/JackPotte|contribs]]) 06:39, 13 September 2026 (UTC) == Happyherbal26 reported by MathXplore == * {{userlinks|Happyherbal26}} Link spam, [[Special:AbuseLog/315518]] <!-- USERREPORTED:/Happyherbal26/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Shahadotdl reported by MathXplore == * {{userlinks|Shahadotdl}} Link spam, [[Special:AbuseLog/315516]] <!-- USERREPORTED:/Shahadotdl/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Sonarbanglahc reported by MathXplore == * {{userlinks|Sonarbanglahc}} Spam <!-- USERREPORTED:/Sonarbanglahc/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:41, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:47, 15 September 2026 (UTC) == Mehedii1234 reported by MathXplore == * {{userlinks|Mehedii1234}} Spam <!-- USERREPORTED:/Mehedii1234/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:42, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 15 September 2026 (UTC) == BhardwajGardening reported by MathXplore == * {{userlinks|BhardwajGardening}} Link spam, [[Special:AbuseLog/315583]] <!-- USERREPORTED:/BhardwajGardening/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:02, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:36, 17 September 2026 (UTC) == Manusheikh reported by MathXplore == * {{userlinks|Manusheikh}} Link spam, [[Special:AbuseLog/315575]] <!-- USERREPORTED:/Manusheikh/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:03, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Wrankerseo reported by MathXplore == * {{userlinks|Wrankerseo}} Link spam, [[Special:AbuseLog/315564]], [[Special:AbuseLog/315567]], [[Special:AbuseLog/315563]] <!-- USERREPORTED:/Wrankerseo/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:05, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Mscdubai reported by MathXplore == * {{userlinks|Mscdubai}} Spam <!-- USERREPORTED:/Mscdubai/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:28, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == Hasbaticom reported by MathXplore == * {{userlinks|Hasbaticom}} Spam <!-- USERREPORTED:/Hasbaticom/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 11:40, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == [[User:AAASecurityGuard]] reported by TechVindicator == Spam [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 10:03, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == AAASecurityGuard reported by MathXplore == * {{userlinks|AAASecurityGuard}} Spam <!-- USERREPORTED:/AAASecurityGuard/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:20, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == [[Wikibooks:AI For Beginners]] == '''Reason for reporting:''' Wrong title, renaming needed ([[AI For Beginners]]). [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:20, 22 September 2026 (UTC) :{{done|Moved to the correct namespace}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:17, 22 September 2026 (UTC) ::{{done|Ultimately deleted}} per [[WB:AI]]. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:51, 22 September 2026 (UTC) == CU request == {{ping|MarcGarver|Xania}} According to [[Special:Diff/4671813]], User:Sisterian ([[Special:Contributions/Sisterian]]) has been using genAI/LLMs for their contributions. User:Pamela Talemwa ([[Special:Contributions/Pamela_Talemwa]]) & User:Sisterian overlap at [[A Young Reader's Guide to a Healthy Environment]] ([https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&diff=prev&oldid=4671755&diffmode=source], [https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&oldid=4665328]). What do our admins and CUs think about this? [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:11, 23 September 2026 (UTC) :[[User:Sisterian]] has also created a page in another person's userspace, [[User:Samah2025/sandbox/A Young Girl’s Guide to Menstrual Health and Wellbeing]], so I will add [[User:Samah2025]] to the list. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:45, 23 September 2026 (UTC) :Hello, @[[User:MarcGarver|MarcGarver]], @[[User:Xania|Xania]], @[[User:TechVindicator|TechVindicator]]. I have been supporting a number of trainees with Wikibooks editing and its looks like a lot more was done outside of the guidance I provided. I am going to look into those contributions and rectify the underlying issues. Thank you. [[User:Sisterian|Sisterian]] ([[User talk:Sisterian|discuss]] • [[Special:Contributions/Sisterian|contribs]]) 08:52, 23 September 2026 (UTC) : OK --[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 12:13, 23 September 2026 (UTC) == DhaanishChennai123 reported by TechVindicator == * {{userlinks|DhaanishChennai123}} Spam <!-- USERREPORTED:/DhaanishChennai123/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 11:05, 24 September 2026 (UTC) cow8qi972d0gfq89nys05vdv8jqia50 4672113 4672112 2026-09-24T11:05:13Z TechVindicator 3626296 Reporting DhaanishChennai123 4672113 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{shortcut|WB:AN|WB:AA}} {{TOC left}} {{User:MiszaBot/config |archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s |algo = old(14d) |counter = 1 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{ombox|type=content|text='''To request a rename or usurpation''', go to the global request page at Meta [[meta:SRUC|here]].<br />''Please do not post those requests here!''}} {{Clear}} Welcome to the '''Administrative Assistance reading room'''. You can request assistance from [[WB:ADMIN|administrators]] for handling a variety of problems here and alert them about problems which may require special actions not normally used during regular content editing. Please be patient as administrators are often quite busy with either their own projects or trying to perform general maintenance and cleanup. You can deal with most vandalism yourself: [[Wikibooks:Dealing with vandalism|fix it]], then [[Wikibooks:Templates/User_notices|warn the user]]. If there is repeated vandalism by one user, lots of vandalism on a single page, or vandalism from many users, tell an admin here, or in [irc://irc.freenode.net/wikibooks #wikibooks] (say <code>!admin</code> to get attention). For more general questions and assistance that doesn't require an administrator, please use the [[WB:HELP|Assistance Reading Room]]. {{clear}} [[Category:Reading room]] == Thenaoriudaipur reported by MathXplore == * {{userlinks|Thenaoriudaipur}} Link spam, [[Special:AbuseLog/315473]] <!-- USERREPORTED:/Thenaoriudaipur/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:47, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == Networkkingss reported by MathXplore == * {{userlinks|Networkkingss}} Link spam, [[Special:AbuseLog/315458]] <!-- USERREPORTED:/Networkkingss/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:50, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == ~2026-49226-92 reported by MathXplore == * {{anonlinks|~2026-49226-92}} Vandalism <!-- USERREPORTED:/~2026-49226-92/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:57, 10 September 2026 (UTC) : {{done}}. I also nuked all pages created by this user and their connected temporary accounts based on their associated IP(s). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:48, 10 September 2026 (UTC) == ~2026-49632-08 reported by MathXplore == * {{anonlinks|~2026-49632-08}} Spam <!-- USERREPORTED:/~2026-49632-08/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:08, 13 September 2026 (UTC) :{{done}} [[User:JackPotte|JackPotte]] ([[User talk:JackPotte|discuss]] • [[Special:Contributions/JackPotte|contribs]]) 06:39, 13 September 2026 (UTC) == Happyherbal26 reported by MathXplore == * {{userlinks|Happyherbal26}} Link spam, [[Special:AbuseLog/315518]] <!-- USERREPORTED:/Happyherbal26/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Shahadotdl reported by MathXplore == * {{userlinks|Shahadotdl}} Link spam, [[Special:AbuseLog/315516]] <!-- USERREPORTED:/Shahadotdl/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Sonarbanglahc reported by MathXplore == * {{userlinks|Sonarbanglahc}} Spam <!-- USERREPORTED:/Sonarbanglahc/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:41, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:47, 15 September 2026 (UTC) == Mehedii1234 reported by MathXplore == * {{userlinks|Mehedii1234}} Spam <!-- USERREPORTED:/Mehedii1234/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:42, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 15 September 2026 (UTC) == BhardwajGardening reported by MathXplore == * {{userlinks|BhardwajGardening}} Link spam, [[Special:AbuseLog/315583]] <!-- USERREPORTED:/BhardwajGardening/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:02, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:36, 17 September 2026 (UTC) == Manusheikh reported by MathXplore == * {{userlinks|Manusheikh}} Link spam, [[Special:AbuseLog/315575]] <!-- USERREPORTED:/Manusheikh/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:03, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Wrankerseo reported by MathXplore == * {{userlinks|Wrankerseo}} Link spam, [[Special:AbuseLog/315564]], [[Special:AbuseLog/315567]], [[Special:AbuseLog/315563]] <!-- USERREPORTED:/Wrankerseo/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:05, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Mscdubai reported by MathXplore == * {{userlinks|Mscdubai}} Spam <!-- USERREPORTED:/Mscdubai/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:28, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == Hasbaticom reported by MathXplore == * {{userlinks|Hasbaticom}} Spam <!-- USERREPORTED:/Hasbaticom/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 11:40, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == [[User:AAASecurityGuard]] reported by TechVindicator == Spam [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 10:03, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == AAASecurityGuard reported by MathXplore == * {{userlinks|AAASecurityGuard}} Spam <!-- USERREPORTED:/AAASecurityGuard/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:20, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == [[Wikibooks:AI For Beginners]] == '''Reason for reporting:''' Wrong title, renaming needed ([[AI For Beginners]]). [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:20, 22 September 2026 (UTC) :{{done|Moved to the correct namespace}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:17, 22 September 2026 (UTC) ::{{done|Ultimately deleted}} per [[WB:AI]]. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:51, 22 September 2026 (UTC) == CU request == {{ping|MarcGarver|Xania}} According to [[Special:Diff/4671813]], User:Sisterian ([[Special:Contributions/Sisterian]]) has been using genAI/LLMs for their contributions. User:Pamela Talemwa ([[Special:Contributions/Pamela_Talemwa]]) & User:Sisterian overlap at [[A Young Reader's Guide to a Healthy Environment]] ([https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&diff=prev&oldid=4671755&diffmode=source], [https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&oldid=4665328]). What do our admins and CUs think about this? [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:11, 23 September 2026 (UTC) :[[User:Sisterian]] has also created a page in another person's userspace, [[User:Samah2025/sandbox/A Young Girl’s Guide to Menstrual Health and Wellbeing]], so I will add [[User:Samah2025]] to the list. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:45, 23 September 2026 (UTC) :Hello, @[[User:MarcGarver|MarcGarver]], @[[User:Xania|Xania]], @[[User:TechVindicator|TechVindicator]]. I have been supporting a number of trainees with Wikibooks editing and its looks like a lot more was done outside of the guidance I provided. I am going to look into those contributions and rectify the underlying issues. Thank you. [[User:Sisterian|Sisterian]] ([[User talk:Sisterian|discuss]] • [[Special:Contributions/Sisterian|contribs]]) 08:52, 23 September 2026 (UTC) : OK --[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 12:13, 23 September 2026 (UTC) == DhaanishChennai123 reported by TechVindicator == * {{userlinks|DhaanishChennai123}} Spam <!-- USERREPORTED:/DhaanishChennai123/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 11:05, 24 September 2026 (UTC) == DhaanishChennai123 reported by TechVindicator == * {{userlinks|DhaanishChennai123}} Spam <!-- USERREPORTED:/DhaanishChennai123/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 11:05, 24 September 2026 (UTC) 94ubwruh8uxcprpnfskgmrosiqr8mdm 4672114 4672113 2026-09-24T11:06:48Z TechVindicator 3626296 Undid revision [[Special:Diff/4672113|4672113]] by [[Special:Contributions/TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]]) 4672114 wikitext text/x-wiki __NEWSECTIONLINK__ {{Discussion Rooms}} {{shortcut|WB:AN|WB:AA}} {{TOC left}} {{User:MiszaBot/config |archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s |algo = old(14d) |counter = 1 |minthreadstoarchive = 1 |minthreadsleft = 1 }} {{ombox|type=content|text='''To request a rename or usurpation''', go to the global request page at Meta [[meta:SRUC|here]].<br />''Please do not post those requests here!''}} {{Clear}} Welcome to the '''Administrative Assistance reading room'''. You can request assistance from [[WB:ADMIN|administrators]] for handling a variety of problems here and alert them about problems which may require special actions not normally used during regular content editing. Please be patient as administrators are often quite busy with either their own projects or trying to perform general maintenance and cleanup. You can deal with most vandalism yourself: [[Wikibooks:Dealing with vandalism|fix it]], then [[Wikibooks:Templates/User_notices|warn the user]]. If there is repeated vandalism by one user, lots of vandalism on a single page, or vandalism from many users, tell an admin here, or in [irc://irc.freenode.net/wikibooks #wikibooks] (say <code>!admin</code> to get attention). For more general questions and assistance that doesn't require an administrator, please use the [[WB:HELP|Assistance Reading Room]]. {{clear}} [[Category:Reading room]] == Thenaoriudaipur reported by MathXplore == * {{userlinks|Thenaoriudaipur}} Link spam, [[Special:AbuseLog/315473]] <!-- USERREPORTED:/Thenaoriudaipur/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:47, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == Networkkingss reported by MathXplore == * {{userlinks|Networkkingss}} Link spam, [[Special:AbuseLog/315458]] <!-- USERREPORTED:/Networkkingss/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:50, 10 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:49, 10 September 2026 (UTC) == ~2026-49226-92 reported by MathXplore == * {{anonlinks|~2026-49226-92}} Vandalism <!-- USERREPORTED:/~2026-49226-92/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:57, 10 September 2026 (UTC) : {{done}}. I also nuked all pages created by this user and their connected temporary accounts based on their associated IP(s). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:48, 10 September 2026 (UTC) == ~2026-49632-08 reported by MathXplore == * {{anonlinks|~2026-49632-08}} Spam <!-- USERREPORTED:/~2026-49632-08/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:08, 13 September 2026 (UTC) :{{done}} [[User:JackPotte|JackPotte]] ([[User talk:JackPotte|discuss]] • [[Special:Contributions/JackPotte|contribs]]) 06:39, 13 September 2026 (UTC) == Happyherbal26 reported by MathXplore == * {{userlinks|Happyherbal26}} Link spam, [[Special:AbuseLog/315518]] <!-- USERREPORTED:/Happyherbal26/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Shahadotdl reported by MathXplore == * {{userlinks|Shahadotdl}} Link spam, [[Special:AbuseLog/315516]] <!-- USERREPORTED:/Shahadotdl/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 14 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 14:02, 14 September 2026 (UTC) == Sonarbanglahc reported by MathXplore == * {{userlinks|Sonarbanglahc}} Spam <!-- USERREPORTED:/Sonarbanglahc/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:41, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:47, 15 September 2026 (UTC) == Mehedii1234 reported by MathXplore == * {{userlinks|Mehedii1234}} Spam <!-- USERREPORTED:/Mehedii1234/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:42, 15 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 15 September 2026 (UTC) == BhardwajGardening reported by MathXplore == * {{userlinks|BhardwajGardening}} Link spam, [[Special:AbuseLog/315583]] <!-- USERREPORTED:/BhardwajGardening/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:02, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:36, 17 September 2026 (UTC) == Manusheikh reported by MathXplore == * {{userlinks|Manusheikh}} Link spam, [[Special:AbuseLog/315575]] <!-- USERREPORTED:/Manusheikh/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:03, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Wrankerseo reported by MathXplore == * {{userlinks|Wrankerseo}} Link spam, [[Special:AbuseLog/315564]], [[Special:AbuseLog/315567]], [[Special:AbuseLog/315563]] <!-- USERREPORTED:/Wrankerseo/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:05, 17 September 2026 (UTC) :{{done|Blocked}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:35, 17 September 2026 (UTC) == Mscdubai reported by MathXplore == * {{userlinks|Mscdubai}} Spam <!-- USERREPORTED:/Mscdubai/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:28, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == Hasbaticom reported by MathXplore == * {{userlinks|Hasbaticom}} Spam <!-- USERREPORTED:/Hasbaticom/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 11:40, 19 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:44, 21 September 2026 (UTC) == [[User:AAASecurityGuard]] reported by TechVindicator == Spam [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 10:03, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == AAASecurityGuard reported by MathXplore == * {{userlinks|AAASecurityGuard}} Spam <!-- USERREPORTED:/AAASecurityGuard/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:20, 22 September 2026 (UTC) :{{done|Globally locked and blocked}} [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:18, 22 September 2026 (UTC) == [[Wikibooks:AI For Beginners]] == '''Reason for reporting:''' Wrong title, renaming needed ([[AI For Beginners]]). [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:20, 22 September 2026 (UTC) :{{done|Moved to the correct namespace}} —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:17, 22 September 2026 (UTC) ::{{done|Ultimately deleted}} per [[WB:AI]]. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:51, 22 September 2026 (UTC) == CU request == {{ping|MarcGarver|Xania}} According to [[Special:Diff/4671813]], User:Sisterian ([[Special:Contributions/Sisterian]]) has been using genAI/LLMs for their contributions. User:Pamela Talemwa ([[Special:Contributions/Pamela_Talemwa]]) & User:Sisterian overlap at [[A Young Reader's Guide to a Healthy Environment]] ([https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&diff=prev&oldid=4671755&diffmode=source], [https://en.wikibooks.org/w/index.php?title=A_Young_Reader%27s_Guide_to_a_Healthy_Environment&oldid=4665328]). What do our admins and CUs think about this? [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:11, 23 September 2026 (UTC) :[[User:Sisterian]] has also created a page in another person's userspace, [[User:Samah2025/sandbox/A Young Girl’s Guide to Menstrual Health and Wellbeing]], so I will add [[User:Samah2025]] to the list. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:45, 23 September 2026 (UTC) :Hello, @[[User:MarcGarver|MarcGarver]], @[[User:Xania|Xania]], @[[User:TechVindicator|TechVindicator]]. I have been supporting a number of trainees with Wikibooks editing and its looks like a lot more was done outside of the guidance I provided. I am going to look into those contributions and rectify the underlying issues. Thank you. [[User:Sisterian|Sisterian]] ([[User talk:Sisterian|discuss]] • [[Special:Contributions/Sisterian|contribs]]) 08:52, 23 September 2026 (UTC) : OK --[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 12:13, 23 September 2026 (UTC) == DhaanishChennai123 reported by TechVindicator == * {{userlinks|DhaanishChennai123}} Spam <!-- USERREPORTED:/DhaanishChennai123/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 11:05, 24 September 2026 (UTC) cow8qi972d0gfq89nys05vdv8jqia50 Introduction to Physical Science/A.2 0 154264 4672058 4581614 2026-09-24T08:24:04Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672058 wikitext text/x-wiki {{class project}} =Practice Problems Exam 2= '''Dear Users - please note students are currently working on these problem sets - please do not edit until their signature tag has been removed''' --[[User:J.M.Pearce|J.M.Pearce]] ([[User talk:J.M.Pearce|talk]]) 23:25, 3 April 2008 (UTC) Students - please put in two questions for the review and work out entire example. Put your answers in boxes by putting a space before it. Make sure to include all equations and units. Make sure to tag your question with <nowiki> --~~~~ </nowiki> {{Info|[[meta:Help:Displaying a formula|TeX markup]] can help reduce ambiguity in your equations, and makes math easier to read. Learn something new!}} Thank you. == Waves == *A '''Sound wave''' from a tuning fork moves at 340 m/s. It has a wave length of 2.43m. What is it's frequency? Wave Speed = wavelength * frequency 340m/s/2.43m = 139.91Hz *Name, and describe two types of waves that we discussed in class. '''Transverse Wave''': motion of the particle is perpendicular to the direction of the wave '''Longitudinal Wave''': motion of the particle move the same direction * A wave is traveling with a frequency of 70.0 Hz and has a wavelength of 50 m. What is the speed of this wave? velocity= wavelength X frequency velocity= 50 m X 70.0 Hz velocity= 3500 m/s * As a wave moves, intensity _________ with distance, and ________ as it passes through a material. Intensity '''DECREASES''' with distance, and '''DECREASES''' as it passes through a materal. * What is the definition of a wave? Any Pattern with an indentifable periodicity in space and time. No matter is transferred but energy is. * A wave has a wavelength of 70m and a frequency of 80Hz. How fast would this particular wave be traveling? = Wavelength x frequency = 70m x 80HZ = 5600m/s * Illustrate [[diffraction]] * Illustrate [[Hugen's Principle]]? At a time(t) consider everypoint on a wave front, a new point source. * What are the names for the highest and lowest points of a wave? crest and trough === Sound === 1. For '''sound''' waves, as the _________ of a material increases, _________ increases '''Density''' and '''Velocity''' 2. Dolphins can hear noises at the frequency of 250 kHz. If a dolphin hears a sound with this frequency that is moving with a velocity of 1700 m/s what is it's wavelength? Use the equation v=λf, for this problem it is v/f=λ. First convert 250kHz to 250000Hz. 1700m/s divided by 250000Hz = 6.8x10^3m 3. Sound cannot travel through a vacume because it needs what? Sound needs a medium to travel through. (solid, liquid, or gas) 4. What is Refraction when dealing with sound waves? An abrupt change in wave speed at boundary of two mediums. 5. What is the equation for Refraction? f = v1/wavelength = v2/wavelength2 === Electromagnetic Waves === * What are the seven type of waves in the electromagnetic spectrum in order of their size (largest to smallest)? Radio waves, microwave, infrared, visible, ultraviolet, x-ray, and gamma rays. * The wave-like properties of electromagnetic radiation are due to what? The periodic oscillations in the electric and magnetic components. # If a wave is traveling at a velocity of 3.8m/s and the end of the wave reaches where the fron t of the wave started in 15s. Wavelength=velocity / Frequency 3.8m/s x 15s= 57m/s(squared) * If an AM radio wave has a length of 300 m , what is it's frequency? Frequency = speed of light (c) / wave length Frequncy= (3 x 10^8 m/s)/ 300 m Frequency= 1 x 10^7 Hz * An electromagnetic wave has a frequency of 1.5x10^7 Hz, what is the lenth of the wave? c is constant. c=3x10^8 m/s legth=c/f=3x10^8/1.5x10^7Hz=20m == Light == * What's the difference between a '''convex mirror''' and a '''concave mirror'''? A convex mirror curves away from you and a concave mirror curves toward the viewer. * What can the size of an infrared light wave be compared to physically? (e.g. a bread box, an atom, etc). a pinhead === Reflection=== 1. A beam of light is sitting in the floor 45 degree and it is shining to a mirror that was sitting at the floor 90 degree, if the mirror turn 45 degree where the light is pointing to and the light remain the same position, what will be the new reflection angle? (Hint: follow the wording use the diagram only as a guide) [[Image:morrior reflection.jpg]] No reflection will occour because the mirror and the light become parallel. === Refraction === Empty === Lighting === ==== CFL ==== * A '''Compact Fluorescent Light bulb''' (or [http://www.appropedia.org/CFL CFL]) uses roughly ____ percentage of the electrical wattage needed for an incandescent light bulb to produce the same amount of light. Answer: 25% * True or false CFL's are a more economical choice over the standard incandescent bulbs Answer: True * If a house has 20 light fixtures and they switch to CFL's, that save $32 per bulb, how much will the household save? Answer: 20 x 32 $640 *CFL Bulbs that have the equivalent power of a 60 Watt Incandescent bulb have ____ watts. Answer: 15 watts *If you have 10 fixtures to replace with CFL light bulbs and the total costs over 8,000 hrs of illumination at Clarion rate of $0.0615 per kW-hr are$18.30 per fixture. How much will your initial costs be to replace the light bulbs with the energy saving bulbs? Answer: $18.30*10=$183 as your initial cost for CFL bulbs *How do CFL light bulbs differ from incandescent light bulbs? Answer: CFL's use mercury vapor and when the mercury vapor is exposed to an electrical current the electrons begin to move quickly, emitting light. An Incandescent light bulb uses a filament which emits mostly heat, which makes it much less efficient. *If a CFL light bulb has a pay back time of 5.4 months and you save 1.12 per month and the life time is 3 years, what is your total return on investment? Answers: 36 months - 5.4 = 31.6 months x $1.12 = $35.40 ==== LEDs ==== Nothing == Energy == * What is the formula for electrical '''energy'''? Answer: Energy=Power(Time) * Name 5 forms of energy Light, chemical, electrical, lastic, nuclear, sound, thermal, gravitational. * How much energy is being used while using 3000 watts for 5 hours? E=Pt = [w][hrs] 1000w=1kw =3(5) =15kw*hr *If you use one electrical space heater at 500w to heat your living room for 8 hrs. How much energy does it use in kw-hr? 1000w= 1kw-hr E=Pt =(500w)(8hrs) = 4,000w-hrs = 4kw-hr E= 4kw-hr * What are 3 examples of chemical energy? Gasoline, fossil fuels, batteries * Can energy be lost when it is used in a particular task? no, energy can only be transfered from on form to another--[[User:Natehepler|Natehepler]] * A 120 watt curling iron plugged in for 1 hour uses how much electrical energy? .12[kw-hrs] * How many watts are in a kilowatt? 1000 11. A force of 6 N is moving a box over a distance of 2 meters. How much work is being exerted on the object? w=6x2; w=12J == Central vs Distributed == == Heat == ===Temperature === *When dealing with science, equal temperatures are also known as this term? Thermodynamic Equilibrium * The boiling point of water in degrees Kelvin is 373. Find the boiling point of water in degrees Celsius. 373-273=100 * If you have a temperature of 63 degrees Celsius, what would that same temperature be in Kelvin? Formula: T Kelvin = T Celsius + 273 T Kelvin = 63 + 273 T = 336 * What is Thermal Expansion and what causes it to occur? Answer: '''Thermal Expansion''' is the expansion/contraction of a material due to temperature change. When most materials are heated, the atoms move faster and cause the material to expand; the opposite occurs when it is cooled. Thermal expansion is calculated by using a "coefficient of thermal expansion" specific to that material, since the expansion/contraction of each material varies. * A 10-inch long copper rod is heated from 70°F to 180°F. The coefficient of thermal expansion of copper is 9.3×10^-6 in./°F. What is the length of the rod after it has been heated? ΔL = α×L×ΔT Where α=coefficient, L=original length, ΔT=change in Temperature ΔL=(9.3×10^-6)(10 inches)(180-70°F) ΔL=(9.3×10^-6)(1100 in./°F) ΔL=(0.01 inches) 10 inches + 0.01 inches = 10.01 inches ===Heat Transfer === *How many ways can heat be transfered and what are the specific ways? -3 -Conduction -Convection -Radiation *Lets say you have a wall with a window in the middle. The window is 90cm x 60 cm. The glass in the window is .35 cm thick. The temp outside is 5 c and inside it's 20 c. What is the rate of heat loss through your window? Remember K= .63 w/mk Icd=Q/t=KAΔT/d .63w/mk(90x10 raised to the negative 2)(60x10 raised to the -2)(20-5) divided by .35x 10 raised to the negative 2 m the answer is 1458 w # Jimmy is replacing the 17ft x 14ft window in his kitchen. The glass he purchased is 0.34cm thick. The current temperature in Jimmy's house is 23 degrees Celsius and the temperature outside is 7 degrees Celsius. K is 0.63w/mK. What is the thermal gradiant? Solution: ΔT/d Change in temp= 23-7 =16.0 D = 0.34 ΔT/d = 16/0.34 = '''47.06''' *What is ΔT/d? It is the thermal gradient. *The Jones are getting new window for in their living room. They are 50cm x 45 cm. The glass is 0.42 cm. The outside temperature is 10°C, the inside is 21.1°C. K is 0.63w/mK. What is the thermal gradient? T=21.1-10=11.1 D=0.42 ΔT/d.... 11.1/.42= 26.4 *Name the 3 types of heat transfer. Conduction, Convection, and Radiation *We are getting new windows in the classroom.From the example we had in class 20cm x 15cm, the glass is .32cm outside temp. is -15°C inside temp. is 22°C and K is 0.63w/mK. Using this information what is the Thermal gradient? ΔT/d 22-(-15)= 37 d=.32 37/.32= 115.62 * All of the following are ways to improve windows except: A. Having multiple panes B. Use an inert gas--vacuum C. Low conductivity spacers, either plastic or wood D. Having a single pane E. Low e coating D is the correct answer. * What is the rate of heat loss thru a 30 cm by 25 cm single pane window, with a thickness of 0.45 cm thick, when it is -10 degrees C outside and 25 degree C inside. If given K=0.63 W/mK, what is the rate of loss? Icd=KA(change in temp)/d Plug in the numbers and the answer is 368 W. * Describe the 3 different types of heat transfer. Conduction-a collision of molecules Convection- energy transfer by movement of material (forced air) Radiation-energy transfer with electromagnetic waves * A baseball player has a surface area of 1.2m<sup>2</sup> with a skin temperature of 34 degrees Celsius. He is standing in center field. The air temperature is 28 degrees Celsius and the wind velocity is 4m/s. The coefficient of convection is 32. I<sub>cv</sub>=? I<sub>cv</sub>=(h)(A)(change in temperature) I<sub>cv</sub>=(32)(1.2m<sup>2</sup>)(6 degrees Celsius) I<sub>cv</sub>=230.4 W * A shipwrecked sailor is lying on a beach. The sailors skin area is 1.8m², the air temp is 25°c, the windspeed is 3m/s, and the sailors skin temp is 30°c. What is the Icv? ( h=26) - use the formula Icv = hAΔT = 26(1.8m²)(30 - 25) = 234w * A hockey player has a surface area of 1.6 m2 with a skin temperature of 35 degrees Celsius while he is warming up for a big game. The temperature in the arena is 45 degrees Celsius and there is a slight breeze from the top being open and it is 2 m/s. What is the Icv? (h=37) -Use the formula Icv=(h)(a)(change in temperature) Plug in the numbers in the correct places. Icv= (37)(1.6 m2) (45-35) iCV= (37)(1.6 m2) (10) Icv=592 w # Which form of heat transfer involves electromagnetic waves? Radiation * Temperature moves from a___________object to a____________object until the temperatures of both objects are equal. Hot to cold == Thermodynamics == # What is the second law of Thermodynamics? No refrigerator or heat pump can have an inefficiency of zero. # What is the third law of Thermodynamics? It is impossible to cool a system to absolute 0. === Heat Engines === * A heat engine is rated as 85% efficient. If the heat input is 500W what is the work output to make the efficiency true? E=work output/Q input .85=output/500W .85x500=425W output=425W === Refrigerators === * The fridge in your kitchen has a heat output of 60 and work input of 250. What is the inefficiency of the refrigerator? Answer: The answer is 4.2 The inefficienct of the fridge is e<sub>in</sub> = work input / heat output = 250 / 60 = 4.2 * The 2nd Law of Thermodynamics states what about refrigerators or heat pumps? Answer: The 2nd Law of Thermodynamics states that No refrigerator or heat pump can have an efficiency of 0 (zero). * The 3rd law of thermodynamics states that it is impossible to cool a system to ________. Absolute zero (or, 0 degrees Kelvin) === Heat pumps === #. The 2nd law of thermodynamics is no refrigerator or heat pump can have a(n) <u>underline text</u> of zero. inefficiency #. You have an air conditioner which has a heat output of 100 and an inefficiency of 6.5. What is the work input? e<sub>in</sub>= work input/heat output work input= 100 x 6.5 work input= 650 === Microturbines === What is a Microturbine? A Small Electric generation systems based on turbine technology. If you put 100 units in how many units will it produce out? 150 units? 85 units, it is 85% efficient 150 x .85= 85% ... 150 x .85= 127.5 units * What does the 1st law of thermodynamics deal with? Energy conservation * What is 2 of the 5 ways one can improve windows? Multiple layers of glass, no frames of metal, insulate frames, fill glass with inert gas,Low emissivity coating {{BookCat}} mbo4jf8lj4i5itjb2h9sepjf0wzxik7 Structural Biochemistry/Lipids 0 173952 4672071 4102711 2026-09-24T08:38:23Z R. Henrik Nilsson 3395618 concentraion > concentration 4672071 wikitext text/x-wiki Lipids belong to a family of organic compounds which includes fats, vegetable oils, waxes, [[Structural Biochemistry/Lipids/Cholesterol|cholesterol]], phospholipids, steroids, and fat-soluble vitamins (A, D, E, and K). They are formed by either or both carbanion-based condensation of thioesters and carbocation-based condensation of isoprene units.<ref>http://www.ncbi.nlm.nih.gov/pubmed/21469951</ref> Although lipids are amphiphatic molecules (containing both components of hydrophilic and hydrophobic regions within the molecule), lipids are generally hydrophobic due largely in part to their large proportion of hydrocarbons to polar regions (due to oxygen containing functional groups). Therefore, Lipids are not soluble in water but are soluble in nonpolar solvents (ex: benzene and chloroform). Lipids have several functions in biology. Digestion of triglycerides yields glycerol and fatty acids, which are subsequently used as fuel. Additional biological functions include: constructing cell membranes, storing energy, and as signaling molecules. Lipids can form bonds to proteins and carbohydrates forming lipoproteins and lipopolysaccharides. There are eight categories of lipids defined by the LIPID MAPS Consortium, which classifies them by their chemically functional backbones. The eight categories - fatty acyls, glycerolipids, glycerophospholipids, sphingolipids, sterol lipids, prenol lipids, saccharolipids, and polyketides - are then further divided into classes and subclasses.<ref>http://www.ncbi.nlm.nih.gov/pubmed/21469951</ref> ==Fatty Acids== One common biological lipid is the fatty acid. '''Nomenclature''' To name a [[Structural Biochemistry/Lipids/Fatty Acids|fatty acid]], it is essential to know the name of the original hydrocarbon since the ending of the name will be replaced as follows: * A single bond replaces the e--> oic * A double bond replaces the ne-> dienoic * A triple bond replaces the ne-> trienoic [[File:Stearinsäure Skelett.svg|thumb|right|Octadecanoic acid, also known as stearic acid]]One example is octadecane. When it is a single bonded saturated fatty acid, the name would transform into octadecanoic acid. A double bond would change the name to octadecadienoic acid. And finally a triple bonded fatty acid would convert the name to octadecatrienoic acid. There are also other notations for a person to read fatty acids. One case is denoting the number of carbon atoms versus the number of double bonds. For example 14:2 states that there are 14 carbon atoms and 2 double bonds within the molecule. The last case for naming double bonds is through the symbol Δ and ω. By having a superscript after the delta, it denotes that there exists a double bond after that number. For example a cis-Δ<sup>12</sup> states that there is a cis double bond between the carbon atoms 12 and 13. The ω-n notation is another way to denote where the double bond is placed. If for example the n = 4 (ω-4) then there will be a double bond between the 4 and 5 carbon starting from the CH<sub>4</sub> end. Omega - 3 fatty acids are a common example of a fatty acid named using this method. '''Properties''' Essential components that define fatty acids:<br> - Hydrocarbon chain(s)<br> - Saturated (pure C-C bonds) or unsaturated (contains one or more C=C bonds)<br> - Carboxylic acid at one terminus [[Structural Biochemistry/Lipids/Fatty Acids|Fatty acids]] are chains of hydrocarbons that vary in length and in degree of saturation. Membrane fatty acids typically have 14 to 24 carbons and may be saturated or unsaturated. The non-polar hydrocarbon alkane chain is an important counterbalance to the polar acid functional group. In acids with only a few carbons, the acid functional group dominates and gives the whole molecule a polar character. However, in fatty acids, the non-polar hydrocarbon chain gives the molecule a non- polar character. There are two groups of fatty acids—saturated and unsaturated. Recall that the term unsaturated refers to the presence of one or more double bonds between carbons as in alkenes. A saturated fatty acid has no double bonds, meaning all C atoms are bonded to two hydrogen atoms (with the exception of the terminal C which is bonded to three hydrogen atoms). The unsaturated fatty acids have lower melting points than the saturated fatty acids. The "kink" in the hydrophobic tail interferes with the tight packing of the tails, lowering the melting temperature. The reason for this phenomenon can be found by a careful consideration of molecular geometries. The tetrahedral bond angles of the carbons in a saturated fatty acid results in a zigzag structure that is relatively linear. This molecular structure allows many fatty acid molecules to be rather closely "stacked" together. As a result, close intermolecular interactions result in relatively high melting points. On the other hand, the introduction of one or more double bonds in the hydrocarbon chain in unsaturated fatty acids results in one or more "bends" in the molecule. The geometry of the double bond is almost always a cis configuration in natural fatty acids. These molecules do not "stack" very well, weakening the intermolecular interactions between molecules compared to saturated molecules. As a result, the melting points are much lower for unsaturated fatty acids. == Triacylglycerol == This is the simplest form of lipid made from three [[Structural Biochemistry/Lipids/Fatty Acids|fatty acids]] with an ester linkage to a glycerol. Most triacylglycerols found in nature are from two or more different fatty acids. They are relatively insoluble in water and hydrophobic due to the non-polar nature of the aliphatic portion of the fatty acid chains. There is a small amount of polar nature, however, resulting from the ester linkage between the hydroxyl groups of the glycerol and the carboxylates of the fatty acids. In eukaryotic cells, triacylglycerol serves as metabolic fuel and insulation. Adipocytes store a large amount of triacylglycerols in vertebrates, and in plants, it is stored in the form of oil in seeds. An enzyme called lipase is present in both adipocytes and seeds, catalyzing the hydrolysis of triacylgycerols and releasing fatty acids which can be used for fuel in the necessary places. The advantages to using triacylglycerols as a source for metabolic fuel reside in its highly reduced nature, as well as its hydrophobic state. Since the carbons of fatty acids are more reduced than those of carbohydrates, oxidizing fatty acids provides more energy. Triacylglycerols are better for storage because it does not add the unnecessary weight to the host, i.e. its hydrophobic tendency prohibits it from getting hydrated, a source for added water weight. Furthermore, triacylglycerols stored under the skin of some animals, such as: seals, whales, penguins,etc. also serve as an insulation against the cold. Hibernating animals especially benefit greatly from the dual purposes of triacylglycerols. == Types of Membrane Lipids == === 1. Phospholipids === [[File:This is phospholipids.png|thumb|]] A phospholipid molecule consists of two main parts, a hydrophilic polar head group and a hydrophobic tail. The polar head group has one or more phosphate groups while the hydrophobic tail has two fatty acyl chains. The polar head group is joined to the hydrophobic moiety by a phosphodiester linkage via a glycerol or sphingosine molecule. When these molecules are placed in water, the head group faces water while the tail faces away from water, making a bilayer. The fatty acyl chains consists of entirely hydrocarbons. If the carbon atoms are all bonded by single bonds, then it is saturated. If one or more double bond exist, it is unsaturated. The [[Structural Biochemistry/Lipids/Fatty Acids|fatty acid]] chains provide the hydrophobic barrier. It is important that phospholipids are abundant in all biological membranes. A phospholipid molecule is constructed from four components: one or more fatty acids, a platform to which the fatty acids are attached, a phosphate, and an alcohol attached to the phosphate. The platform on which phospholipids are built may be glycerol (a three-carbon alcohol) or sphingosine (a more complex alcohol). The fatty acid components provide a hydrophobic barrier, whereas the remainder of the molecule has hydrophilic properties to enable interaction with the aqueous environment. There is a great amount of diversity because a phospholipid can have many different 'head groups' as a substituent to the phosphate group. Examples of these head groups include serine, ethanolamine, choline, glycerol, inositol. These modification of phospholipids always have a reason,e.g. in archaebacteria, which lives in 70 or 90 degrees C, the phopholipids are modified to remain stable at high temperatures in the membrane or, in the case of myelination of the brain, phospholipids in neuron soma are different from phospholipids in the myelin sheath. Phospholipids are important as a structural constitution of [[Structural Biochemistry/Lipids/Lipid Bilayer|lipid bilayer]] of biological membranes (for example, the plasma membrane of cells and intracellular membranes of organelles serve as separation of cells from their environments and participate in biological functions of metabolism and signaling). Phospholipids exist in two forms: phosphoglycerides and sphingomyelin. [[Image:TN1.jpg|thumb|right|Schematic structure of a phospholipid molecule with glycerol as the backbone platform]] ====Phosphoglycerides==== Phosphoglycerides are lipids of glycerol groups bonded to two fat-soluble fatty acids and one charged, water-soluble phosphate group; the compound is known as ''phosphatidic acid''. The phosphate group can be bonded by other chemical group to form different structures for different functions. The attachment of phosphate to one end of the glycerol convert it from a prochiral structure to a chiral structure (a non-chiral structure that can be made chiral). The biological structure of cell membrane is constructed as bilayer, which is a structure that has the fat-soluble components interacting with each other and the water-soluble facing outside towards the polar solvent. Phosphatidate(Diacylglyerol 3-Phosphate) is considered the simplest phosphoglyceride. The major phosphoglycerides are derived from phosphophatidate by the formation of an ester bond between the phosphate group of phosphatidate and the hydroxyl group of one of several alcohols. The common alcohol moieties of phosphoglycerides are the amino acid serine, ethanolamine, choline, glycerol, and inositol. Phosphatidylcholine, phosphatidylserine, and phosphatidylethanolamide are major phosphoglycerides. [[Image:TN2.jpg|thumb|Schematic structure of a phospholipid molecule with sphingosine as the backbone platform]] ====Sphingomyelins==== Sphingomyelins are unlike phosphoglycerides in that they are not derived from glycerols. However they are similar in terms of the 3 components: [[Structural Biochemistry/Lipids/Fatty Acids|fatty acid]], platform, phosphate. Instead of glycerol, sphingomyelins utilize sphingosines as the backbone platform. Sphingosine is an amino alcohol containing a long unsaturated hydrocarbon chain. In sphingomyelin, the amino group of the sphingosine backbone is linked to a fatty acid by an amide bond. Phosphoglycerides may have one of the different alcohols as the hydroxyl group bound to the phosphatidate, however sphingomyelins have the primary hydroxyl group of sphingosine esterified to phosphorylcholine. === 2. Glycolipids === [[Image:TN3.jpg|thumb|Schematic structure of a glycolipid molecule with glycerol as the backbone platform]]Glycolipids are lipids that have a covalently attached carbohydrate (sugar-containing lipids). Glycolipids aid in providing energy as well as serving as genetic markers for cell recognition. There are two types of glycolipids: sphingolipids and galactolipids. The sphingolipid is made up of one sphingosine, a [[Structural Biochemistry/Lipids/Fatty Acids|fatty acid]], a mono or oligosaccharide. The galactolipid is made up of a glycerol, two fatty acids, a mono or disaccharide, and sulfate. Galactolipids are mostly found in plant cells, specifically in the thylakoid membrane of the chloroplast. [[Image:TN4.jpg|thumb|Schematic structure of a glycolipid molecule with sphingosine as the backbone platform]] Glycolipids are sugar(glyco-)containing lipids which functions include energy provision and cellular recognition. The structures are formed by carbohydrate chains bonded to phospholipids on extracellular side of cell membrane of phospholipid bilayer. These structures serve as recognition markers for chemicals and also stabilize the membrane structure and bonding from cell to cell to form tissues. They are derived from sphingosine instead of a form of glycerol. Another difference from phospholipids is that glycolipids contain a sugar unit (can be glucose or galactose) instead of a phosphate group. Glycolipids have a direct glycosidic linkage between the polar head group sugar and the backbone glycerol, whereas in phospholipids the polar head group is joined through a phosphodiester bond. Glycolipids differ from sphingomyelin in the identity of the unit that is linked to the primary hydroxyl group of the sphingosine backbone. In addition, in the cell, membrane glycoproteins and glycolipids are invariably oriented with their carbohydrate moieties facing the cell's exterior. Glycolipid molecules have a large range of complexity starting from the most basic molecule, cerebroside which contains 1 fatty acid unit, a sphingosine backbone, and 1 sugar unit (glucose or galactose), to the most complex molecules containing branched chains of multiple sugar residues (up to seven residues in gangliosides). === 3. Cholesterol === [[Structural Biochemistry/Lipids/Cholesterol|Cholesterol]] is a lipid-like alcohol found in animal tissues. It has a structure different from other lipids. It is relatively medium-sized molecule that contains four adjacent cyclic hydrocarbon molecules with three six-member rings and one five-member ring that has a hydroxyl and a saturated hydrocarbon chain terminals. Cholesterol is amphipathic due to its polar hydroxyl group and non-polar hydrocarbon body. Also, cholesterol's fused ring system provides it with much greater rigidity than other membrane lipids since it does not allows it to rotate about the C-C bond. [[Image:Cholesterin.svg|350px|thumb|right|Cholesterol Molecular Structure]] Cholesterol is considered a steroid and is not found in prokaryotes. Its main function involves the permeability of the cell membrane since it manages [[Structural Biochemistry/Lipids/Membrane Fluidity|membrane fluidity]]. Cholesterol has a tendency to decrease membrane fluidity because the hydrophobic section interacts with the hydrophobic regions of the surrounding phospholipids. Cholesterols have also been implicated in forming [[Structural Biochemistry/Lipids/Lipid Rafts|lipid rafts]], regions of lipids and proteins that tend to cluster together and whose composition differs from the surrounding membrane. Cholesterol is lipid in cell membranes that is not as soluble in water or organic solvent. It is synthesized from acetic acid and is classified as sterol, or compound with both steroid and alcohol groups. The biological structures are constructed as the hydroxyl group bonded to polar phospholipids and sphingolipids groups of membrane, and steroid and hydrocarbon groups to nonpolar [[Structural Biochemistry/Lipids/Fatty Acids|fatty acid]] groups of other lipid compounds in membrane. The molecule functions as a buffer or a temperature stabilizer for the membrane in which it can make up of 25% of the membrane. When existing in membranes, the 4 cyclic molecules in the cholesterol molecule lay parallel to the fatty acid chains of the phospholipids, meanwhile the hydroxyl terminal points in the direction with the polar phospholipid heads in which it interact with. Cholesterol also participates in the construction, regulation of cell membranes of different temperature ranges, and formation of steroid hormones. Cholesterol is the most abundant steroid in animals and may constitute up to 30-40% of plasma [[Structural Biochemistry/Lipids/Membrane Lipids|membrane lipids]]. Cholesterol molecules exist primarily in nerve cells. The molecule binds to the myelin sheath membrane which provides an outer coating that protects the nerve cell from its surroundings. Also, it is an essential precursor to sex hormones that exists in males (testosterone) and females (estradiol). It is also an essential component in vitamin D that enables the body to utilize calcium to form bones. Animals acquire very little cholesterol from the food they eat. Instead, cholesterol is made within the body. Although cholesterol is essential for many processes and structural function, it can be detrimental to have excess cholesterol. Too much cholesterol in the blood will cause blockages in the arteries which can result in heart disease, high blood pressure, and stroke. Only 0.25% of human beings suffer from high cholesterol because of heredity factors. More commonly, people get high cholesterol levels from the food they eat (especially in America). ==== Steroids ==== [[Image:Steroid.jpg|thumb|steroid diversity]]Steroids are derivatives of cyclopentanoperhydrophenanthrene, a compound which includes four fused, non planar rings. Cholesterol is the metabolic precursor of steroid hormones in mammals. These hormones regulate a variety of physiological functions such as gene expression,metabolism, inflammatory reactions, capacity to deal with stress, excretion of salt and water by the kidneys, and sexual development. Examples of steroid hormones are cortisol, testosterone, aldosterone, and beta-estradiol. Due to the fact that steroid hormones are not soluble in water, they bind to proteins for transport through the blood to their target tissues. Also steroids tend to have a longer lasting impact compared to other hormones or signaling molecules. == Membranes == When amphipathic molecules, like phospholipids, come together, membranes form. Membranes are sheetlike structures that are two molecules thick (typically between 6&nbsp;nm to 100&nbsp;nm) and form closed boundaries between different intracellular compartments. Membranes consist of lipids and proteins in a mass composition ratio range between 1:4 to 4:1. Carbohydrates are also present in membranes linked to lipids and proteins. The [[Structural Biochemistry/Lipids/Membrane Lipids|membrane lipids]] are small molecules that are both hydrophobic and hydrophilic, thereby creating closed bimolecular sheets that serve as barriers to other molecules. Very specific proteins serve to mediate the movement or signaling of substances. These proteins include pumps, channels, receptors, energy transducers, and enzymes. These proteins are usually embedded in membranes in the [[Structural Biochemistry/Lipids/Lipid Bilayer|lipid bilayer]] and mediate the signal transduction between the two environments. Most cell membranes are polarized with the inside of the cell having a different composition versus the outside of the cell. The separation of intra- and extracellular environments allows the cell to form an electric potential across the membrane, which is vital to transport, energy conversion, and excitability. Lipids contain two components that constitute its amphipathic characteristic: <br>-Hydrophobic tail consisting of a saturated or unsaturated hydrocarbon chain which, because of the hydrophobic effect, causes the hydrocarbon tails to line up parallel to each other. <br>-Hydrophilic polar head consisting of a charged phosphate group which points in the direction of the polar aqueous solvent. Together, these two components aid lipids to interact together and its environment to exist as a [[Structural Biochemistry/Lipids/Lipid Bilayer|lipid bilayer]] or as a [[Structural Biochemistry/Lipids/Micelles|micelle]]. ==== Lipid Bilayers ==== [[image:PHOSPHOLIPID MODEL.jpg|thumb|right|Structure of Phospholipid Model]][[Structural Biochemistry/Lipids/Lipid Bilayer|Lipid Bilayers]] are a perfect example of how structure plays a role in function. The structure of the bilayer provides a permeability barrier between exterior and interior compartments. This theme, first experimented by Gorter & Grendell, has remained dominant in our understanding of the organization and function of biological membranes. The hydrophobic ends are mingled together away from water while the hydrophilic heads face the extracellular fluid and the cytoplasm. The [[Structural Biochemistry/Lipids/Lipid Bilayer|lipid bilayer]] also contains protein channels that act as transport pathways for certain proteins to get through. There are many proteins that might reside in the bilayer, each with their own sequence, structure and post-translation modifications to allow the protein to correctly perform its task, yet all intermembrane proteins share two common regions, a hydrophobic and hydrophilic region. The hydrophobic portion of the protein allows it to be cemented into the bilayer through hydrophobic interactions with the long hydrocarbon chain of the phospholipid, while the hydrophilic region resides in the aqueous environment. Lipid bilayers display elastic properties due to their fluid structures. The fluidity of the lipid bilayer is described by the [[Structural Biochemistry/Lipids/Fluid Mosaic Model|Fluid Mosaic Model]]. Phospholipids can also undergo flipping from one surface to another, although this is extremely unfavorable since the polar head group of a phospholipid must pass through the hydrophobic region of the bilayer to invert itself; this helps to maintain the asymmetry of the membrane surfaces. Proteins are mostly fixed in the membrane and cannot freely rotate, maintaining this intentional asymmetry. Each leaflet of the bilayer consists of complex and unique lipids reaching more than 100 different types. Membranes can have regions cholesterol and sphingomyelin in high concentrations. The broad range in complexities is necessary for its essential functions such as maintaining electrical, mechanical, and chemical gradients. The lipids in the membrane undergo complex phases to facilitate processes that are a function of concentration, composition, and temperature. Cell division and membrane fusion occur readily because of the bilayer’s lateral pressure profile and interfacial region between bulk water outside of the cell and virtually no water in the interior of the bilayer. These features create a water concentration gradient from the lipid backbone to the middle of the two leaflets in addition to a dielectric-constant gradient. <ref>[http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3161620/ ''NCBI'', Influence of Solubilizing Environments on Membrane Protein Structures, November 19, 2012]</ref> == Properties of Cell Membrane == ===1. Sheet-like Structure=== The cell membranes are composed of two lipid sheets, called the [[Structural Biochemistry/Lipids/Lipid Bilayer|lipid bilayer]]. The sheet-like structure is favored by phopholipids and glycolipids in aqueous environments, i.e. when phospholipids, glycolipids, and [[Structural Biochemistry/Lipids/Cholesterol|cholesterol]] are mixed with water, they tend to cluster together, with their hydrophobic tails in contact with each other and their hydrophilic heads interacting with the aqueous medium. Because the hydrophobic region exposed to the aqueous surrounding is reduced by the clustering, the number of ordered water shells is minimized at the lipid-water interface, and hence the entropy of the system increases, which is thermodynamically favorable. The lipid bilayer is favored by phospholipids and glycolipids because the [[Structural Biochemistry/Lipids/Fatty Acids|fatty acid]] tails on the lipids are too bulky to be buried into the interior of a [[Structural Biochemistry/Lipids/Micelles|micelle]]. The lipid bilayer has the ability to extend to macroscopic dimensions because the hydrophobic interactions among lipid molecules not only act as driving forces that enable the formation of the sheet-like structure, but also stabilize the structure. In both prokaryotic and eukaryotic cells, plasma membrane and membranes of organelles consist of the phospholipid bilayer with proteins attached to or embedded in it. Because metabolic requirements of the cell impose a upper limit on the size of a single cell, the plasma membrane functions as a barrier at the boundary of each cell, guarding the passage of substances to the cell. ===2. Membrane Lipids and Membrane Proteins=== -Membrane Lipids: Three common [[Structural Biochemistry/Lipids/Membrane Lipids|membrane lipids]]: [[#1. Phospholipids|Phospholipids]]: contains 2 fatty acid tails, glycerol, phosphate and alcohol groups. [[#2. Glycolipids|Glycolipids]]: contains a sugar head, covalently bonded through glycerol just like phospholipids. [[Structural Biochemistry/Lipids/Cholesterol|Cholesterol]]: bulky molecule that has two ends. One end has the hydrocarbon group, the other end has 4 rings of hydrocarbon with an hydroxyl (-OH) group. Membrane Proteins: Membrane proteins are protein molecules that are bonded or related closely to cellular or organelle membrane. They can be classified into two groups based on bond strength with membrane: [[Image:Membrane proteins.JPG|thumb|right|INTEGRAL AND PERIPHERAL MEMBRANE PROTEINS]] A. Transmembrane proteins: Transmembrane proteins span the lipid membrane with alpha helices or beta sheets and are the most common structure in membrane proteins. Most of these alpha helices are nonpolar and very few are charged. Proteins with alpha helices are also used to anchor a protein to the surface of a cell membrane. Beta strands form channel proteins in the membrane. Each beta strand is in antiparallel arrangement and is linked by hydrogen bonding. This beta sheet can form a hollow column, which forms a pore in the membrane. The outside of the pore is nonpolar and hydrophobic whereas the inside is hydrophilic. This structure is obtained by alternating hydrophobic and hydrophilic amino acids in each strand. B. Integral monotopic proteins are stably bonded to membrane that requires nonpolar solvent to break the bond. Examples of Integral Membrane Protein: Bacteriorhodpsin- It moves proton from the inside of the [[Structural Biochemistry/Lipids/Lipid Bilayer|"lipid bilayer"]] to the outside using light energy. The structure is in alpha helics form and the alpha helics is the most common structural motif in membrane proteins. Glycophorin: Glycophorin is an example of glycoproteins and is made up of alpha helices. It is a dimer protein that binds to both hydrophobic and hydrophilic regions of the membrane. The positive amino acids (Lys and Arg) of it bind to the phosphate polar head group of the membrane, reducing lateral movement of the protein. Glycophorin serves as receptor for M/N blood type. Other functions of glycophorin are still under investigation. Bacteriorhodopsin: is an integral protein found in photosynthesis bacterium. It is made up of three identical chains, hence, a trimer. Each chain is then made up of 7 alpha helices. Bacteriorhodopsin serves as a channel that can undergo conformational change to pump protons across the membrane (from cytosol to extracellular), creating the proton gradient that is used for ATP synthesis. Porins: is made up of beta strands. Its outward surface consists mostly of hydrophobic groups, which helps interacting with the hydrophobic region of the lipid membrane. Inward surface consists mostly of hydrophilic groups, held together by hydrogen bond. Because of its inward hydrophilic region, small charged molecule (waste, water, nutrients) can travel through porins to get inside or outside of cells. C. Peripheral: Peripheral membrane proteins are impermanently bonded to lipid bilayer or integral proteins, which can dissociate by polar solvent. The head group of lipid on a lipid bilayer interacts with the peripheral membrane protein by electrostatic and hydrocarbon bond. An example of a peripheral membrane protein is: Cytochrome C: is made up of alpha helices. Cyt c is found in all eukaryotic mitochrondria. Cyt C is covalently attached to a heme group, which can undergo transition between ferrous and ferric states within the cell. Due to conformational change, cyt c serves as electron transport from Complex III to Complex IV. This is possible because Cyt c can bind loosely to both Complex III and Complex IV proteins, which are integral proteins. ===3. Amphipathic Molecular Structure=== Amphipathic molecule contains both hydrophilic and hydrophobic groups in its structure. In case of lipid membrane, the hydrophilic groups are the phosphate polar head and the hydrophobic groups are the hydrocarbon tails. Because of the amphipathic nature of the cell membrane, lipid bilayers are highly impermeable to ions and polar molecules, and the permeability of smaller molecules is in relation with their solubilities in nonpolar solvent relative to their solutilities in water. Water molecules are considered small molecules in this case so that water molecules are able to traverse lipid bilayers easily for its high concentration within the cells and lack of a complete charge on its molecule. Water molecules diffuse through the lipid bilayers through the process of osmosis from a region of high water concentration (low solute concentration) to regions with low water concentration (high solute concentration), with no energy input required. Small molecules other than water throw off their solvation shells of water, dissolving in the hydrophobic core of membrane when they go into the bilayers, and then they diffuse through the core to the other side of the membrane—the hydrophilic region, where they are resolvated{{typo help inline|reason=similar to presolvated|date=September 2022}} by water. Ions are not likely to diffuse through the lipid bilayers in response to the amphipathic nature of membrane though. The replacement of their coordination shells of polar water molecules by nonpolar interactions with hydrophobic core of membrane interior is highly energetically unfavorable because the activation energy barrier is too high to overcome. ===4. Noncovalent Interactions=== For the phospholipid bilayer, even though it consists of hydrophilic heads on the outer membrane, the noncovalent hydrophobic tails of the inner membrane is the key to hold the entire membrane together because there are Van der Waals attractive forces within the cell membrane in which the hydrocarbon tails are closely packed together. With its noncovalent character inside the cell membrane, the hydrophobic molecules can easily pass through the cell membrane through passive diffusion. Despite this, the cell has control of the molecules' movement through transmembrane proteins complexes such as pores and gates. As for the hydrophilic molecules (such as ions, carbohydrates, proteins, amino acids, and nucleic acids), they require active diffusion in order to pass through the cell membrane because of their polarity and because they are hydrophilic (most noncovalent assemblies of the cell membrane are hydrophobic, such as hydrocarbon chains). The noncovalent assemblies of the cell membrane can help give rise to bubbles such as liposome, or lipid vesicle, that can deliver drugs into a specific part of the body. The structure of liposome is very similar to the cell membrane's lipid bilayer, and the materials that compose the liposome is identical to cell membrane. Because liposome is a bubble, the cross-section is shaped like a ring, where the hydrophilic heads are the outer and inner ring while the hydrophobic tails are in between the hydrophilic heads' rings. Because of the ring structure, the liposomes are able to trap aqueous materials such as drugs into their rings. Once the materials are within the ring, the liposomes would deliver them to a specific location in the body, such as cancer cells. ===5. Asymmetric=== Because the cell contains two distinct environments, the possibility exists for distinct membrane surfaces as well. In fact, the inner and outer surfaces of membranes contain different proteins and have different functions. The asymmetry is maintained by the fact that rotation in the membrane is extremely unfavorable. The differences can be caused by the different ratios or types of amphipathic lipid-based molecules, the different positioning of the proteins (facing in or facing out), or the fixed orientations of proteins spanning the membrane. Additionally, there are different enzymatic activities in the outer and inner membrane surfaces. The origin of the cell membrane asymmetry is when the proteins are synthesized by the preexisting membranes, they are inserted into the membrane in an asymmetric manner. The asymmetry of the cell membrane allows the membrane to maintain its integrity and allows the cell to have a different intracellular environment from the existing extracellular environment. Additionally, the cell membrane's phospholipids are distributed asymmetrically across the lipid bilayer, in a phenomenon called membrane phopholipid asymmetry. There are three mechanisms for transmembrane movement of phospholipids: 1) spontaneous diffusion, 2) facilitated diffusion, 3) ATP-dependent active translocation. The spontaneous diffusion is a form of passive transport. Because passive transport does not require energy to transport nonpolar substances through the membrane, this can happen spontaneously. Facilitated diffusion, like spontaneous diffusion, is a form of passive transport. The molecules or ions in this diffusion pass through the membrane by using specific transmembrane transport proteins. ===6. Fluidity of Membrane=== [[Image:Membranelipids.gif|thumb|fatty acid movements]]Because cell membrances are held together by hydrophobic interactions, which are weak enough to permit unlinking, cell membranes are not static sheets of lipid molecules. Membrane lipids are able to shift laterally, that is, they can move in the plane of the membrane. However, transverse diffusion across a membrane, or flip-flop, happens rarely because the energy barrier to switch one lipid molecule from one phospholipid layer to the other is too high since the hydrophilic head of the lipid molecule has to cross the hydrophobic core of the membrane. Flippases, a family of protein, help in the flip flop interactions of the phospholipids by catylyzing the reaction, making it faster and more energy favorable. A membrane has two states of order, a rigid state and a fluid state. Rigid states are highly ordered, fairly straight states while the fluid state is much more disordered with bends and kinks. The transition from one state to the other depends on whether the temperature is above or below the melting temperature, Tm. The properties of this transition state consist of the fatty acid chains length and the degree of unsaturation due to double bond kinks. Comparing phospholipids that have saturated hydrocarbon chains to that have unsaturated hydrocarbon tails, the lipids with saturated hydrocarbon chains tend to pack together more tightly, while cis and trans double bonds in unsaturated hydrocarbon tails produce branches in their molecular structure, keeping the lipids from packing closely, enhancing [[Structural Biochemistry/Lipids/Membrane Fluidity|membrane fluidity]]. This is the primary method that bacteria maintain the fluidity of their cell membranes. The length of fatty acid chains is also a factor in membrane fluidity. There is more interaction between longer chains due to the favorable free energy of two adjacent chains of -2 kJ/mol per CH2 groups in the chains. [[Image:lipidmove.jpg|thumb|lateral and transverse movement of fatty acid]]The presence of cholesterol also reduces membrane fluidity. Cholesterol is a steroid, containing four bulky hydrocarbon rings with a hydrophilic hydroxyl group at one end. In cell membranes, cholesterol is oriented parallel to the fatty acid chains of phospholipids, and its hydroxyl group will form hydrogen bond with the carbonyl oxygen of the nearby phospholipid head. The presence of cholesterol destroys the regular shape of the lipid bilayer, and hence interferes the noncovalent interactions among fatty acid chains. Therefore, the fluidity of the cell membrane decreases in the presence of cholesterol. This is the primary method by which eukaryotic cells vary the fluidity of their membrane. * Experiment: Fluorescence Recovery After Photobleaching (FRAP) FRAP is used to visualize the rapid lateral movement of membrance proteins. The cell-surface component is labeled with a fluorescent chromophore, and then the fluorescent molecules are destroyed (bleached) by an intense light. The fluorescent region is monitored as a function of time by using a lower level light to prevent further bleaching. The mobility of the labeled region is proved because the bleached molecules leave and unbleached ones come in, resulting in the increasing intensity of fluorescence. ===7. Eletrically Polarized=== [[File:Polarization of the plasma membrane.png|thumb|electrically polarized]] Membranes are electrically polarized since there is often a voltage difference between the interior and exterior of the cell. The cell plasma membrane is very resistive to voltage change while the fluids within the cell and beyond the cell is highly conductive. This is an important factor to cell transport and communication. The polarization is a result of ion transporters in the membrane, whose role is to maintain a proportion of ions between the interior and exterior regions of the cell. For voltages to occur there must be a separation of electric charges across the resistive membrane. In the case of cell membranes, there is a separation of sodium ions from anions of the inner membrane as well as a concentration gradient of potassium ions between the inner and outer regions of the cell. To prevent this gradient from dissipating, ion transporters, also known as pumps, constantly pump out ions to maintain the gradient with the aid of ATP as an energy source. Although this separation of ions uses up energy, the resulting potential is utilized for many processes of the cell. The potential can transport other ions of metabolites or initiate communication, for example the action potential in neurons of the nervous system. This property of cell membrane is vital not only to the membrane itself, but also to the life of the cell. == Lipid Vesicles == Lipid vesicles (or liposomes) are small, intracellular, membrane-enclosed bubbles of liquid within a cell. They are formed because of the properties of lipid membranes, where the hydrophobic chains are packed together so they are not in contact with the aqueous solution. A single bilayer separates the vesicle from the cytosol. Vesicles that have only one bilayer are called unilamellar vesicles. If they have more than one bilayer, they are called multilamellar vesicles. Vesicles are used to store, transport, digest products and waste at a cellular level, and organize cellular structure where there is a specific type of vesicle that does each function. The membranes surrounding the vesicles are similar to the plasma membrane of its cell. As a result, the vesicle is able to fuse and pass through the plasma membrane in order to ingest or release contents from the cell. Some common vesicles are lysosomes, vacuoles, and transport vesicles. Lysosomes are used to “break down” substances, usually food or waste, in the cell, vacuoles are used to store food and control osmosis, and transport vesicles are used to transport molecules within the cell.<gallery> File:Liposome.JPG|Simplified view of liposomes File:Tina Liposome.JPG|Magnified view of liposomes </gallery> Liposomes can be artificially created by sonicating phospholipids in an aqueous solution. Sonication involves the agitation by high-frequency sound waves. Liposomes can be created to contain molecules by having the molecules dissolved in the aqueous solvent. For example, Glycine can be dissolved in water with a phospholipid layer in the bottom of a beaker. After sonification, the solution is gel filtrated to remove any loose glycine that were still in solution. After this, there is only the aqueous solvent with the liposomes. Liposomes can be used for therapeutic purposes. Liposomes can carry drugs or can be used to carry genes for gene-therapy. By using liposomes, it lessens the toxicity of the drug. Liposomes deliver drugs and DNA by fusing with the plasma membranes of the target cell. == Archea versus Bacteria and Eukarya == [[Image:Archaeon membrane lipid3.jpg|thumb|400px|Membrane Lipid]]There are two major factors that differentiate the domains Archea and Bacteria, they are: phospholipids in Archean's cell membranes consist of ether linkages and [[Structural Biochemistry/Lipids/Fatty Acids|fatty acid]] hydrocarbon chains that are completely saturated and branched with a methyl group every 5 carbons. These simple structural differences provide Archeabacteria a way to survive the drastic differences in environment (compared to the environment bacteria are found in). The increase in survivability is conferred through two factors which affect the chemical properties of Archeabacteria membranes. The membranes are : 1. More '''resistant to hydrolysis''' (ether versus ester linkages) 2. '''Resistant to oxidation''' (branched saturated hydrocarbon chains) Another difference with Archea phospholipids is that the glycerol platform is inverted. However, this inversion is a structural difference that has little effect on its resistance to harsh environments. {{mergeto|Cell Biology}} ==Lipidomics== Lipidomics is an essential study involved in metabolomics and is the analysis of the structure and function of a living organism's lipids. Further studies have the potential to reveal the role of lipids in diseases like cancer. Mass spectometry is utilized often in lipidomics. ==References== {{reflist}} {{BookCat}} kq8qt2ymm5zi18mwhkf8m1m16jq4eof Choose Your Own Pyventure/Midclass Review 0 213315 4672080 4414987 2026-09-24T08:53:10Z R. Henrik Nilsson 3395618 experiements > experiments 4672080 wikitext text/x-wiki ==REVIEW== Okay, it's not ''all'' review. Some of it is new. The rest of it is review. These examples and questions should be challenging! Get in, and get dirty! The only way to learn to code is to try to make code. When it breaks: * take a deep breath * read the error message. They are often quite informative. * check your ** indentation ** matching parentheses / braces / brackets / quotes ** ego. We all make mistakes! If you're confused about anything here, seek out a more complete Python reference, or bring questions to class. === Dictionaries=== * dicts associate keys with values * are accessed through their keys * have no inherent order * Exercise: Create the dictionary D, which we'll use throughout the exercises. Note: we can use the dict() function to make a dictionary as well. <syntaxhighlight lang='python'> D = {'i':1, 'l': [1,2,3], 's': "my favorite string", d= dict(a=1,b=2)} </syntaxhighlight> What is broken here? Now try this. <syntaxhighlight lang='python'> D = {'i':1, 'l': [1,2,3], 's': "my favorite string", 'd': dict(a=1,b=2)} </syntaxhighlight> * what are the keys of D {{dynamic navigation |title = Answer |body = get all keys: d.keys() # this won't work since d isn't defined! D.keys() }} * what are the values? {{dynamic navigation |title = Answer |body = get values: D.values() }} * try to access the values of D {{dynamic navigation |title = Answer |body = Accessing: D['i'] D['d'] D['c'] # what happens when it doesn't exist? }} * try deleting a key-value pair from D {{dynamic navigation |title = Answer |body = delete using <code>del</code> del D['i'] del D['c'] }} * try adding a key-value pair to D: 'newkey' -> True {{dynamic navigation |title = Answer |body = adding: D['newkey'] = True }} * Examine the '''get''' method of dictionaries *# <code>help(D.get)</code> *# try: *#* D.get('i',"notfound") *#* D.get('c',"notfound") {{dynamic navigation |title = Answer |body = Help on built-in function get: get(...) D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. Bascially, return D[k] if k is in D, otherwise, return d. This saves our bacon from having a <code>KeyError</code> when a key isn't in the dictionary. }} * ''extra credit'': try dict(1='a'). Predict what will happen, and explain it. *# dict(a=1) *# dict('a'=1) *# dict(class=1) *# help(dict) {{dynamic navigation |title = Answer |body = <code>1</code> isn't a valid python variable name. The <code>dict()</code> function expects valid python identifiers, as described in the help. }} * ''extra credit'': What is the ''first'' element of D? {{dynamic navigation |title = Answer |body = Trick question! Dictionaries don't have inherent order! It may vary from machine to machine or from python version to python version. In any case, it's not something to rely on. }} ===Lists, Tuples, Strings=== List, tuples and strings are all [http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange python '''sequence types'''] * they are ordered * they are accessed by their index [0,..,n], unlike dictionaries, which are accessed by key * some are mutable (meaning the elements can change) * strings have additional methods like upper, lower, split etc. * sequences support slicing (see below) * construct <code>L,t,s</code> like this: L = [8,'a',[1,2,3],None,'b'] t = ('hallway', "a creepy hallway!") s = "a few of my favoirite strings" * try accessing different elements. L[0] s[1] t[2] L['a'] {{dynamic navigation |title = Answer |body = <code>L['a']</code> fails because sequences are accessed ''by index'' not ''by name''. }} * which ones are immutable? L[0] = 1 s[0] = 1 t[0] = 1 {{dynamic navigation |title = Answer |body = Tuples and Strings are immutable. Tuples imply that the positions ''mean something'', where lists can be appended to, deleted from, and the like.}} * '''extra credit''' experiments in slicing L[:2] L[2:] L[-3] L[10] L[::-1] ===Functions=== * make this function: yell_month(name,monthint) -> string that works like this: >>> yell_month('gregg', 1) 'January GREGG' >>> yell_month('mIRANda', 7) 'July MIRANDA' * try it using a dictionary, and if/elif/else statements {{dynamic navigation |title = Answer |body = two methods # here's one method, using a dict. def yell_month(name,monthint): months = {1: 'January', 2: 'February', } # etc. name = name.strip().upper() return months.get(monthint, "MONTHUARY") + " " + name # another, using if/else def yell_month(name,monthint): month = "SMARCH" if monthint == 1: month = "January" elif monthint == 2: month = "February" ... # lots of omitted code else: month = "SMARCH" name = name.strip().upper() return month + " " + name # which do you think is easier? }} ===Loops=== Sometimes we want to do things more than once. Computers don't get bored by repetitive work, and have infinite patience. Exploit this! ====Iterators==== Python has a magic appearing construct called <code>for...in</code>, that iterates over data structures. for element in thing: print element, type(element) Try iterating over our sequences, substituting our friends <code>D,s,t,L</code> for 'thing'. {{dynamic navigation |title = Answer |body = iterator example for thing in (D,s,t,L): print thing for element in thing: print element, type(element) }} ====While Loops==== The '''while''' constructor runs the body of the loop for as long as the '''condition is True'''. Here is an example: <syntaxhighlight lang='python'> def countdown(n): while n >= 1: print n n = n -1 print "liftoff" </syntaxhighlight> * try this with different values for n, like 0, 1, -1, 'a', None * write a function that counts up to a number. * final_countdown, which despite its name, uses a for loop <syntaxhighlight lang='python'> def final_countdown(): ''' print a version of Europe's 'The Final Countdown' ''' phrases = [ 'do de do dooo', 'do de do do dooo', 'de do de do', 'de do de do do de dooo' 'do de doo', 'do de do', 'do de do do deee dooooo', 'WEEEEE WOOOOOOOO', ] for phrase in phrases: print phrase </syntaxhighlight> ===='''extra credit''': make countdown wait==== What if we actually want the function to wait one second between loops? There is a python function called [[http://docs.python.org/library/time.html#time.sleep time.sleep]] that we can use. {{dynamic navigation |title = Example showing time.sleep |body = <syntaxhighlight lang='python'> import time def countdown(n, wait=1): while n >= 1: print n time.sleep(wait) n = n -1 print "liftoff" countdown(5,.5) </syntaxhighlight> }} ===='''extra credit''': <code>break</code> and <code>continue</code>==== * <code>break</code> breaks out of a loop * <code>continue</code> goes on to the repeat in the loop {{dynamic navigation |title = examples |body = example with continue and break: def cases_spaces_breaks(sentence): for letter in sentence: if letter == " ": break elif letter.islower(): continue elif letter.isupper(): print letter, "is uppity!" else: print letter, "is middle cased?" * try this out with various input sentences, to discover what it does }} ===The Standard Library=== Explore the [http://docs.python.org/library/index.html standard library]. * Choose a function or module, and experiment with it. * Tell the class which one you chose! * Show some code using it. * Describe its inputs and outputs. ====Get Dirty!==== Look at the [http://docs.python.org/library/exceptions.html standard exceptions (errors)], and see which ones you recognize. Try to write code that triggers these errors: * SyntaxError * KeyError * NameError * TypeError (hint: <code>int()</code> is a good candidate!) * IndexError * ImportError {{dynamic navigation |title = Answer |body = Generate some errors: a = '1 # SyntaxError {}['a'] # KeyError print fake_var # NameError int('a') # TypeError [1,2,3][8] # IndexError import fake # ImportError }} {{BookCat}} 1zyfrenqz32dxsv26g0bn7kxr4l77kn Structural Biochemistry/Polyermase Chain Reaction/Uses of PCR 0 214056 4672075 2259346 2026-09-24T08:48:02Z R. Henrik Nilsson 3395618 amplication > amplification 4672075 wikitext text/x-wiki PCR is a useful technique for scientists because it allows for the amplification and mutation of DNA. Through PCR, small quantities of DNA can be replicated by orders of magnitude, not only essentially preserving the sample if successful, but allowing for study on a much larger scale. Without PCR, the samples we could analyze and mutations we could induce and study would be limited by the amount of DNA we had to work with. Through PCR, that DNA is essentially limitless, allowing biochemists to induce various mutations in different genes for further study. Through site-directed mutagenesis or customized primers, individual mutations in DNA can be made. By changing the amino acids transcribed from DNA through individual mutations, the importance of those amino acids with respect to gene function can be analyzed. However, this process can be difficult, particularly when genes act in concert (with varying expression with respect to gene activity). The length of time it takes to run a successful PCR and perform other techniques before study can be done (protein expression, isolation, and purification, for example), makes biochemical research time-consuming and difficult. However, PCR, coupled with other biochemical techniques, allows us to analyze the very core of organisms and the processes by which they function. PCR is a reliable method to detect all mutations associated with genetic diseases, starting from insertion to deletions and much more. It can also be used to detect the presence of unwanted genetic materials, like infections and bacteria. For example, in diagnosis of diseases like AIDS, PCR can be used to detect the small percentage of cells that infected HIV. PCR also allows early diagnosis of unwanted diseases such as leukemia. PCR offers very simple and fast alternative. == PCR examples in research == [[Image:PCRnishapatrick.jpg‎|thumb|PCR run by Nisha Patel, UCSD Pediatrics, Sander Lab]] PCR is a highly, commonly used tool in research that allows researchers to amplify DNA segments with simple reactions that can be set up and finished within an hour. PCR in research is most used as a test to see if a gene is expressed in vivo. Such examples include PCR of mouse DNA in order to determine what genes that mouse carries. These mice, with specific target genes, can be studied to see the biological effects of such genes. Common PCR protocols in labs today include knockout genotyping, fluorescence genotyping, and mutant genotyping. Researchers can use PCR as a method of searching for genes by using primers that flank the target sequence of the gene along with all other necessary components for PCR. If the gene is present, the primers will bind and amplify the DNA, giving a band of amplified DNA on the agarose gel that will be run. If the gene is not present, the primers will not anneal and no amplification will occur. Amplification can occur in more that one spot in the DNA, that is why researchers can use DNA ladders to compare the relative length of the amplified strand (usually in bp). If the length of the gene is known, then researchers will know which bands to look for and which to possibly ignore. The term possibly ignore is used because PCRs are usually run with the DNA in question as well as controls, which can include DNA positive for the gene, DNA negative for the gene, and only reactants in the PCR reaction other than DNA. If there are bands positive for the gene in both the DNA negative and the only reactants reactions, as well as all other reactions, it is understood that some of the reactants are contaminated with positive DNA and should thus be thrown out and the PCR run again. This is an example of a gel run using PCR reaction products. The columns on the far left are 100bp ladders which track the movement of segments of 100, 200, 300, etc. base pairs. Each of the wells represents the DNA taken from a mouse. As seen in the picture, some mice lack one of the DNA sequences that would be amplified by use of the primers. Here it is seen how strong of a tool PCR can be in identifying the targeted sequences of DNA in respect to mice which carry those genes. Since mice of different genetic backgrounds can be distinguished, further conclusions about certain genes can be made. == PCR Applications == PCR can be used to isolate genomic DNA. This means that PCR can isolate DNA fragments from genomic DNA by amplifying a specific region of the parent DNA strand. Applications of PCR include generating hybridization probes for Southern and Northern Hybridization, DNA cloning, DNA sequencing, genetic fingerprinting, etc. '''Forensics''' An individual DNA profile is highly distinctive. PCR amplification of multiple genes is being used to establish biological parentage in paternity cases. Analyses of blood stains and semen samples by PCR have implicated guilt or innocence in numerous assault and rape cases. The root of a single shed hair or skin found at a crime scene contains enough DNA for typing by PCR. The power of PCR lies in how little DNA strands are required for the process to occur since amplification occurs exponentially. PCR also does not require knowledge of the targeted DNA sequence, rather it only requires the knowledge of the flanking DNA sequence. '''Evolutionary''' Large fragments of DNA can remain intact for thousands of years due to DNA's stability. Thus, PCR is ideal for amplifying ancient DNA molecules for evolutionary studies. PCR can also be used to amplify DNA from microorganisms that have not yet been isolated. == PCR amplification == PCR can analyze extremely small amounts of DNA sample and can amplify targeted regions of the DNA. == Quantification PCR == Quantification PCR is a method that can estimate the amount of sequence will be shown in a sample; this is normally applied to quantitatively to determine levels of gene expression. Real-time PCR is a tool for DNA quantification that measures the DNA product after each PCR amplification cycle. == PCR to diagnose diseases == PCR diagnosis of malignant diseases (i.e. leukemia) are being used routinely in cancer research. PCR assays can detect specific malignant cells at higher folds than any other methods when performing directly on the genomic DNA. This technique can identify mutations of certain growth control genes such as the ras gene. The capacity to greatly amplify selected regions of DNA can also be highly informative in monitoring cancer chemotherapy. PCR tests can detect when chancerous cells have been eliminated as well as detect a relapse. PCR can reveal the presence of human immunodeficiency virus in people who have not mounted an immune response to this pathogen (which would otherwise be missed with an antibody assay). Finding Mycobacterium tuberculosis bacilli in tissue specimens is slow and laborious, but with PCR as few as 10 tubercle bacilli per million human cells can be readily detected. {{BookCat}} o2pm2x2vccsm2i4vu0z1szjx9wxvkee How to Think Like a Computer Scientist: Learning with Python 2nd Edition/GASP 0 225744 4672085 4666199 2026-09-24T09:03:25Z R. Henrik Nilsson 3395618 Refrence > References 4672085 wikitext text/x-wiki = Graphics API for Students of Python: GASP = == Introduction == ''Describe gasp here...'' == Coordinates == (0, 0) is at the bottom left of the window. The window is 640 pixels by 480, by default. (You can make it a different size if you want to.) Coordinates are given in units of one pixel. All functions that take coordinates take them as a tuple (x, y). == Colors == To access the color module GASP has to offer. Call <code>color.*</code> where <code>*</code> is the color you wish to call. For example: ` color.BLACK ` This is the color black. Check out the gasp color reference chart to see all of the available color options. == The Essentials == These are the essentials. ` from gasp import * ` imports the gasp module, <code>begin_graphics()</code> starts the graphics window, and <code>end_graphics()</code> quits the graphics window and ends the program. It's dead simple, but also dead necessary. == Graphics Functions == === begin_graphics() === This creates a graphics window with the dimensions 800x600, a title of My Game , and a background color of yellow. With no arguments you get a white 640x480 graphics window titled Gasp . ; width : The width of the window in pixels. ; height : The windows height in pixels. ; title : A string that will be the title of the window. ; background : It is the background of the graphics window. It can either be a color or an image === end_graphics() === Ends a graphics window. === clear_screen() === Clears everything off of the graphics window. It looks like a new graphcs window as if you just called begin_graphics(). === remove_from_screen() === removes those objects from the screen ; obj : A screen object of a list of screen_objects you would like to remove from the screen == Screen Objects == The objects that you will be displayed in your graphics window. You can manipulate these objects using the screen object methods === Plot === It puts a dot on the screen. ; pos : The coordinate on the screen that you wish to plot. ; color : The color you wish the dot to be. ; size : An integer that determines the size the of the dot === Line === Creates a line on the screen. ; start : The starting coordinate of the line. ; end : The coordinate at which the line will end. ; color : The color of the line === Box === This creates a Box on the screen ; center : A coordinate where the center of your box will be. ; width : The width in pixels of the box. ; height : The height of the box in pixels. ; filled : A boolean value that determines if your box will be filled ; color : The color of your box. ; thickness : The thickness in pixels of your box's lines. === Polygon === Creates a polygon on the screen ; points : A list of coordinates that is each point on the polygon. The must be more than two items in the list ; filled : A boolean value. If it is False the polygon will not be filled. Else, the polygon will not be filled ; color : The color of the polygon's lines ; thickness : An integer that determines the thickness of the lines. === Circle === Draws a circle, its <code>center</code> is a set of coordinates, and the <code>radius</code> is in pixels. It defaults to not being filled and the color black. ; center : The circle's center coordinate. ; width : An integer that is the radius of the circle ; filled : A boolean value that determines if your circle will be filled ; color : The color of your circle. ; thickness : The thickness in pixels of the circles lines. === Arc === Creates an arc on the screen. ; center : A coordinate that is the center of the arc. ; radius : An integer that is the distance between the center and the outer edge of the arc. ; start_angle : The start angle in degrees of the arc ; end_angle : The end angle in degrees of your arc ; filled : A boolean value that if True it fills the arc ; color : The color the arc ; thickness : The thickness in pixels of the arc === Oval === Puts an oval on the screen wherever you want. ; center : The center coordinate of the Oval ; width : The width in pixels of the oval ; height : The height of the oval in pixels ; filled : A boolean value determining if the oval will be filles or not. ; color : The oval's color ; thickness : The thickness of the ovals lines === Image === Loads an image onto the screen. If you only pass a width and not a height it automatically scales the height to fit the width you passed it. It behaves likewise when you pass just a height. ; file_path : The path to the image ; center : The center coordinates of the image ; width : The width of the image in pixels. If width equals None then it defaults to the image file's width ; height : The height of the image in pixels. If no height is passed it defaults to the image file's height == Screen Object Methods == The methods that manipulates screen objects === move_to() === Move a screen object to a pos ; obj : A screen object you wish to move. ; pos : The coordinate on the screen that the object will move to === move_by() === Move a screen object relative to it's position ; obj : The screen object you wish to move ; dx : How much the object will move in the 'x' direction. Positive or negative. ; dy : How much the object will move in the 'y' direction. A pixel value. === rotate_to() === Rotate an object to an angle ; obj : The screen object that will be rotated ; angle : The angle in degrees that the object will be rotated to === rotate_by() === Rotate an object a certain degree. ; obj : The screen object you wish to rotate ; angle : The degree that the object will be rotate. Can be positive or negative. == Text == === Text() === Puts text on the screen ; text : A string of the text that will be displayed ; pos : The center coordinate of the text ; color : The color of the text ; size : The font size == Mouse == === mouse_position() === Returns the current mouse coordinate === mouse_buttons() === returns a dictionary of the buttons state. There is a 'left', 'middle', and 'right' key. == Keyboard == === keys_pressed() === returns a list of all of the keys pressed at that moment. == Gasp Tools == === screen_shot === Saves a screenshot of the current graphics screen to a png file. ; filename : The file path relative to the current directory that the image will be written to. {{BookCat}} 3w7gt5ye82712aaf45bj51ng0o8wcpd Aros/Platforms/x86 Complete System HCL 0 237398 4671987 4671605 2026-09-23T17:35:39Z Jeff1138 301139 4671987 wikitext text/x-wiki {{ArosNav}} ==Introduction== This a list of computer hardware tested with mostly native AROS installs and, in the recommended sections, of virtual machines With 64bit support it is recommended 8Gb ram is needed and that SSE 4.1 and AVX are supported in the CPU i.e. from year 2012 for Intel CPUs and 2013 for AMD CPUs. They are x86-64 instruction sets designed to perform the same operations on multiple data items simultaneously, a technique known as Single Instruction, Multiple Data (SIMD). This allows for increased performance in tasks involving parallel computation. SSE 4.1 is a 128-bit SIMD instruction set, while AVX introduced 256-bit SIMD, further enhancing performance. Some apps require these features to run well, like 3D, multimedia decoding or JIT (javascript) in Odyssey web browser. If not the apps may work slower or might fail. If you have encountered differently (i.e. problems, incompatibilities, faults, annoyances, environment, errors, review of setup etc) please update this information. Please bear in mind that AROS has only a few hardware driver developers, whilst Linux counts in the tens and Windows in the hundreds. [[#Laptops]] [[#Netbook]] [[#Desktop Systems]] [[#AMD Sockets]] [[#Intel Sockets]] [[#Recommended hardware (32-bit)]] [[#Recommended hardware (64-bit)]] === Laptops === [[#top|...to the top]] * 2006/2007 Dell Latitude D-series laptops - business class machines, good support in Aros, easy to replace wifi card * 2006 some [https://www.techradar.com/reviews/pc-mac/laptops-portable-pcs/laptops-and-netbooks/toshiba-satellite-pro-a200-28550/review Satellite Pro A200] * 2008 For the tiny carry anywhere, the early run of Acer Aspire netbooks Rough estimate from taking a random laptop notebook what you can expect from a Native install of AROS {| class="wikitable sortable" width="100%" ! width="10%" |Date ! width="5%" |Overall ! width="5%" |Gfx VESA ! width="5%" |Gfx 2D Acceleration ! width="10%" |Gfx 3D Acceleration ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="10%" |Wireless ! width="20%" |Comments |- | Before 2002 || Poor to OK || VESA 90% || 2D 10% || {{N/A}} || Audio 10% || 40% || Wired 70% || 2% || Max RAM 512MB |- | 2002-2005 || OK || VESA 95% || 2D 10% || 3D 0% || Audio 30% || 70% || Wired 50% || 10% || Max RAM 2GB (for 32bit) |- | 2005-2012 || Good || VESA 98% || 2D 60% || 3D 30% || Audio 40% || 80% || Wired 30% || 10% || Max RAM 3Gb (32bit) to 8GB (64bit) |- | 2013-2017 || OK || VESA 98% || 2D 60% || 3D 30% || Audio 30% || 60% || Wired 30% Realtek || 0% || Max RAM 8GB / 16GB better to go Intel / AMD Ryzen over AMD A series |- | 2018-2024 || OK || VESA 98% || 2D 30% || 3D 30% || Audio 40% || 50% || Wired 30% Realtek || 0% || Max RAM 32GB better 64bit options |- | 2025-202x || Poor || VESA 95% || 2D 10% || 3D 10% || Audio 0% || 30% || Wired 10% || 0% || Max RAM 64GB AI disruption of previous hardware |- |} 3D tests now conducted with apps found in Demos/AROS/Mesa and run at default size (may need to View As -> Show All to see them. Any laptop with Windows 7(TM) 64bit or higher install, the bios and hard drive set in uefi/gpt mode (install of AROS incompatible) Most vendor suppliers get OEM (original equipment manufacturers) to make their laptops. These brand name companies purchase their laptops from *80% ODM (Original Design Manufacturer) such as Quanta, Compal, Wistron, Inventec, Foxconn (Hon Hai), Flextronics and Asus (now Pegatron) *20% MiTAC, FIC, Arima, Uniwill, ECS, Tonfang Origin and Clevo {| class="wikitable sortable" width="100%" | <!--OK-->{{Yes|'''Works well'''}} || <!--May work-->{{Maybe|'''Works a little'''}} || <!--Not working-->{{No|'''Does not work'''}} || <!--Not applicable-->{{N/A|'''N/A not applicable'''}} |- |} ====Acer/Gateway/Emachines==== Company founded under the name of Multitech in Taiwan in 1976, renamed to Acer or Acer Group in 1987 Order of build quality (Lowest to highest) <pre > Packard Bell Aspire Extensa TimeLine Travelmate </pre > {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="2%" |Ethernet ! width="5%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Travelmate 505 506 507 508 Series || <!--Chipset-->P2 Celeron 466Mhz || <!--IDE-->{{Yes|boots}} || <!--SATA--> || <!--Gfx-->{{Maybe|use VESA Neo Magic Magic Graph 128XD (NM2160)}} || <!--Audio-->{{No|AC97 Crystal CS}} || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->1998 minimal support but no audio etc - 506T, 506DX, 507T, 507DX, 508T |- | <!--Name-->TravelMate 340 342 343 345 347 || <!--Chipset-->ALi M1621 with piii || <!--IDE--> || <!--SATA--> || <!--Gfx-->Trident Cyber 9525 || <!--Audio-->{{No|ESS ES1969 Solo-1}} || <!--USB-->2 ALi OHCI USB 1.1 || <!--Ethernet-->a few have Intel e100 || <!--Wireless-->{{N/A}} || <!--Test Distro--> || <!--Comments-->2000 32bit - 340T, 341T, 342T, 342TV, 343TV, 345T, 347TV |- | <!--Name-->TravelMate 350 351 352 353 || <!--Chipset-->Ali with piii || <!--IDE-->{{Yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->Trident Cyber Blade DSTN/Ai1 || <!--Audio-->{{No|ali5451}} || <!--USB-->2 USB 1.1 Ali M5237 OHCI || <!--Ethernet-->e100 || <!--Wireless-->Acer InviLink IEEE 802.11b || <!--Test Distro--> || <!--Comments-->2001 32bit very limited support but no support for PCMCIA O2 Micro OZ6933 - 350T, 351TEV, 352TEV, 353TEV |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->TravelMate 610 series 611 612 613 614 || <!--Chipset-->815 P3 || <!--IDE--> || <!--SATA-->{{N/A}} || <!--Gfx-->Intel 82815 cgc || <!--Audio-->AC97 || <!--USB-->USB 1.1 || <!--Ethernet-->Intel e100 pro || <!--Wireless-->{{N/A}} || <!--Test Distro--> || <!--Comments-->2001 32bit - 610TXVi 610T 611TXV 612TX 613TXC |- | Aspire 3003LM || SIS AMD 3000 1.8GHz || {{yes}} || {{N/A}} || {{maybe|SIS AGP M760GX (VESA only)}} || {{yes|AC97 SIS codec}} || 3 USB 2.0 || {{yes|SIS900}} || {{no|Broadcom BCM4318 AirForce One 54g}} || Icaros 1.2.4 || 2003 sempron |- | Travelmate 2310 Series ZL6 || Intel Celeron M 360 1.4GHz with SiS 661MX || {{yes}} || {{N/A}} || {{maybe|SiS Mirage M661MX (VESA only)}} || {{yes|SIS SI7012 AC97 with realtek ALC203 codec speakers only}} || || {{yes|SIS900}} || {{N/A|LM version has pci card slot but no antenna}} || 2017 Icaros 2.1.1 || 2004 32bit - No USB boot option but boot from DVD - reports of wifi losing connection (isolate/remove the metallic grounding foil ends of the antennas) - 2312LM_L - |- | <!--Name-->Aspire 3000 3002LMi 3500 5000 || <!--Chipset-->AMD CPU W-with SIS M760 || <!--IDE--> || <!--SATA--> || <!--Gfx-->SIS 760 || <!--Audio-->SIS || <!--USB--> || <!--Ethernet-->SIS 900 || <!--Wireless-->{{No|Broadcom BCM4318 swap for Atheros}} || <!--Test Distro--> || <!--Comments-->2005 32bit |- | <!--Name-->Aspire 3050 5020 5050 || <!--Chipset-->AMD Single and Turion MK-36 Dual and RS480 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Use VESA - RS482M Xpress 1100 or RS485M Xpress 1150 || <!--Audio-->HD Audio Realtek ALC883 || <!--USB--> || <!--Ethernet-->8139 || <!--Wireless-->Atheros 5006G or Broadcom BCM 4318 || <!--Test Distro--> || <!--Comments-->2005 32bit MK36 gets very hot |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->TravelMate 2410 2420 2430 series || <!--Chipset-->915GM || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel Mobile 915GMS 910GML || <!--Audio-->Intel AC97 ICH6 with ALC203 codec || <!--USB-->4 USB2.0 || <!--Ethernet-->Realtek RTL-8139 || <!--Wireless-->Atheros 5005GS || <!--Test Distro--> || <!--Comments-->2005 32bit 2428AWXMi - |- | <!--Name-->Acer Aspire 3610 - WISTRON MORAR 3614WLMI || <!--Chipset-->Intel 915 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Yes|Intel GMA 2D and 3D}} || <!--Audio-->{{yes|[http://www.amiga.org/forums/showpost.php?p=644066&postcount=13 AC97]}} || <!--USB--> || <!--Ethernet-->{{yes|RTL 8139 8139C+}} || <!--Wireless-->{{Maybe|Atheros AR5001X+, AR5BMB5 or Broadcom 4318}} || <!--Test Distro--> Icaros 1.2.4 || <!--Comments-->2005 32bit with good support [http://ubuntuforums.org/showthread.php?p=6205188#post6205188 wifi issues] |- | <!--Name-->TravelMate 2480 series 2483 WXMi (HannStar J MV4 94V) 2483NWXCi Aspire 3680, 3690 || <!--Chipset-->940GML i943 with Celeron 430 1.77GHz - 14.1" || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes| }} || <!--Gfx-->{{Yes|2D and 3D openGL 1.x - Tunnel 181 gearbox 104 scores}} || <!--Audio-->{{Yes|HD Audio with ALC883 codec playback}} || <!--USB-->{{Yes|3 USB 2.0}} || <!--Ethernet-->{{No|Marvell 88E8038 yukon sky2}} || <!--Wireless-->{{No|Atheros 5k AR5005G AR5BMB5 mini pci}} suspect laptop hardware issues || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2006 Works well shame about the internet options - noisy fan - poor battery life - no boot option for TI based mass storage sd card - Max 2GB memory - LCD Inverter Board IV12090/T-LF - |- | <!--Name-->TravelMate 2490 series 2492WXMi || <!--Chipset-->940GML || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Yes|Intel 945 2D and 3D tunnel 164 gearbox 105}} || <!--Audio-->{{Yes|HD Audio}} || <!--USB--> || <!--Ethernet-->{{Maybe|Broadcom BCM4401}} || <!--Wireless-->{{No|Atheros AR5005GS suspect hardware issue}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2006 32bit - 15inch screen - strange curved up at ends keyboard style - overall plastic construction - Atheros AR5005G(s) - |- | <!--Name-->Gateway ML6227B MA7 || <!--Chipset-->Celeron M 520 1.6Ghz with 945GM || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{Yes|945GM 2D and 3D tunnel 169 gearbox 132}} || <!--Audio-->{{No|HDA Intel with STAC9250 codec}} || <!--USB--> || <!--Ethernet-->{{No|Marvell 88E8038}} || <!--Wireless-->{{No|8187L but swap ath5k mini pcie}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2006 15.4 ultrabrite widescreen - Wifi Switch on side Fn/F2 - |- | <!--Name-->Acer Aspire 5630-6796 6288 BL50 || <!--Chipset-->T5200 T5500 Intel® Core™2 Duo T7200 T7400 T7600 || <!--IDE-->{{Yes| }} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Yes|Intel® GMA 950 with S-Video out with 2D and 3D}} || <!--Audio-->{{Yes|HDAudio with ALC883? codec}} || <!--USB-->{{Yes|4 USB}} || <!--Ethernet-->{{yes|Broadcom BCM4401}} || <!--Wireless-->{{No|Intel 3945abg swap for Atheros 5K}} || <!--Test Distro-->Tiny AROS || <!--Comments-->2006 - 64bit 39.1 cm (15.4" 1280 x 800) - 2 DDR2-SDRAM slots max 4GB - green mobo?? - |- | <!--Name-->Acer Aspire 5633WMLI BL51 || <!--Chipset-->T5500 with Intel® 945PM/GM Express || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE mode}} || <!--Gfx-->{{Yes|Nvidia Go 7300 with 2D and 3D}} || <!--Audio-->{{Yes|HD Audio with Realtek codec}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{yes|Broadcom 440x}} || <!--Wireless-->{{No|Intel 3945 swap for Atheros 5k}} || <!--Test Distro-->Tiny Aros || <!--Comments-->2007 64 bit dual core2 - 15.4 WXGA screen - ddr2 max 4gb - OrbiCam no support - ENE chipset SD card - blue mobo?? - |- | <!--Name-->Acer Aspire 9410 9420 || <!--Chipset-->Intel Core Duo with 945PM Express || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes| }} || <!--Gfx-->{{Yes|2D NVIDIA GeForce Go 7300 - 128 MB VRAM G72M}} || <!--Audio-->{{Yes|Intel HD audio with codec}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{Yes|rtl8169 8111 }} || <!--Wireless-->{{No|Intel 3945ABG but could swap with atheros 5k}} || <!--Test Distro-->Icaros 2.3 || <!--Comments-->2007 32bit - 17in TFT 1,440 x 900 WXGA+ - 2 ddr2 sodimm slots max 4gb - |- | <!--Name-->eMachines E510 series KAL10 || <!--Chipset-->Intel Celeron M 560 2.13Ghz with PM965 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel x3100 || <!--Audio-->{{Yes|Intel with codec}} || <!--USB-->Intel || <!--Ethernet-->{{No|Broadcom BCM5906M}} || <!--Wireless-->{{No|Atheros G AR5BXB63 bios issue??}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2007 32bit very budget machine with InsydeH20 bios and F10 boot menu |- | <!--Name-->ACER Aspire 5920 [http://tim.id.au/laptops/acer/aspire%205920g.pdf 5920G] || <!--Chipset-->Santa Rosa Core 2 Duo T7300 T7500 later T9300 with GM965 and PM965(G) Express || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Maybe|use VESA for X3100M or 8600M GS (rev a1) 9500M GT 256MB vram (G) but some AMD/ATI RV635 M86 HD 3650}} || <!--Audio-->{{No|HD Audio with realtek alc268, [https://forums.opensuse.org/t/no-sound-on-acer-aspire-5920g/32392 ALC883] or Realtek ALC1200 / alc888s codec ICH8}} || <!--USB-->{{Yes|USB2 }} || <!--Ethernet-->{{No|Broadcom BCM5787M}} || <!--Wireless-->{{unk|Intel 3945ABG 4965 or Atheros 9k AR9285}} || <!--Test Distro-->Deadwood test iso 2023-01 2023-11 || <!--Comments-->2008 64bit boot with 'noacpi' or 'noioapic' - 15.4in 1280 x 800 pixels 16:10 - BMW Designworks ‘Gemstone’ design - over 3.0kg with options for 8-cell or 6-cell batteries - 2 SODIMM DDR2 667MT/s max 4GB - synaptics touchpad - |- | <!--Name-->Acer A0521 Ao721 || Athlon II Neo K125 + AMD M880G || {{N/A}} || {{maybe| }} || {{maybe|ATI Radeon HD 4225 (VESA only)}} || {{No|Conexant}} || {{Maybe| }} || {{no|AR8152 l1c}} || {{unk|AR9285 ath9k}} || AspireOS 1.7 || 2006 64bit possible |- | <!--Name--> Extensa 5630Z || <!--Chipset-->T6600 with Intel GL40 Express || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe|IDE mode}} || <!--Gfx--> {{Yes|Intel GMA 4500M HD (2D)}} || <!--Audio--> {{Yes|HD Audio}} || <!--USB--> {{Yes|USB 2.0}} || <!--Ethernet--> {{No|Broadcom BCM 5764M}} || <!--Wireless--> {{No|RaLink RT2860}} || <!--Test Distro--> || <!--Comments-->2008 64bit |- |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Aspire 5250 series 5253 BZ400 BZ602 || <!--Chipset-->E350 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{no|VESA 2D for AMD HD6310}} || <!--Audio-->{{yes|HDaudio for codec Conexant CX20584}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no|Atheros AR8151}} || <!--Wireless-->{{no|Atheros 9k AR5B97}} || <!--Test Distro--> || <!--Comments-->2011 64bit does not support AVX or SSE 4.1 - |- | <!--Name-->Aspire V5 V5-121 V5121 AO725 One 725 || <!--Chipset-->AMD C-70 C70 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{no|VESA for AMD 6290G}} || <!--Audio-->{{no|Realtek ALC269 codec}} || <!--USB-->{{yes|2 x USB2}} || <!--Ethernet-->{{no|Broadcom}} || <!--Wireless-->{{no|Broadcom}} || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - |- | <!--Name-->Aspire V5-122P MS2377 || <!--Chipset-->C-70 C70 with M55, AMD A4-1250 or A6 1450 up to 1.4Ghz || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->AMD 8210 || <!--Audio-->{{unk|HDaudio with codec}} || <!--USB-->{{maybe|FCH USB EHCI OHCI}} || <!--Ethernet-->{{Maybe|rtl8169 but LAN/VGA Combo Port Cable (AK.LAVGCA 001) or MiniCP port to Acer Converter Cable (Mini CP to VGA/LAN/USB) (NP.OTH11 00C) needed}} || <!--Wireless-->{{unk|Atheros 9k AR9565}} || <!--Test Distro-->Aros One || <!--Comments-->2012 64bit but no sse4 or avx - 26w battery internal, extension possible - 11.6in 1366 x 768 ips touchscreen - 7mm hd ssd - 2gb ddr3l soldered with 1 slot free max 4GB - bios hacking needed for virtualisation - |- | <!--Name-->Packard Bell EasyNote TE69 TE69KB 522 || <!--Chipset-->slow E1-2500, E2-3800 2c2t Dual or A4-5000 4c4t Quad both soldered BGA769 (FT3) on Hudson-2 FCH || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe|Use IDE mode}} setting AHCI to IDE mode - boots if UEFI set to Legacy || <!--Gfx-->{{Maybe|VESA 2D for ATI Radeon 8120 8240, 8320, 8330 or 8280 islands}} || <!--Audio-->{{Yes|HDAudio with ALC282 0x10ec, 0x0282 codec but not HDMI}} || <!--USB-->{{Yes|Bios, Boot, set Boot mode to Legacy, nothing from USB3}} || <!--Ethernet-->{{No|Atheros AR8171 AR8175 or Broadcom BCM57780}} || <!--Wireless-->{{unk|Atheros AR9565 0x1969 0x10a1}} || <!--Test Distro-->Aspire OS Xenon and AROS One 1.6 usb || <!--Comments-->2013 64bit with sse4.1 and AVX - 15.6in washed out screen big netbook - Boots with noacpi after using F2 to enter EFI firmware and f12 boot device - 2 ddr3 sodimm slots max 16Gb - |- | <!--Name-->ASPIRE Acer Aspire ES1-520 521 522 Series N15C4 ES1-523 || <!--Chipset-->AMD AMD E1-7010, A8-7410 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{partial|VESA for RADEON R5}} || <!--Audio-->{{no|Realtek ALC 233 or CX20752 HD AUDIO CODEC}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{no|Atheros AR8151 Gigabit or Broadcom 590x}} || <!--Wireless-->{{no|Realtek RTL8187 or 8812BU}} || <!--Test Distro-->Aros One || <!--Comments-->2015 64bit with sse4.1 and AVX - 2 ddr3l slots - keyboard connected to top case - |- | <!--Name-->Acer Aspire V15 NITRO Black edition || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->GTX 860M || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2015 64bit |- | <!--Name-->Predator 15 (G9-591-) (G9-593-72VT) || <!--Chipset-->Intel i7-6700HQ || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->GTX 960M to 980M, GTX 1060 || <!--Audio-->{{unk|HDAudio with Realtek ALC255 @ Intel Sunrise Point PCH High Definition Audio Controller}} || <!--USB-->USB3 || <!--Ethernet-->{{no| }} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2015 64bit - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Nitro 5 an515-42 || <!--Chipset-->Ryzen 2500u || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->AMD rx560x || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2018 64bit - |- | <!--Name-->aspire 3 A315-41 || <!--Chipset-->Ryzen 2500u || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->AMD Vega || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2018 64bit - |- | <!--Name-->swift 3 sf315-41 || <!--Chipset-->Ryzen 2500u || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->AMD Vega || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2018 64bit - |- | <!--Name-->Acer Aspire 3 A315-23 || <!--Chipset-->AMD Ryzen 3020e, r3 3200u || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD || <!--Audio-->{{unk|HDAudio with codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe| }} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2019 64bit - |- | <!--Name-->Aspire 3, 5 A515-44-R0ZN || <!--Chipset-->AMD Ryzen 5 4500u || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{unk|HDAudio with ALC codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2020 64bit - 14in or 15.6" 1080p - 19v round charging - [https://www.youtube.com/watch?v=vr0tC3QJWxk repair], 4gb soldered with 1 ddr4 sodimm slot - |- | <!--Name-->Swift 3 SF314-42 series N19C4 , Swift SF315-4 || <!--Chipset-->Ryzen 5 4500U, 7 4700U|| <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD || <!--Audio-->{{unk|HDAudio with codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2020 64bit 1080p - small round ac 19v 3.42A or usb-c - mobo FH4FR LA-J731P - |- | <!--Name-->Acer Swift 3 SF314-43, Swift SF315-41 || <!--Chipset-->Ryzen 7 5700U || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD || <!--Audio-->{{unk|HDAudio with codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2021 64bit 1080p - small round ac or usb-c - |- | <!--Name-->Aspire 5 A515-45 || <!--Chipset-->r7 5700U || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->AMD || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2021 64bit - 15.6in 1080p - asus round ac - |- | <!--Name-->Aspire 5 A515-47 || <!--Chipset-->ryzen 5 5625U, || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->AMD || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2021 64bit - 15.6in 1080p - asus round ac - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====Asus==== [[#top|...to the top]] {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Asus L8400-K Medion MD9467 || <!--Chipset-->Intel desktop 850MHz || <!--IDE--> || <!--SATA--> || <!--Gfx-->S3 Savage MX || <!--Audio-->{{No|ESS allegro 1988}} || <!--USB--> || <!--Ethernet-->Realtek 8139 || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2001 32bit |- | <!--Name-->Asus L2000 L2400 L2D Series Medion 9675 || <!--Chipset-->Athlon 4 mobile || <!--IDE--> || <!--SATA--> || <!--Gfx-->use vesa sis630 || <!--Audio-->{{No|sis7018}} || <!--USB--> || <!--Ethernet-->sis900 || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2002 32bit |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->x51R X51RL || <!--Chipset-->Duo T2250 T2330 with RS480 || <!--IDE--> || <!--SATA-->{{N/A}} || <!--Gfx-->{{Maybe|use VESA RC410 [Radeon Xpress 200M]}} || <!--Audio-->{{Yes|HD with codec}} || <!--USB-->{{Maybe|boots and detects}} || <!--Ethernet-->{{Yes|RTL-8139}} || <!--Wireless-->{{No|Atheros AR5006EG AR5111 ath5k AzureWave AW-GE780 - could be ATI Chipset}} || <!--Test Distro-->Icaros 2.2, deadwood 2021, || <!--Comments-->2003 32bit 15.4 WXGA - 19v barrel - ESC boot select - F2 bios - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Asus R2H Ultra Mobile PC UMPC || <!--Chipset-->Celeron 900Mhz 910GML || <!--IDE--> || <!--SATA--> || <!--Gfx-->GMA900 || <!--Audio-->Ac97 ALC880 || <!--USB--> || <!--Ethernet-->realtek 8169 8101e || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2004 32bit [https://www.youtube.com/watch?v=Jm4fOrqyj3g boots] |- | <!--Name-->Asus A3 series A3F Ergo Ensis 211 RM || <!--Chipset-->P-M 1.6GHz to Core Duo with 950 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 945 || <!--Audio-->Ac97 ALC655 || <!--USB--> || <!--Ethernet-->Realtek 8100CL 10/100 || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2004 32bit only |- | <!--Name-->Z33 || <!--Chipset-->915 || <!--IDE--> || <!--SATA--> || <!--Gfx-->915GM || <!--Audio-->HD Audio ALC880 || <!--USB--> || <!--Ethernet-->Realtek 8139 || <!--Wireless-->Intel 2915ABG || <!--Test Distro--> || <!--Comments-->2005 32bit Z33A Z33AE N5M N5A |- | Z70A Z70V Z70Va M6A z7000 z7000a || i915 + ICH6 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{yes|mobile 915GML}} || <!--Audio-->{{no|ICH6 HD Audio}} || <!--USB-->{{yes|USB2.0}} || <!--Ethernet-->{{no|Marvell 88E8001}} || {{no|Intel PRO 2200BG Fn / F2}} || Icaros 1.3 || 2005 32bit |- | [http://www.progweb.com/en/2010/09/linux-sur-un-portable-asus-a6jm/ A6jm] A6JC || 945GM || IDE || SATA || {{yes|nVidia GeForce Go 7600 G70}} || {{no|HD Audio}} || {{yes|USB}} || {{yes|RTL8111 8168B}} || {{no|Intel 3945 ABG}} || Icaros 1.2.4 || 2006 32bit only |- | <!--Name-->F3Jc || <!--Chipset-->945PM || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->G72M Quadro NVS 110M, GeForce Go 7300 || <!--Audio-->D audio || <!--USB--> || <!--Ethernet-->realtek 8169 8111 || <!--Wireless-->Intel 3945 || <!--Test Distro--> || <!--Comments-->2007 32bit - |- | <!--Name-->X50GL F5GL || <!--Chipset-->T5800 with 965 || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe}} || <!--Gfx-->{{Maybe|use VESA 2d - Nvidia 8200M G84 runs hot}} || <!--Audio-->{{No|HD Audio MCP79 with codec}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|MCP79}} || <!--Wireless-->{{No|Atheros AR5B91 AW-NE77}} || <!--Test Distro-->Icaros 2.2 || <!--Comments-->2008 64bit not much support no display with nouveau - 19v barrel - ddr2 max 4gb - |- | <!--Name-->ASUS G50 & G51 series G50V G50Vt G51V G51VX G51J G51Jx G50VT X1 X5 ROG || <!--Chipset-->AMD64 with MCP71 || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes}} || <!--Gfx-->nVidia GeForce 9800M GS (G94M) up to GT200 [GeForce GTX 260M] (G92M) || <!--Audio-->Nvidia HD Audio with codec || <!--USB--> || <!--Ethernet-->{{No|Atheros L1C atl1c}} || <!--Wireless-->Atheros G or Intel || <!--Test Distro-->Icaros 2.3 || <!--Comments-->2009 64bit not all GPUs are failing but a much higher % failing early, 8x00 and 9x00 G84, G86, G92, G94, and G96 series chips dying - ddr2 max 4gb - |- | <!--Name-->M50V M50 series || <!--Chipset-->Intel Core 2 Duo P8400 or T9400 with Intel PM45 ICH9 || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|BIOS set to compatibility IDE mode}} || <!--Gfx-->NVIDIA GeForce 9600M GS or 9650M GT || <!--Audio-->HDAudio with Realtek ALC663 || <!--USB-->USB2 || <!--Ethernet-->{{Yes|rtl8169 realtek 8169 8111C}} || <!--Wireless-->{{unk|Intel 5100 or Atheros AR928X}}|| <!--Test Distro-->AROS One 2.0 USB || <!--Comments-->2009 64bit - 15.40 inch 16:10, 1680 x 1050 glossy - the "Infusion" design - heavy 3kg - ddr2 ram max 4gb - |- | <!--Name-->Series F9 F9E F9dc F9f F9j F9s || <!--Chipset-->965GM || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{maybe|Vesa}} || <!--Audio-->{{yes|HD Audio ALC660 playback}} || <!--USB-->{{yes|works}} || <!--Ethernet-->{{yes|RTL8169 }} || <!--Wireless-->{{no|intel 3495 not working}} || <!--Test Distro-->Icaros 1.41 || <!--Comments-->2009 64bit - ddr2 max 4gb - |- | P52F SO006X || i3-370M || IDE || SATA || {{yes|nVidia G92 [GeForce 9800 GT] (2D)}} || {{no|Intel HD Audio}} || {{yes|2 USB2.0}} || {{no|Atheros AR8121 AR8113 AR8114 (l1e)}} || {{dunno}} || Icaros 1.3 || 2010 64bit - ddr3 slot - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Asus * X53U MB Ver K53U or K52U Asus K53U MB Ver K53U * A53U XT2 X53B MB ver: K53BY (compal) || <!--Chipset-->Slow atom like speed E-350 (2011), E-450 (2011) on AMD M780G, much slower C-50 C50 (2012), C-60 C60 on the AMD A50M dark brown plastic build || <!--IDE-->{{N/A|}} || <!--SATA-->{{yes|Set IN Bios IDE MODE}} || <!--Gfx-->{{Maybe|use VESA ATi 6310M, 6320M later 6250M or 6290M}} || <!--Audio-->{{Yes|HD audio with alc269 codec Altec Lansing® Speakers}} || <!--USB-->{{Yes|3 x USB2}} || <!--Ethernet-->{{Unk|rtl8169 with RTL8111 phy}} || <!--Wireless-->{{unk|Atheros half height ar9285}} || <!--Test Distro-->2016 Icaros 2.1.2 and 2018 AROS One 1.6 USB || <!--Comments-->2011 64bit does not support AVX or SSE 4.1 - 15.6in 1368 x 768 dull 50% srgb screen - f2 bios setup, esc boot drive - 5200 or 7800 mAh battery covers ASUS K53S K53E X54C X53S K84L X53SV X54HR K53F X53U laptops - 2 DDR3L slots max 8Gb - 19v barrel 5.5 / 2.5 mm - |- | <!--Name-->Asus K53T, Asus A53Z X53Z || <!--Chipset-->AMD A4-3305M on AMD M780G, A6-3420M dark brown plastic build || <!--IDE-->{{N/A|}} || <!--SATA-->{{yes|Set IN Bios IDE MODE}} || <!--Gfx-->{{Maybe|VESA 2D for AMD 6520G, 7670M}} || <!--Audio-->{{Yes|HD audio with codec}} || <!--USB-->{{Yes|3 x USB2}} || <!--Ethernet-->{{Yes|rtl8169 with RTL8111 phy}} || <!--Wireless-->{{No|Atheros half height}} || <!--Test Distro-->AROS One USB || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - 15.6in 1368 x 768 dull 50% srgb screen - f2 bios setup, esc boot drive - 2 DDR3L slots max 8Gb - 19v barrel 5.5 / 2.5 mm - Altec Lansing® Speakers - |- | <!--Name-->X55U X401U X501U 1225B || <!--Chipset-->slow C-60 C60, C-70 C70 or E1 1200 E2 1800 || <!--IDE--> || <!--SATA--> || <!--Gfx-->6290G || <!--Audio-->{{No| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->Realtek 8111 8169 || <!--Wireless-->{{unk| Atheros AR9485}} || <!--Test Distro--> || <!--Comments-->2013 64bit does not support AVX or SSE 4.1 - 11.6" display - ram soldered - |- | <!--Name-->Asus A43TA A53TA K53TA XE2 A73T || <!--Chipset-->AMD A4-3300M, A6 3400M (laptop chip) || <!--IDE-->{{N/A|}} || <!--SATA-->{{yes|Set IN Bios IDE MODE}} || <!--Gfx-->{{Maybe|use VESA AMD Radeon HD 6520G Integrated + HD 6470M (1GB GDDR3)}} || <!--Audio-->{{yes| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{Unk|}} || <!--Wireless-->{{No|Atheros}} || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - f2 bios setup, esc boot drive - |- | <!--Name-->X102BA || <!--Chipset-->Llano E1 1200 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes|ide bios setting}} || <!--Gfx-->Radeon HD 8180 || <!--Audio-->{{No| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->RTL8101E RTL8102E || <!--Wireless-->{{unk| Qualcomm Atheros AR9485}} || <!--Test Distro--> || <!--Comments-->2013 64bit does not support AVX or SSE 4.1 - 10.1” Touchscreen - special asus 45w ac adapter - |- | <!--Name-->K55N, K75DE || <!--Chipset-->AMD a6 4400M A8 4500M || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->AMD 7640G || <!--Audio-->HD Audio with ALC codec none through ATi Trinity HDMI || <!--USB-->{{maybe| }} || <!--Ethernet-->rtl8169 || <!--Wireless-->{{unk| Atheros AR9485}} || <!--Test Distro--> || <!--Comments-->2013 64bit does support AVX or SSE 4.1 - 17.3-inch - |- | <!--Name-->X452EA X552EA F552E || <!--Chipset-->AMD E1 2100 or A4 5000M A8 4500M A10 4600M with A || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{Maybe|use VESA for AMD ATI Sun XT Radeon HD 8330 8670A 8670M 8690M}} || <!--Audio-->{{Yes|AMD FCH Azalia rev 02 with ALC898 codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{{Yes|Realtek RTL8111 8168 8411}} || <!--Wireless-->{{unk|Atheros AR9485}} || <!--Test Distro-->2016 Icaros 2.1 || <!--Comments-->2013 64bit may support avx kabini trinity - |- | <!--Name-->Asus ROG G751GY || <!--Chipset-->Intel i7-4720HQ || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->GTX 980M || <!--Audio-->HDAudio || <!--USB-->USB3 || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2014 64bit - |- | <!--Name-->Asus ROG G752VY || <!--Chipset-->Intel i7-6700HQ || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->GTX 980M || <!--Audio-->HDAudio || <!--USB-->USB3 || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2015 64bit - |- | <!--Name-->Asus X555Y || <!--Chipset-->AMD A6-7210 A8-7410 || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|2.5" and mSATA form factors using SATA Rev 3.0 interface }} || <!--Gfx-->{{Maybe|VESA 2D for AMD R5}} || <!--Audio-->{{unk|HD Audio codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{Maybe|rtl8169 Realtek}} || <!--Wireless-->{{no| }}Realtek || <!--Test Distro--> || <!--Comments-->2015 64bit does support AVX or SSE 4.1 - 4gb soldered with 1 ddr3 slot - silver-colored plastic - internal battery - |- | <!--Name-->Asus X555B X555DG X555S X555U X555YI X555LAB || <!--Chipset-->Intel Core i5-4210U to || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|2.5" and mSATA form factors using SATA Rev 3.0 interface }} || <!--Gfx-->{{Maybe|VESA 2D for Intel}} || <!--Audio-->{{No|HDAudio with coxenant and realtek alc codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{Maybe|Realtek}} || <!--Wireless-->{{no| }}Realtek || <!--Test Distro--> || <!--Comments-->2015 64bit does support AVX or SSE 4.1 - 4gb soldered with 1 ddr3 slot - silver-colored plastic - internal battery - |- | <!--Name-->Asus X555D || <!--Chipset-->AMD A10-8700P || <!--IDE-->{{N/A}} || <!--SATA-->{{unk|2.5" and mSATA form factors using SATA Rev 3.0 interface }} || <!--Gfx-->{{Maybe|VESA 2D for AMD R6}} || <!--Audio-->{{unk|HD Audio codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|Realtek}} || <!--Wireless-->{{No|Realtek}} || <!--Test Distro--> || <!--Comments-->2016 64bit - 15.6in 1366 x 768 - 4gb soldered with 1 ddr3 slot - silver-coloured plastic - internal battery - keyboard swap problematic - |- | <!--Name-->ASUS X555Q || <!--Chipset-->AMD® Bristol Ridge A10-9600P 7th Gen, A12-9720p || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|2.5" and mSATA form factors using SATA Rev 3.0 interface}} || <!--Gfx-->{{Maybe|R5 + Radeon™ R6 M435DX Dual Graphics with VRAM GCN 3}} || <!--Audio-->{{unk| }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no|Realtek 8821AE}} || <!--Test Distro--> || <!--Comments-->2017 64bit - FHD 15.6 1920x1080 - 37W battery internal - 4gb soldered with 1 ddr3 slot - internal battery - |- | <!--Name-->ASUS M509ba || <!--Chipset-->AMD A9-9425 || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|2.5" and mSATA form factors using SATA Rev 3.0 interface}} || <!--Gfx-->{{Maybe|Vesa 2d for RADEON R5}} || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2020 64bit - 15.6in 1366 x 768 - 1 ddr4 sodimm slot max 16Gb - 19VDC 2.37A Max 45W 4.0mm x 1.35mm - keyboard swap problematic - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->ExpertBook P1410, ASUS ExpertBook P1 P1510CD, Expertbook Y1511CD || <!--Chipset-->Ryzen 3 3200U, Ryzen 5 3500U || <!--IDE-->{{N/A}} || <!--SATA-->Nvme || <!--Gfx-->{{Maybe|Vesa 2d for AMD}} || <!--Audio-->{{unk|HDaudio with codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2019 64bit 14in or 15.6in 768p to 1080p - keyboard swap problematic - 19V 3.42A asus barrel connector 4.0MM X 1.35MM 4phi - |- | <!--Name-->ASUSTeK ASUS EXPERTBOOK L1 L1400CDA, L1500CDA - 19v 3.42a 4.5phi Barrel with centre pin Outer 4.5mm Inner 3mm asus special untested EXA1203XH, EXA1203YH, EXA1208UH, PA-1650-30, PA-1650-78, PA-1650-93, ADP-65GD B, ADP-65DW B (Euro) || <!--Chipset-->'''tested''' Ryzen 5 3500U - '''untested''' Ryzen 3 3200U, 3250U || <!--IDE-->{{N/A}} || <!--SATA-->{{no|1 Nvme m.2 slot will not boot with sata3 m.2, optional 1 sata hdd with ribbon cable, no dvd drive}} || <!--Gfx-->{{Maybe|Vesa 2d for AMD vega 3, 8}} || <!--Audio-->{{unk|HDaudio 0x15de 0x15e3 with ALC256 codec 0x10ec 0x0256}} || <!--USB-->{{maybe|USB3 1 usb-c and 3 usb-a }} || <!--Ethernet-->{{maybe|rtl8169 Realtek RTL8111HSH-CG }} || <!--Wireless-->{{No| }} || <!--Test Distro-->3500U with AROS One 64bit 1.2 usb installed to m.2 sata on another machine || <!--Comments-->2019 64bit 14in or 15.6in 1080p - keyboard swap problematic - up to 8Gb ddr4 sodimm soldered on board and 1 slot - micro sd card slot on some models - 42Whr B31N1915 C31N1915 C31N2204 - hold down F2 and press power for bios setup - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ==== Dell ==== [[#top|...to the top]] Order of build quality (Lowest to highest) <pre > Studio Inspiron Vostro XPS Alienware Precision Latitude </pre > {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="10%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="5%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Latitude CP 233GT, CPi d233xt d266xt D300XT a366xt, CPt S400GT S500GT S550GT S600GT S700ST, CPt C333GT C400GT || <!--Chipset-->Neo Magic || <!--IDE--> || <!--SATA--> || <!--Gfx-->Use VESA - Neo magic Magic Media 2160 2360 256ZX || <!--Audio-->{{No|crystal pnp 4237b or magic media 256zx sound nm2360}} || <!--USB-->USB 1.1 || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{N/A}} || <!--Test Distro--> || <!--Comments-->1998 32bit Low-Density 16-chip 144p 144-pin 32Mx64 3.3V SODIMM - |- | <!--Name-->Dell Latitude CPx H450GT H500GT H Series, CPt V433GT V466GT V600, Inspiron 5000 || <!--Chipset-->Intel 440BX with Pentium 3M (CPx) or Celeron (CPt) || <!--IDE-->{{{Yes| }} || <!--SATA-->{{N/A| }} || <!--Gfx-->{{Maybe|Use Vesa - ATi Rage Pro Mobility M1}} || <!--Audio-->{{No|ESS ES1978 Maestro 2E Canyon 3D}} || <!--USB-->{{Yes|1 slot 1.1 only}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{N/A| }} || <!--Test Distro-->NB May 2013 || <!--Comments-->1998 32bit - 3 pin PA-6 PA6 power adapter plug - CDROM DVD Cxxx family media bay accessories untested |- | <!--Name-->Latitude C500 C600 (Quanta TM6) Inspiron 4000 7500, CPx J Series || <!--Chipset-->440BX ZX/DX || <!--IDE-->{{yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{partial|ATI Rage 128Pro Mobility M3 (VESA only)}} || <!--Audio-->{{no|ES1983S Maestro 3i}} || <!--USB-->{{yes|USB 1.1 only}} || <!--Ethernet-->{{N/A|some models had mini pci e100}}|| <!--Wireless-->{{N/A|a few came with internal antenna wiring}} || <!--Test Distro--> || <!--Opinion-->1999 square 3 pin charger PA9 PA-9 - C/Dock II untested - C/Port untested - Parallel to Floppy cable untested - CPx J600GT J650GT J700GT J750GT J800GT J850GT |- | <!--Name-->Latitude C510 C610 Insprion 4100 PP01L 2600 || <!--Chipset-->i830 and 1GHz+ P3-M || <!--IDE-->{{yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{partial|use VESA - ATI Radeon Mobility M6}} || <!--Audio-->{{No|AC97 CS4205}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{yes|3Com Etherlink}} || <!--Wireless-->{{Maybe|internal antenna wiring for an Atheros mini pci card}} || <!--Test Distro--> || <!--Opinion-->2000 poor build quality - hard to find in good working order |- | <!--Name-->Latitude C400 || <!--Chipset-->Intel 830 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|use VESA Intel 830 CGC}} || <!--Audio-->{{No|ac97 Crystal 4205}} || <!--USB--> || <!--Ethernet-->{{Yes|3Com 3c905C TX/TX-M}} || <!--Wireless-->{{N/A| }} || <!--Test Distro--> || <!--Comments-->2000 Slim for the time - no media bays |- | <!--Name-->Latitude C640 (Quanta TM8) C840 Inspiron 8k2 8200 i8200 precision m50 || <!--Chipset-->P4M with 845EP || <!--IDE--> || <!--SATA--> || <!--Gfx-->use VESA if ATi - use nouveau if 64mb Nvidia Gforce 4 440 Go || <!--Audio-->AC97 CS4205 || <!--USB--> || <!--Ethernet-->3com 905c || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2001 C640 had one fan so was noisy and hot - C840 had 2 fans and ran slightly cooler but fan noise louder |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | Latitude D400 || P-M 82845 || {{yes|82801 ide}} || {{N/A}} || {{partial|VESA only}} || {{yes|AC97 Audio playback only}} || {{maybe|USB 2.0}} || {{maybe|PRO 100 VM (KM)}} || {{no|BCM4318 AirForce one 54g replace with atheros 5k mini pci}} || <!--Test Distro--> Icaros 1.2.4 || 2003 32bit might boot from USB stick but won't boot from USB-DVD - no sd card slot - power plug style - |- | Latitude D500 / D505 PP10L, Inspiron 510m || 855GME * revA00 * revA03 * revA06 | {{yes|IDE but needs the Dell adapter}} || {{N/A}} || {{partial|855GM Gfx (VESA only)}} || {{Yes|Intel AC97 with IDT STAC 9750 codec playback head phones only}} || {{maybe| }} || {{yes|Intel PRO 100 VE}} || {{no|Broadcom BCM4306 but exchange with atheros g in panel on laptop bottom}} || <!--Test Distro-->2016 Icaros 2.1.1 || 2003 - 14 / 15 inch XGA 4:3 screen - plastic build - no sd card slot - boots from bay optical drive - not powering on/off with ac adapter is a [http://www.geekzone.co.nz/forums.asp?forumid=37&topicid=30585 mobo fault of PC13 SMT 1206 ceramic cap hot] suggest [http://www.die4laser.com/D505fix/ 0.1uF 50V instead] - pc2700 333Mhz ram 1Gb max - |- | Latitude D505 (some) || VIA VT8237 VX700 || {{yes|IDE}} || || {{partial|VESA 2d on ATI RV350 Radeon 9550}} || {{no|VIA AC97 with codec}} || {{maybe|VIA USB glitchy}} || {{yes|VIA VT6102 Rhine-II}} || {{no|Intel 2200g Calexico2}} || <!--Test Distro--> || 2003 32bit little support - diagnostics pressing holding the Fn key, press the Power ON button (battery removed). Check the LEDs pattern - cmos battery behind flap in laptop battery slot - |- | <!--Name-->Inspiron 1000 || <!--Chipset-->SIS || <!--IDE--> || <!--SATA-->{{N/A}} || <!--Gfx-->{{maybe|use VESA SIS}} || <!--Audio-->{{Yes|AC97 SIS with AD1981B codec playback}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{Yes|SIS 900 but}} || <!--Wireless-->{{N/A}} || <!--Test Distro-->2016 Icaros 2.1 || <!--Comments-->2004 32bit [https://forum.level1techs.com/t/my-time-with-icaros-desktop-and-what-i-am-doing-as-a-dev-contributor-also-some-other-shit/113358 aremis using it] |- | <!--Name-->Inspiron 1100 PP07L || <!--Chipset-->845 || <!--IDE-->{{Yes| }} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Maybe|use VESA Intel 845G}} || <!--Audio-->{{Yes|AC'97 playback}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{Maybe|Broadcom 4401}} || <!--Wireless--> || <!--Test Distro-->Icaros 1.5 || <!--Comments-->2004 |- | <!--Name-->Inspiron 8500 5150 || <!--Chipset-->P4 855GM || <!--IDE-->{{Yes| }} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Yes|Nvidia 5200 Go - VESA if intel gfx}} || <!--Audio-->{{Yes|MCP AC97 with SigmaTel 9750}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{Yes|Broadcom 440x}} || <!--Wireless-->{{No|Broadcom 4306 rev 02 use Atheros Mini PCI}} || <!--Test Distro-->Icaros 2.3 || <!--Comments-->2004 32bit P4 runs well but hot |- | Latitude X300 PP04S small, slim and light case || 855GME * revA00 Intel ULV 1.2 Ghz * revA01 Intel ULV 1.4Ghz | {{yes|IDE internal and will boot cd/dvd through dock PR04S}} || {{N/A}} || {{partial|855GM Gfx (VESA only)}} || {{Yes|Intel AC97 with STAC 97xx codec but no audio out of the dock}} || {{maybe|works but dock usb ports and usb DVD PD01S not detected}} || {{No|Broadcom BCM5705M gigabit}} || {{no|Broadcom BCM4306 later intel - replace with atheros in the underside}} || <!--Test Distro-->2016 Icaros 2.1.1, 2020 AROS One 1.6 usb, || 2003 12.1" 1024 x 768 - 19.5v PA-10 or PA-12 dell - ACPI works but bad s3 ram suspend sleep - no sd card boot - 1Gb max sodimm ddr 2700 |- | <!--Name-->Latitude D600 (Quanta JM2) PP05L - 600m || <!--Chipset-->82855 PM i855 * reva00 * revA01 * revA02 * revA03 * revA04 | <!--IDE--> {{yes}} || <!--SATA--> {{N/A}} || <!--Gfx-->{{Maybe|Use VESA - ATI Radeon RV250 Mobility FireGL 9000}} || <!--Audio-->{{Yes|AC97 - STAC 9750}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no|Broadcom BCM5705}} || <!--Wireless-->{{no|Intel 2100 or Broadcom BCM4306 - swap for Atheros panel in base}} || <!--Test Distro-->2011 Icaros 1.3 and [http://www.amiga.org/forums/archive/index.php/t-62187.html 1.4.1 and 2016 2.1.1] || <!--Opinion-->2003 32bit 14inch using pc2100 memory with Caps light blinking is usually a memory error - Dell D505 D600 power up pressing the case docking port - |- | <!--Name-->Latitude D600 (Quanta JM2) || <!--Chipset-->82855 PM i855 || <!--IDE--> {{yes}} || <!--SATA--> {{N/A}} || <!--Gfx-->{{Yes|2D only vidia NV28 GeForce4 Ti 4200 Go 5200 Go 5650 Go}} || <!--Audio-->{{Yes|AC97 - STAC 9750}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no|Broadcom BCM5705}} || <!--Wireless-->{{no|Broadcom BCM4306 mini pci - swap for Atheros}} || <!--Test Distro--> Icaros 1.3 and [http://www.amiga.org/forums/archive/index.php/t-62187.html 1.4.1] || <!--Opinion-->2003 32bit 14" - solder joints on the bios chip (press down f7/f8 keys) - RAM clean with eraser - memory cover plate maybe apply some pressure - |- | <!--Name-->D800 (Compal LA-1901) || <!--Chipset-->Intel 855 || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio-->AC97 || <!--USB-->{{maybe| }} || <!--Ethernet-->Broadcom 570x || <!--Wireless-->Broadcom 4309 || <!--Test Distro--> || <!--Comments-->2004 32bit - trackpoint type pointing device - |- | <!--Name-->D800 || <!--Chipset-->Intel 855 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{No|Nvidia }} || <!--Audio-->AC97 || <!--USB-->{{maybe| }} || <!--Ethernet-->Broadcom 570x || <!--Wireless-->Broadcom 4309 || <!--Test Distro--> || <!--Comments-->2004 32bit 15inch 39cm |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Inspiron 1200 2200 PP10S Latitude 110L m350 1.3Ghz || <!--Chipset-->Intel 915GM || <!--IDE--> {{yes|UDMA boots cd or DVD and installs to HDisk}} || <!--SATA--> {{N/A}}|| <!--Gfx-->{{yes|Intel GMA900 (2D and 3D openGL 1.x) Gearbox 56}} || <!--Audio-->{{yes|Intel AC97 playback only}} || <!--USB-->{{maybe|USB 2.0}} || <!--Ethernet-->{{yes|Intel PRO 100 VE}} || <!--Wireless-->{{no|BroadCom BCM4318 - swap for Atheros mini PCI in base panel}} || <!--Test Distro-->Icaros 1.4.5 || <!--Comments-->2005 single core 32bit 14" 4:3 1024 768 XGA screen - heavy 6 lbs - PA16 barrel 19V 3.16A AC adapter - battery life 4cell 29WHr lasts 2 hours - 256mb soldered with 1 ddr pc2100 sodimm 1gb max - |- | <!--Name-->Inspiron 1300 business B130 home PP21L Latitude 120L B120 by Compal - Inspiron 630m || <!--Chipset-->Intel Celeron M360 1.4GHz, M370 1.50 GHz, M380 1.73GHz || <!--IDE-->{{Yes|boots cd or DVD and installs to HDisk}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Yes|GMA 915 2D and 3D openGL 1.x tunnel 172 gearbox 70}} || <!--Audio-->{{Yes|HD Audio playback ear phones only}} || <!--USB-->{{maybe|works but waiting boot fail with AROS One usb version}} || <!--Ethernet-->{{Yes|Broadcom 440x}} || <!--Wireless-->{{No|intel 2200 or BCM4318 swap for Atheros mini pci underside - one antenna lead for main wifi}} || <!--Test Distro-->2016 Icaros 2.1.2, 2020 AROS One 1.6 usb, || <!--Comments-->2005 32bit single core - 14.1″ XGA 4:3 or 15.4" WXGA wide 1280 x 800 matte - ddr2 sodimm ram 2gb max - PA-16 19v psu tip 7.4mm * 5mm - f10 boot select f1 f2 bios |- | Latitude X1 PP05S || PP-M GMA915 rev A00 1.1GHz non-pae || {{yes|ide 1.8in zif/ce under keyboard}} || {{N/A}} || {{Maybe|Vesa for Intel 915GM}} || {{yes|AC97 6.6 playback only with STAC codec}} || {{maybe|USB 2.0 but partial boot to blank screen}} || {{No|Broadcom 5751}} || {{no|Intel 2200BG - swap for Atheros mini pci under keyboard palm rest - disassembly of all laptop}} || <!--Test Distro-->Icaros 2.3 dvd iso image virtualbox'd onto usb, Aros One 1.5 and 1.8 usb (2022) || 2005 32bit 12.1" 4:3 1024 x 768 - sd slot not bootable - 256mb soldered to board and 1 sodimm max 1GB ddr2 under keyboard - F12 bios boot F2 - pa-17 pa17 19v octagonal psu port |- | Latitude D410 PP06S *rev A00 *A01, A02 *A03 || GMA915 1.6GHz Pentium® M 730, 1.7GHz, 750 1.86GHz & 760 2.0GHz, 770 2.13GHz || {{yes|caddy and adapter needed 2.5" - remove hdd and write}} || {{N/A}} || {{Yes|Intel 915GM 2D and 3D OpenGL 1.3 tunnel 170 and gearbox 75}} || {{yes|AC97 playback only with STAC 9751 codec}} || {{maybe|works but will not boot from USB-DVD or AROS One 1.5 usb version}} || {{No|Broadcom 5751}} || {{no|Intel 2915ABG or later 2200BG - swap for Atheros mini pci under keyboard}} || <!--Test Distro-->2015 Icaros 1.4, 2016 2.1.1 and AROS One 1.5 usb, || 2005 32bit 12.1" 4:3 1024 x 768 - no sd card slot - PR06S dock base |- | <!--Name-->Latitude D510 (Quanta DM1) || <!--Chipset-->915GM socket 479 || <!--IDE--> {{N/A}} || <!--SATA--> {{partial|IDE mode}}|| <!--Gfx-->{{yes|Intel GMA 915 2D and 3D}} || <!--Audio-->{{Yes|AC97 STAC 975x}} || <!--USB--> {{maybe|USB 2.0}} || <!--Ethernet-->{{no|Broadcom BCM5751}} || <!--Wireless-->{{no|Intel PRO Wireless 2200BG swap Atheros mini pci in base}} || <!--Test Distro--> || <!--Comments-->2005 14.1" 32bit single core Intel Celeron M 1.6GHz Pentium M 730 1.73Ghz - squarish 3:2 - issues with 3rd party battery 4 quick flashes of red led with 1 final green |- | <!--Name-->Latitude D610 (Quanta JM5B) PP11L || <!--Chipset-->910GML 915GM with mobile 1.6 to 2.26ghz * Rev A0x * Rev A0x * Rev A07 1.73Ghz | <!--IDE--> {{N/A}} || <!--SATA--> {{partial|IDE mode}}|| <!--Gfx-->{{yes|Intel GMA 915 2D and 3D tunnel 174 gearbox 74}} || <!--Audio-->{{yes|Intel AC97 speaker head phones playback only with stac codec}} || <!--USB--> {{maybe|USB 2.0}} || <!--Ethernet-->{{no|Broadcom BCM5751}} || <!--Wireless-->{{no|Intel 2200BG or Broadcom mini pci under keyboard, swap wifi card for atheros 5k}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2005 32bit 14" 1024 x 768 - very noisy clicky trackpad buttons - one dimm slot under keyboard and other in underside 2GB 533Mhz 667Mhz DDR2 max - |- | <!--Name-->Latitude D610 (Quanta JM5B) 0C4717 REV A05, 0K3879 REV.A00 || <!--Chipset-->915GM || <!--IDE--> {{N/A}} || <!--SATA--> {{partial|IDE mode}}|| <!--Gfx-->{{Maybe|Use VESA 2d - Ati X300 no radeon 2d}} || <!--Audio-->{{yes|Intel AC97}} || <!--USB--> {{maybe|USB 2.0}} || <!--Ethernet-->{{no|Broadcom NetXtreme 57xx Gigabit replace with Atheros 5k}} || <!--Wireless-->{{no|Intel PRO Wireless 2200BG mini pci use Atheros 5k}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2005 32bit 14" 1024 x 768 - very noisy clicky trackpad buttons - 19.5v psu |- | <!--Name-->Latitude D810 (Quanta ) || <!--Chipset-->915GM || <!--IDE-->{{Yes| }} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Maybe|Use VESA 2d - Ati X300 RV370 M22 later x600}} || <!--Audio-->{{yes|Intel AC97 stereo playback only idt 9751 codec}} || <!--USB--> {{maybe|USB 2.0 but no boot from usb on 1.5}} || <!--Ethernet-->{{no|Broadcom NetXtreme 57xx Gigabit}} || <!--Wireless-->{{no|Intel PRO Wireless 2200BG mini pci replace with Atheros 5k}} || <!--Test Distro-->2017 Icaros 2.1.1, aros one 1.5 || <!--Comments-->2005 32bit 15.4" F12 one time boot menu - 19.5v 90w psu ideal - battery not same as later dx20 ones - |- | <!--Name-->Inspiron 6000 6400, E1505 PP20L *A00 Pentium M *A0? Core Duo || <!--Chipset-->GM945 with PM 1.73Ghz, T2050 or T2060 || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe|}} || <!--Gfx-->{{Maybe|vesa 2d - Ati 9700, x1300 RV515 M52, x1400 or nvidia go 7300 on mxm board}} || <!--Audio-->{{yes|HD Audio IDT 9200}} || <!--USB-->{{Yes|usb boot }} || <!--Ethernet-->{{Yes|Broadcom BCM4401 B0}} || <!--Wireless-->{{No|Intel 2200 3945 - swap for Atheros 5k}} || <!--Test Distro-->2016 Icaros 2.1, AROS One 1.6 || <!--Comments-->2006 mostly 32bit - 15.4 inch glossy - 2 ddr2 sodimm slots - broadcom bcm92045 bluetooth detected but no support - 19.5v dell psu socket - f2 bios setup, f12 boot order - |- | <!--Name-->Inspirion E1705 9200 9300 9400 PP12L PP14L || <!--Chipset-->945GM || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->proprietary Dell card/socket format Nvidia 6800, ati X300 or nVidia 7900GS gpu 3d corrupt || <!--Audio-->{{Maybe| }} || <!--USB-->{{Maybe| }} || <!--Ethernet-->{{Maybe|Broadcom BCM4401}} || <!--Wireless-->Intel 3945 swap with Atheros 5k mini pcie || <!--Test Distro--> || <!--Comments-->2006 [http://amigaworld.net/modules/news/article.php?mode=flat&order=0&item_id=6481 increasing vertical lines issues] 32bit - |- | <!--Name-->Studio XPS M1210 || <!--Chipset-->GM945 with Core Duo to intel C2D T5500, T7400 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->nVidia G72M 7300 7400m || <!--Audio-->HD Audio IDT 92xx || <!--USB-->{{Maybe| }} || <!--Ethernet-->{{Maybe|Broadcom BCM4401 B0}} || <!--Wireless-->{{No|Broadcom BCM4311 - swap for Atheros 5k mini pci-e}} || <!--Test Distro--> || <!--Comments-->2006 64bit - 2 ddr2 slots max 4Gb - |- | <!--Name-->Inspiron 1501 PP23LA Latitude 131L || <!--Chipset-->AMD Sempron 1.8GHz Turion MK-36 or X2 1.6Ghz TL-50 or TL-56 on ATI RS480 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|Use VESA 2d - ATI 1150 (x300) RS482M Mobility Radeon Xpress 200}} || <!--Audio-->{{Yes|HD audio with stac 92xx codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{Maybe|Broadcom bcm 4401}} || <!--Wireless-->{{No|Broadcom bcm4311 replace with Atheros 5k}} || <!--Test Distro-->Icaros 1.5 || <!--Comments-->2006 64bit 15.4 inch matt 16:10 1280x800 WXGA - |- | <!--Name-->Inspiron 6400 (Quanta FM1) *A00 Pentium M *A0? Core Duo *A08 Core2 Duo || <!--Chipset-->GM945 with BGA479 (socket M) T2050 1.6Ghz, T2060 1.60Ghz, T2080 1.73Ghz much later T5500 1.66Ghz || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{Yes|GMA 2D and 3D}} || <!--Audio-->{{Yes|HD Audio with IDT 92xx codec}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{Yes|Broadcom BCM4401 B0}} || <!--Wireless-->{{No|Broadcom BCM4311 swap for Atheros 5k mini pci-e under keyboard}} || <!--Test Distro-->deadwood 2019-04-16 iso || <!--Comments-->2006 mostly 32bit - 15.4" glossy - sd card - front multimedia keys - dvd rw - generic dell keyboard - coin cr2032 bios battery under keyboard - |- | <!--Name-->Inspiron 640m PP19L XPS M140 e1405 || <!--Chipset-->Core Solo T2050, T2300 Duo 1.83GHz T2400 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel GMA 950 || <!--Audio-->HD Audio IDT || <!--USB--> || <!--Ethernet-->Broadcom BCM4401-B0 100Base || <!--Wireless-->{{No|Intel 3945 or Broadcom 43xx, swap for Atheros 5k - Wireless Internet ON or OFF press the Function key + F2}} || <!--Test Distro--> || <!--Comments-->2006 32 bit - 12.1 LCD CCFL WXGA 1280x800 up to 14.1 inch 16:10 1440x900 pixel, WXGA+ UltraSharp - supports also SSE3 on duos - |- | <!--Name-->Latitude D420 (Compal LA-3071P) PP09S || <!--Chipset-->945 * revA00 Solo 1.2Ghz ULV U1400 * revA01 Duo 1.06Ghz u2500 * revA02 Duo 1.2Ghz | <!--IDE-->{{yes|ZIF/CE 1.8" slow under battery, ribbon cable}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{yes|Intel GMA950 - 2D and 3D opengl tunnel 138 gearbox 103}} || <!--Audio-->{{yes|HD Audio with STAC 92xx playback speakers head phones only)}} || <!--USB-->{{yes|2 and external usb optical drive works}} || <!--Ethernet-->{{no|Broadcom BCM5752}} || <!--Wireless-->{{No|Intel 3945 mini pcie - swap Atheros 5k in base panel}} || <!--Test Distro-->Icaros Desktop 1.4 || <!--Opinion-->2006 32bit only - 12.1" 1280x800 - PR09S dock base rev02 DVD-RW usb boots - 1GB DDR2 2Rx16 max in base panel - f2 setup f5 diagnostics f12 boot list - |- | <!--Name-->Latitude D520 PP17L || <!--Chipset--> * 64bit rev A01, A02 945GM Core2 Duo 1.83Ghz to 2.3Ghz * 32bit rev A00, A01 940GML Solo later Duo T2400 | <!--IDE-->{{yes| Philips SDR089, Philips CDD5263, TEAC DW224EV, Optiarc AD-5540A, HL-DL-ST GSAT21N, TSSTcorp TS-L632D}} || {{Yes|bios sata set to ide mode}} || {{Yes|Intel GMA 900 series 2D and OpenGL1 3D tunnel 210 gearbox 153 teapot 27}} || {{Yes|HD audio with STAC 9200 codec}} || {{Yes|Boots and detects USB2.0}} || {{Yes|Broadcom 4400}} || {{No|Broadcom BCM4312 BCM4321 Dell 1390 / 1490 mini pcie - easy to replace with atheros 5k in base panel}} || <!--Test Distro-->Icaros 1.4 and 2.2 and both AROS One 1.8 and AROS One x64 1.1 USB boot || 2006 mostly 64bit 4:3 aspect ratio 14.1 (XGA 1024x768) or later 15 inches (XGA+ 1400 by 1050) - F2 enter bios F12 choose boot - 19.5v dell tip pa-12 charger - bios coin cell cr2032 battery socketed in base panel - |- | <!--Name-->Latitude D620 (Compal LA-2792) PP18L || <!--Chipset-->945GMS * rev A00 all Core Duo's 32 bit * rev A0x all Core 2 Duo's 64 bit | <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Intel GMA 950 (2D and 3D tunnel gearbox opengl1 || <!--Audio-->{{yes|HD Audio playback}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no|Broadcom BCM5752}} || <!--Wireless-->{{no|Intel 3945 mini pcie swap with Atheros 5k}} || <!--Test Distro-->AspireOS Xenon || <!--Opinion-->2006 64bit AROS capable with later revisions - 14" 1280 x 800 |- | <!--Name-->Latitude D620 || <!--Chipset-->Intel i945 * revA00 all Core Duo's 32 bit * revA01 all Core 2 Duo's 64 bit | <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Nvidia 7300, 7600 NVS 110M G72 || <!--Audio-->{{dunno|HD Audio with STAC 9200 codec}} || <!--USB--> || <!--Ethernet-->{{No|Broadcom BCM5752}} || <!--Wireless--> {{dunno}} || <!--Test Distro--> || <!--Opinion-->2007 1440x900 screen - LA-2792P Rev.2.0 - DT785 UC218 Fan/ Heatsink (64bit) - |- | <!--Name-->Latitude D820 (Quanta JM6) || <!--Chipset-->945GMS 940GML * rev A00 * rev A01 | <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Yes|Intel GMA 2D and 3D tunnel 195 - 100? gearbox 156}} || <!--Audio-->{{Yes|HD Audio with STAC 9200 playback}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|Broadcom BCM5752}} || <!--Wireless-->{{No|BCM4310 replace with mini pcie atheros 5k}} || <!--Test Distro-->2016 Icaros 2.1.2 || <!--Opinion-->2007 widescreen 15 inch 1280 x 800 matte - - |- | <!--Name-->Latitude D820 (Quanta JM) || <!--Chipset-->945GMS 940GML * revA00 * revA01 | <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Maybe|Nvidia NVS 110M 120M G72}} || <!--Audio-->{{Yes|HD Audio STAC 9200}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|Broadcom BCM5752}} || <!--Wireless-->{{No|BCM4310 swap with Atheros 5k mini pcie}} || <!--Test Distro--> || <!--Opinion-->2007 64bit 15.4 1650x1050 WXGA or WSXGA+ or 1920x1200 WUXGA - |- | <!--Name-->Dell Latitude D531 15" || <!--Chipset-->AMD Turion X2 TL56 or TL60 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{Maybe|Use VESA - ATi xpress X1270}} || <!--Audio-->HD Audio with IDT codec || <!--USB-->{{Maybe| }} || <!--Ethernet-->{{No|Broadcom 57xx}} || <!--Wireless-->Intel 3945 or Dell Wireless 1390, 1505 or BCM4311 mini pcie || <!--Test Distro--> || <!--Comments-->2007 64bit possible - no trackpoint - fails and goes wrong often - |- | <!--Name-->Latitude D430 PP09S || <!--Chipset-->945 with Core2 Duo C2D U7500 1.06GHz U7600 1.2GHz U7700 1.33GHz * rev A00 * rev A01 * rev A02 | <!--IDE-->ZIF PATA IDE 1.8inch under battery and ribbon cable - slow use USB instead || <!--SATA-->{{N/A}} || <!--Gfx-->{{yes|945GML 2D and 3D opengl 1.x 171 tunnel 105 gearbox}} || <!--Audio-->{{yes|STAC 92xx HD Audio speaker and ear phone - mono speaker}} || <!--USB-->{{yes|3 }} || <!--Ethernet-->{{no|Broadcom BCM5752}} || <!--Wireless-->{{no|Intel 4965 AGN or 3945 ABG mini pci-e underside with Atheros 5k mini pci-e}} || <!--Test Distro-->Aspire 1.8 || <!--Comments-->2007 64bit capable - sd card not supported - 19.5v PA12 power adapter - 12.1" 1280x800 matte - f2 setup f5 diagnostics f12 boot list - |- | <!--Name-->Latitude D530 || <!--Chipset-->GM965 + ICH8 || <!--IDE-->{{N/A}} || <!--SATA-->{{partial|IDE mode}}|| <!--Gfx-->{{partial|nVidia Quadro NVS 135M 2D 3d glitches G86}} || <!--Audio-->{{partial|HD Audio with STAC 9205 head phones only}} || <!--USB-->{{yes|USB 2.0}}|| <!--Ethernet-->{{no|Broadcom BCM5755M}} || <!--Wireless-->{{no|Intel PRO Wireless 3945ABG swap with Atheros 5k}} || <!--Test Distro-->Icaros 1.4.5 || <!--Comments-->2007 [http://amigaworld.net/modules/news/article.php?mode=flat&order=0&item_id=6481] cool air intake from underneath needed with pa-10 or pa-3e 90w psu required - standard 4:3 ratio aspect screen - |- | <!--Name-->Latitude D630 (Compal LA-3301P) PP18L || <!--Chipset-->GM965 + ICH8 T7250 2.0Ghz T7300 * revA00 * revA01 | <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{yes|Intel GMA X3100 (2D only, no external monitor)}} || <!--Audio-->{{yes|HD Audio STAC 9205 but speaker and head phones}} || <!--USB-->{{yes|4 USB 2.0}}|| <!--Ethernet-->{{no|Broadcom BCM5755M}} || <!--Wireless-->{{no|Broadcom BCM4312 swap with pci-e Atheros 5k under keyboard}} || <!--Test Distro--> || <!--Comments-->2007 64bit possible - F12 to choose boot option - 2 ddr2 sodimm max 4G - 4400mah 48Wh battery lasts 2 hours - 6600mah 73Wh lasts 3 hours - two wire cr2032 cmos - |- | <!--Name-->Latitude D630 || <!--Chipset-->GM965 + ICH8 * revA00 [http://amigaworld.net/modules/news/article.php?mode=flat&order=0&item_id=6481] GPU heatpad, no copper * revA01 0DT785 heatsink | <!--IDE-->{{N/A}} || <!--SATA-->{{partial|IDE mode}}|| <!--Gfx-->{{partial|use VESA as nVidia NVS 135M 3d corrupts 0.7 tunnel 0.25 gearbox G86}} || <!--Audio-->{{partial|HD Audio with STAC 9205 head phones only}} || <!--USB-->{{yes|USB 2.0}}|| <!--Ethernet-->{{no|Broadcom BCM5755M}} || <!--Wireless-->{{no|Intel PRO Wireless 3945ABG swap with Atheros 5k mini pcie}} || <!--Test Distro-->Icaros 1.4.5 || <!--Comments-->2007 64bit |- | <!--Name-->Latitude D830 || <!--Chipset-->965GM with Core2 * revA00 * revA01 | <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{Yes|GM965 crestline 2d and 3d tunnel 115}} || <!--Audio-->{{Yes| }} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No| }} || <!--Wireless-->{{Maybe|replace with Atheros 5k mini pcie}} || <!--Test Distro-->Icaros || <!--Comments-->2007 15 inch 1280 x 900 but updating the LCD to WXGA or WSXGA+ could be better - 2 ddr2 sodimm - |- | <!--Name-->Latitude D830 || <!--Chipset-->ICH8, Core2 DUO T7800 @ 2.60GHz || <!--IDE-->{{N/A}} || <!--SATA-->Intel ICH8M Serial ATA || <!--Gfx-->nVidia Quadro NVS 140M G86 || <!--Audio-->{{yes|HD Audio with STAC 92XX codec}} || <!--USB-->{{yes|USB 2.0}} || <!--Ethernet-->Broadcom NetXtreme 57xx Gigabit || <!--Wireless-->Intel Wireless 4965AGN swap with Atheros 5k || <!--Test Distro-->Icaros 2.03 || <!--Comments-->2007 64bit 15." - FN,F2 or FN,F8 or FN,F12 |- | <!--Name-->XPS M1710 || <!--Chipset-->945PM with T2400 T2600 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->proprietary Dell card socket format GTX 7950 || <!--Audio-->HD Audio with STAC 92XX codec || <!--USB--> || <!--Ethernet-->Intel 1000 or Broadcom BCM5752 || <!--Wireless-->Intel swap with Atheros 5k || <!--Test Distro-->Aros One 64bit || <!--Comments-->2007 64bit 17.3" workstation type WXGA+ screen 1920x1200 - 2 ddr-2 667Mhz sodimm slots, |- | <!--Name-->XPS M1730 || <!--Chipset-->965 with T7200 T7600 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->GTX 7950 || <!--Audio-->HD Audio with STAC 92XX codec || <!--USB--> || <!--Ethernet-->Intel 1000 || <!--Wireless-->Intel swap with Atheros 5k || <!--Test Distro--> || <!--Comments-->2008 64bit 17" workstation type WXGA+ screen manufactured by AU Optronics poor viewing angles, unevenly lit, light leakage, 2 ddr-2 800Mhz slots, |- | <!--Name-->Latitude E6410 P27LA, E6510 PP30LA, E6310 || <!--Chipset-->Intel Core i5-520M to i7-620M i7 820QM but no sse4.1 or AVX || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Maybe|NVidia NVS 3100M GT218 2D but 3D through external monitor}} || <!--Audio-->{{Maybe|HD Audio IDT 92HD81}} || <!--USB-->{{Yes|USB2 }} || <!--Ethernet-->{{No|Intel}} || <!--Wireless-->{{No|Broadcom or Intel 6200AGN or Link 6300}} || <!--Test Distro-->Icaros 1.3 || <!--Comments-->2010 64 bit - 14.1” WXGA+ up to 15.6in 15.6” FHD 1080p - 2 ddr3l 1333Mhz max 8Gb - 90w dell charger - 3pin cmos - |- | <!--Name-->Inspiron M5030 || <!--Chipset-->rev A01 AMD V120, V140 rev A0? V160 M880G || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE}} || <!--Gfx-->{{Maybe|VESA RS880M Radeon HD 4225, 4250}} || <!--Audio-->{{Yes|HD audio with ALC269q codec}} || <!--USB--> || <!--Ethernet-->{{No|Atheros AR8152 v2}} || <!--Wireless-->{{unk|Atheros AR9285}} || <!--Test Distro--> || <!--Comments-->2011 64bit does not support AVX or SSE 4.1 - DDR3 sodimm - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->E6420 E6520 ATG semi ruggized XFR || <!--Chipset-->sandy bridge i5 2520M 2540M or duo I7 || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|set to Bios UEFI mode AHCI}} || <!--Gfx-->{{Maybe|Intel HD 3000 with optional fermi Nvidia NVS 4200M GF119}} || <!--Audio-->{{Maybe|HD Audio with IDT 92HD90 BXX codec but not HDMI codec}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|Intel}} || <!--Wireless-->{{No|Intel 6205}} || <!--Test Distro-->Icaros 2.03 || <!--Comments-->2011 64bit 15.6in - fan exhausts a lot of hot air when cpu taxed - VGA if Bios ATA set and Vesa only with Bios ACHI set - |- | <!--Name-->Inspiron M5040 || <!--Chipset-->slow amd E450, later C-50 C50 or C-60 C60 with A50M chipset || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|non efi sata in IDE mode but base plastic difficult to remove for access}} || <!--Gfx-->{{Maybe|use VESA AMD Radeon 6320, 6250 or 6290}} || <!--Audio-->{{Yes|HD Audio IDT}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{Yes|rtl8169 Realtek RTL8105E VB 10/100}} || <!--Wireless-->{{unk|Atheros AR9285}} || <!--Test Distro-->2016 icaros 2.1.1 and AROS USB 1.6 || <!--Comments-->2012 64bit 15INCH 1388 X 768 - f2 bios setup, f12 boot order - under removable keyboard via 4 top spring loaded catches is 1 ddr3l sodimm max 8gb and wifi - |- | Latitude e6230 E6330 E6430 || i3 3320M 3350M 2.8 GHz i5 3360M i7 3520M || {{N/A}} || {{partial|non RAID mode}} || {{partial|Intel HD 4000 (VESA only)}} || {{no|HD Audio}} || {{partial|Intel USB 3.0 (USB 1.1 2.0 only)}} || {{No|Intel 82579LM Gigabit}} || {{No|Broadcom BCM4313}} || <!--Test Distro-->Nightly Build 2014 09-27 || 2013 64bit Ivy Bridge - 12.5-inch 13.3-inch 14-inch screen - not great support, better under hosted - |- | <!--Name-->Dell Latitude 3330 || <!--Chipset-->Core i3 – 2375M to i5 – 3337U, Intel® Core i3 – 3227U, Celeron 1007U on HM77 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->{{maybe|VESA 2d for intel Hd 2000 3000 vga hdmi}} || <!--Audio-->{{maybe|HDAudio with IDT 92HD93 Controller codec }} || <!--USB-->{{maybe|USB 3.0 (2), USB 2.0 PowerShare capable }} || <!--Ethernet-->{{no|Intel }} || <!--Wireless-->{{no|Intel }} || <!--Test Distro-->Deadwood usb3 test iso || <!--Comments-->2013 64bit, 13.3” HD 1366X768 16:9, 2 ddr3l slots max 8Gb, 720p HD video webcam, |- | <!--Name-->Inspiron 15 5565 5567 AMD versions, Inspiron 3595 || <!--Chipset-->AMD A6-9200u A9-9400 9425 A12-9700P Bristol Ridge || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->Radeon R5 R8 GCN 3 || <!--Audio-->{{No| }} || <!--USB-->{{partial| }} || <!--Ethernet-->{{maybe|Realtek 1GbE}} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2017 64bit AVX2 - 15.6in 768p or 900p - there are intel versions avoid - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Latitude 5495, Inspiron 15 3585 || <!--Chipset-->Ryzen 2300U 2500U 2700U || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|NVMe or optional 2.5in sata if caddy and ribbon cable}} || <!--Gfx-->Radeon Vega 3 or 7 || <!--Audio-->{{No|HDAudio with Realtek ALC3246 aka ALC295 0x10ec, 0x0295 or ALC3263 aka ALC 0x10ec, 0x0 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|Realtek}} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2018 64bit - 14.0" FHD WVA 1080p (16:9) 220 nits or HD 768p - 2 ddr4 sodimm slots max 32gb - 68whr battery with 2pin cmos bios coin - DC 19.5V 4.62A (90W) or 19.5V 3.34W (65W) 5.0mm x 7.4mm PA12 charging adapter - |- | <!--Name-->Inspiron 3505, Vostro 3515 || <!--Chipset-->athlon 300u, Ryzen 3250u (2c4t) 3450u 3500u 3700u (4c8t), Athlon Silver (2c2t) Gold (2c4t) || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|up to 2 nvme with optional 2.5in sata ribbon connector}} || <!--Gfx-->{{Maybe|VESA 2D for Vega 8, 10}} || <!--Audio-->{{No|Realtek ALC3204, Cirrus Logic CS8409 (CS42L42 and SN005825)}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{No|RTL 8106E}} || <!--Wireless-->{{No|Realtek RTL8723DE}} || <!--Test Distro--> || <!--Comments-->2019 64-bit - 15.6inch - 2 ddr4 sodimm max 16G - avoid knocking usb-c charging whilst in use - |- | <!--Name-->Inspiron 5485 2-in-1 || <!--Chipset-->athlon 300u, Ryzen 3250u (2c4t) 3450u 3500u 3700u (4c8t), Athlon Silver (2c2t) Gold (2c4t) || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|nvme}} || <!--Gfx-->{{Maybe|VESA 2D for Vega 8, 10}} || <!--Audio-->{{No|Realtek ALC3204}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{No|Realtek RTL8723DE}} || <!--Test Distro--> || <!--Comments-->2019 64-bit - 14inch - 2 ddr4 sodimm max 16G - avoid knocking usb-c charging whilst in use - |- | <!--Name-->Latitude 3500, 3310, 3410, 3510, || <!--Chipset-->Intel Celeron-4205U, Pentium-5405U, Core i5 (8th Gen) i3-8145U, 8265U, i5-8365U || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|nvme}} || <!--Gfx-->{{Maybe|Vesa 2D for Intel UHD Graphics 610 or 620 hdmi}} || <!--Audio-->{{no|HDAudio with Realtek ALC}} || <!--USB-->{{maybe|USB3 usb-c usb-a}} || <!--Ethernet-->{{Maybe|rtl8169 RTL8111H}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2019 64bit - 14in or 15.6in 768p to 1080p 220nits - 65w - 2 ddr4 sodimm slots - rtc cr2032 cmos 2 pin - |- | <!--Name-->Inspiron 5405 || <!--Chipset-->AMD Ryzen 5 4500U || <!--IDE-->{{N/A}} || <!--SATA-->One M.2 2230/2280 nvme || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{No|HDAudio with Realtek ALC3204 codec}} || <!--USB-->{{maybe|USB3 }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2020 64bit - 14" 1080p - dell round ac 19.50 VDC 4.50 mm x 2.90 mm 65W(19.5V-3.34A) round 4.5mm tip - |- | <!--Name-->Inspiron 5415, Inspiron 5515 || <!--Chipset-->AMD Ryzen 3 5300U, Ryzen 5 5500U, Ryzen 7 5700U || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|nvme}} || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{No|HDaudio with realtek ALC3254 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2021 64bit 14" or 15.6in - avoid knocking usb-c charging whilst in use or use dell round ac 65W 4.5MM x 3.0MM - replacing keyboard not easy - 1 ddr4 sodimm - |- | <!--Name-->Vostro 3425, Vostro 3525, Vostro 5625 || <!--Chipset-->AMD Ryzen 3 5425U, Ryzen 5 5625U || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{no|HDAudio with codec}} || <!--USB-->{{maybe|USB4}} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2021 64bit - 14in 15.6" to 16" FHD 1080p - dell round ac 65w 4.5MM x 3.0MM or avoid knocking usb-c charging whilst in use - |- | <!--Name-->Dell Inspiron 15 Model 3535, Inspiron 14 7435 || <!--Chipset-->AMD Ryzen 5 7520U, AMD Ryzen 5 7530U, 7 7730U || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->{{No| hdmi 1.4 but no gpmi}} || <!--Audio-->{{No|HDaudio with codec }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2024 64bit - 14.0" or 15.6" 1080p - dell round ac 65w 4.5MM x 3.0MM or usb-c charging - full sd card slot - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |} ====Fujitsu-Siemens==== [[#top|...to the top]] Order of build quality (Lowest to highest) <pre > Amilo Esprimo Lifebook </pre > {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="5%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Fujitsu [http://www.labri.fr/perso/fleury/index.php?page=bug_transmeta FMV-Biblo Loox S73A (Japan P1100) LifeBook P1120 Biblo Loox T93C (Japan P2120) P2020] || <!--Chipset-->Transmeta Crusoe CPU TM5600 633MHz with Ali M1535 chipset || <!--IDE-->{{Yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->ATI Rage Mobility M with 4MB SDRAM || <!--Audio-->{{No|AC97 Ali M1535 + STAC9723 Codec}} || <!--USB-->USB 1.1 only || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{N/A}} || <!--Test Distro--> || <!--Comments-->1999 32bit 10" 1280 x 600 matte LCD - QuickPoint IV mouse - metal chassis with palm rest plastic - 15GB 2.5 inch drive and SR 8175 8X DVD-ROM drive - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Lifebook S7000 S7010 S7010D S2020 || <!--Chipset-->Pentium M 1.6 or 1.7GHz || <!--IDE-->{{Yes| }} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Maybe|use VESA - Intel 855}} || <!--Audio-->{{maybe|AC97 with STAC 9751T or 9767 codec}} || <!--USB--> || <!--Ethernet-->{{No|Broadcom}} || <!--Wireless-->{{No|Atheros, Broadcom or Intel 2200BG - FN,F10}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2002 32bit 14.1 inch with minimal support |- | <!--Name-->Lifebook e8010 || <!--Chipset--> || <!--IDE-->{{Yes| }} || <!--SATA--> || <!--Gfx-->{{Maybe|use VESA Intel 855GM}} || <!--Audio-->AC97 STAC9767 or ALC203 codec || <!--USB--> || <!--Ethernet-->{{No|Broadcom NetXtreme BCM5705M}} || <!--Wireless-->Intel PRO Wireless 2200BG || <!--Test Distro-->Icaros 1.3.1 || <!--Comments-->2002 32bit 15.1 inch |- | <!--Name-->Stylistic ST5000 ST5010 ST5011 ST5012 ST5020 ST5021 ST5022 || <!--Chipset-->1.0GHz P-M and later 1.1GHz on Intel 855GME || <!--IDE--> || <!--SATA-->{{N/A}} || <!--Gfx-->Intel 800 use VESA || <!--Audio-->Intel AC97 || <!--USB--> || <!--Ethernet-->Broadcom BCM5788 tg3 || <!--Wireless-->{{No|Intel 2200BG}} || <!--Test Distro--> || <!--Comments-->2003 32bit charged via a proprietary port power connector 16V 3.75A with wacom serial pen interface - indoor Screen transmissive 10.1 and later 12.1 XGA TFT - |- | <!--Name-->Amilo Pro V2010 || <!--Chipset-->VIA CN400 PM880 || <!--IDE--> || <!--SATA-->{{N/A}} || <!--Gfx-->{{No|S3 unichrome use VESA}} || <!--Audio-->{{No|VIA AC97 VT8237 with codec}} || <!--USB--> || <!--Ethernet-->Rhine 6102 6103 || <!--Wireless-->RaLink RT2500 || <!--Test Distro-->2017 Icaros 2.1.2 || <!--Comments-->2003 32bit boot mount - unknown bootstrap error then crashes |- | <!--Name-->Amilo Li 1705 CN896 || <!--Chipset--> with VIA P4M900 || <!--IDE--> || <!--SATA-->{{Maybe|IDE}} || <!--Gfx-->ATi || <!--Audio-->{{No|VIA VT8237 HD Audio with codec}} || <!--USB-->VT82xx 62xx || <!--Ethernet-->{{Yes|VIA Rhine}} || <!--Wireless-->{{No|Atheros G}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2005 32bit random freezes |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> Esprimo Mobile V5535 Skt mPGA 478MN | <!--Chipset--> | <!--IDE--> {{yes|IDE and EIDE}} | <!--SATA--> {{maybe|IDE mode with SIS 5513}} | <!--Gfx--> {{maybe|SiS 771 / 671 (VESA only)}} | <!--Audio--> {{yes|HD Audio SIS968 SIS966 SI7012 with ALC268 codec}} | <!--USB--> {{no|USB 1.1 and 2.0 issues}} | <!--Ethernet--> {{no|SiS 191 gigabit}} | <!--Wireless--> {{yes|Atheros AR5001 mini pci express}} | <!--Test Distro-->aros one 1.5 usb | <!--Comments-->2005 32bit 20v barrel - f2 setup f12 multi boot - random freezing short time after booting - chipset SIS 671MX - |- | <!--Name-->Amilo SI 1520 1521p || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Yes|GMA 2D}} || <!--Audio-->{{No|HD Audio Conexant codec}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{Yes|Intel Pro 100}} || <!--Wireless--> || <!--Test Distro-->Icaros 1.4.2 || <!--Comments-->2005 32bit - Set Bios option ATA Control Mode to Compatible |- | <!--Name-->Lifebook S7020 S7020D || <!--Chipset--> Pentium M 740 1.73MHz || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 915 || <!--Audio-->HD Audio ALC260 codec || <!--USB-->{{Yes| }} || <!--Ethernet-->Broadcom BCM5751M Gigabit || <!--Wireless-->Intel PRO Wireless 2200BG or Atheros 5k || <!--Test Distro--> || <!--Comments-->2006 32bit |- | <!--Name-->Stylistic ST5030 ST5031 ST5032 || <!--Chipset-->1 to 1.2GHx Pentium M with 915GM || <!--IDE--> || <!--SATA-->{{N/A}} || <!--Gfx-->Intel 900 || <!--Audio--> || <!--USB-->{{Yes| }} || <!--Ethernet-->Marvell || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2006 32bit charged via a proprietary port power connector 6.0 x 4.4 mm round - 200 pin ddr2 ram |- | <!--Name-->Stylistic ST5110 ST5111 ST5112 || <!--Chipset-->945GM with 1.2GHz Core Duo and Core2 Duo || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Intel 900 || <!--Audio-->HD audio with STAC9228 codec || <!--USB-->{{No| }} || <!--Ethernet--> || <!--Wireless-->Intel 3945 ABG or optional atheros || <!--Test Distro--> || <!--Comments-->2006 either 32 or 64 bit - charged via a proprietary port power connector 6.0 x 4.4 mm round - SigmaTel® touchscreen - |- | <!--Name-->E8110 S7110 E8210 || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Yes|945GM}} || <!--Audio-->{{Yes|HD Audio with ALC262 codec playback}} || <!--USB-->{{Yes}} || <!--Ethernet-->{{No|Marvell 88E8055 Gigabit}} || <!--Wireless-->{{No|Intel PRO Wireless 3945ABG}} || <!--Test Distro-->Icaros 2.0 || <!--Comments-->2006 32bit Core Duo |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || CHIPSET || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Lifebook PH521 || <!--Chipset-->AMD E-350 E-450 1.65GHz || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->HD 6310M 6320M || <!--Audio-->Realtek ALC269 || <!--USB-->{{No| }} || <!--Ethernet-->Realtek || <!--Wireless-->{{No|Atheros 802.11 bgn}} || <!--Test Distro--> || <!--Comments-->2011 64bit does not support AVX or SSE 4.1 - 11.6 inch 1366x768 pixels - DDR3 1066MHz - |- | <!--Name-->LIFEBOOK E752/E782/S752/S782 || <!--Chipset--> with Intel Core i3-2328M to i3-3110M || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->{{Maybe| }} || <!--Audio-->{{yes| }} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no|Intel 82579V 1000 }} || <!--Wireless-->{{no|Intel Wireless 6205 may be able to swap for Atheros 5k }} || <!--Test Distro-->Aros One 64bit || <!--Comments-->2012 64bit |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====HP Compaq==== [[#top|...to the top]] Build quality (Lowest to highest) <pre > Presario Pavilion Omnibook ProBook Armada Elitebook </pre > {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->1c00 series Compaq Presario [http://users.utu.fi/sjsepp/linuxcompaqarmada100s.html Armada 100S made by Mitac], 1247 || <!--Chipset-->K6-II with PE133 MVP-4 || <!--IDE--> || <!--SATA--> || <!--Gfx-->use VESA - Trident Blade3D AGP sp16953 || <!--Audio-->VIA ac'97 audio [rev20] with AD1881A codec || <!--USB-->{{Maybe|usual VIA issues [rev10]}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{N/A}} || <!--Test Distro--> || <!--Comments-->1998 32bit 192MB max - PCcard Texas PC1211 no support - 1200 XL1 1200-XL1xx, XL101, XL103 XL105 XL106 XL109 XL110 XL111 XL116 XL118 XL119 XL125 |- | <!--Name-->1c01 series Armada 110, Evo N150 || <!--Chipset-->Intel with VIA PLE133 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Use VESA - Trident Cyber Blade i1 chipset || <!--Audio-->VIA 686 rev20 82xxx 686a || <!--USB--> || <!--Ethernet-->Intel 82557 Pro 100 || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->1998 32bit max 192mb sodimm 100Mhz 133Mhz ram memory - 1200-XL405A 12XL405A XL502A 12XL502A 1600XL |- | Armada M300 M700 E500 || 440BX || {{Yes| }} || {{N/A}} || {{maybe|ATI Rage LT M1 Mobility (VESA only)}} || {{no|AC97 ESS Maestro 2E M2E ES1987 sound}} || {{yes|USB1.1 only}} || {{No|[http://perho.org/stuff/m300/index_en.html Intel PRO 100+ Mini PCI]}} || {{N/A}} || Aspire OS 2012, Nightly 30-01 2013 and 04-05 2013 || 1999 32bit - F10 bios options and Fn+F11 reset CMOS with 64mb ram already on board |- | <!--Name-->HP Omnibook XE3 || <!--Chipset-->Intel BX 600Mhz GC model 256mb or AMD GD 500Mhz || <!--IDE--> || <!--SATA--> || <!--Gfx-->Use VESA - S3 Inc. 86C270 294 Savage IX-MV (rev 11) || <!--Audio-->{{No|ESS ES1988 Allegro 1 (rev 12)}} || <!--USB-->Intel 82371AB PIIX4 USB (rev 01) || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{N/A}} || <!--Test Distro--> || <!--Comments-->2002 32bit no cardbus pcmcia support - no audio from Polk Audio Speakers - |- | <!--Name-->HP Omnibook XE3 || <!--Chipset-->82830 ICH3 P3-M 750MHz 800Mhz 900MHz || <!--IDE-->{{Yes| }} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Maybe|use VESA - CGC 830MG}} || <!--Audio-->{{No|ESS ES1988 Maestro 3i}} || <!--USB-->{{Yes|only one 1.1 port}} || <!--Ethernet-->{{Yes|e100 82557}} || <!--Wireless-->{{N/A|}} || <!--Test Distro-->Icaros 1.51 || <!--Comments-->2002 32bit Boots USB Stick via Plop boot floppy - Memory for GF 256-512mb, GS up 1GB |- | <!--Name-->TC1000 TC-1000 Tablet PC || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->NVIDIA NV11 [GeForce2 Go] (rev b2) || <!--Audio-->VIA AC97 Audio (rev 50) || <!--USB-->OHCI NEC USB 2.0 (rev 02) || <!--Ethernet-->Intel 82551 QM (rev 10) || <!--Wireless-->Atmel at76c506 802.11b || <!--Test Distro--> || <!--Comments-->2002 32bit Transmeta LongRun (rev 03) with VT82C686 - Texas Instruments TI PCI1520 PC card Cardbus |- | <!--Name-->HP Compaq R3000 ZV5000 (Compal LA-1851) || <!--Chipset-->Nvidia nForce 3 with AMD CPU || <!--IDE--> || <!--SATA--> || <!--Gfx-->Nvidia NV17 [GeForce4 420 Go 32M] || <!--Audio-->Nvidia || <!--USB--> || <!--Ethernet-->Broadcom or Realtek RTL8139 || <!--Wireless-->{{Maybe|Broadcom BCM4303 BCM4306 or Atheros bios locked}} || <!--Test Distro--> || <!--Comments-->2003 32bit - HPs have a setting to automatically disable wireless if a wired connection is detected |- | <!--Name-->Compaq [http://www.walterswebsite.us/drivers.htm Presario 700 series] || <!--Chipset-->VT8363 VT8365 [Apollo Pro KT133 KM133] || <!--IDE-->{{yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{maybe|VT8636A (S3 Savage TwisterK) (VESA only)}} || <!--Audio-->{{Maybe|VIA AC97 [rev50] with AD1886 codec}} || <!--USB-->{{maybe|VIA UHCI USB 1.1 [rev1a]}} || <!--Ethernet-->{{yes|RealTek RTL8139}} || <!--Wireless-->{{no|Broadcom BCM4306}} || <!--Test Distro--> || <!--Comments-->2003 32bit poor consumer grade level construction - jbl audio pro speakers - no support for cardbus pcmcia TI PCI1410 - 700A EA LA UK US Z 701AP EA BR FR 701Z 702US 703US AP JP audio sp18895 Sp19472 |- |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | N400c || P3-M 82845 || {{yes|82801 CAM IDE U100}} || {{N/A}} || {{maybe|Rage Mobility 128 (VESA only)}} || {{No|Maestro 3 allegro 1}} || {{yes|USB1.1}} || {{yes|Intel PRO 100 VM (KM)}} || {{N/A}} || Icaros 1.2.4 || 2003 32bit Has no optical disc drive |- | N410c || P3-M 82845 || {{yes|82801 CAM IDE U100}} || {{N/A}} || {{maybe|Radeon Mobility M7 LW 7500 (VESA only)}} || {{yes|Intel AC97 with AD1886 codec}} || {{yes|USB1.1}} || {{yes|Intel PRO 100 VM (KM)}} || {{N/A}} || Icaros 1.2.4 || 2003 32bit Has no optical disc drive |- | Evo N600c || Pentium 4 || {{yes|IDE}} || {{N/A}} || {{partial|ATI Radeon Mobility M7 (VESA only)}} || {{No|ESS ES1968 Maestro 2}} || {{yes|USB}} || {{yes|Intel PRO 100}} || {{dunno}} || Icaros 1.3 || 2003 32bit |- | Evo N610c || Pentium 4 || {{yes|IDE}} || {{N/A}} || {{partial|ATI Radeon Mobility M7 (VESA only)}} || {{yes|Intel ICH AC97 with AD1886 codec}} || {{yes|USB}} || {{yes|Intel PRO 100}} || {{dunno}} || Icaros 1.2.4 || |- | N800c || P4 || {{Yes|IDE}} || {{N/A}} || {{partial|ATI Radeon Mobility 7500 (VESA only)}} || {{yes|AC97}} || {{yes|USB}} || {{yes|Intel PRO 100}} || {{N/A}} || Icaros 1.2.4 || 2003 32bit P4M CPU can get very warm |- | <!--Name-->NX7010 || <!--Chipset-->Intel || <!--IDE-->{{yes|IDE}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{partial|ATI mobility 7500 or 9000 Radeon 9200 64MB (VESA only)}} || <!--Audio-->{{yes|AC97 ADI codec}} || <!--USB-->{{yes|uhci (1.1) and ehci (2.0)}} || <!--Ethernet-->{{yes|Realtek 8139}} || <!--Wireless-->{{No|Intel 2200b bios locked}} || <!--Test Distro--> || <!--Comments-->2003 32bit |- | <!--Name-->Compaq Preasrio V5000 (Compal LA-2771) || <!--Chipset-->AMD Sempron 3000+ or Turion ML with SB400 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|use VESA - Ati RS480M Xpress 200}} || <!--Audio-->{{No|AC97 ATI with Conexant CX 20468 codec}} || <!--USB--> || <!--Ethernet-->{{Yes|Realtek 8100 8101L 8139}} || <!--Wireless-->{{No|bcm4318 bios locked}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2004 64bit single core machine V5001 V5002 V5002EA V5003 |- | <!--Name-->TC1100 TC-1100 Tablet PC || <!--Chipset-->855PM || <!--IDE--> || <!--SATA--> || <!--Gfx-->Nvidia Geforce4 Go || <!--Audio-->AC97 || <!--USB--> || <!--Ethernet-->{{Maybe|BCM 4400}} || <!--Wireless-->{{Maybe|Atheros wlan W400 W500 or ? bios locked}} || <!--Test Distro--> || <!--Comments-->2004 32bit |- | <!--Name-->NC6000 NC8000 NW8000 || <!--Chipset-->855PM with Pentium M 1.5 1.6 1.8GHz 2.0GHz || <!--IDE-->max 160 GB for NW 8000 || <!--SATA--> || <!--Gfx-->{{Maybe|Ati RV350 mobility 9600 M10 Fire GL T2 ISV use VESA 2D as no laptop display}} || <!--Audio-->{{Yes|Intel AC97 with ADI codec playback only}} || <!--USB-->{{Yes|2 ports}} || <!--Ethernet-->{{No|Broadcom BCM 5705M}} || <!--Wireless-->{{Maybe|mini pci Atheros 5212 BG W400 W500 or Intel - all bios locked}} || <!--Test Distro--> || <!--Comments-->2005 based [http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=41916&forum=47 works] - Firewire TI TSB43AB22/A - 8 pound 2.5 kg travel weight - an SD slot as well as two PC Card slots - 15-inch UXGA screen (1,600 x 1,200) or 15" SXGA+ (1400 x 1050) (4:3 ratio) |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Compaq NC6110 NX6110 NC6120 NC6220 NC4200 NC8200 TC4200 || <!--Chipset-->GMA 915GML || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Yes|2D GMA 900}} || <!--Audio-->{{Yes|AC97 with ADI AD1981B playback}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{Unk|440x or BCM 5705M or 5751M}} || <!--Wireless-->{{No|Intel IPW 2200 bios locked}} || <!--Test Distro-->Icaros 1.5.2 || <!--Comments-->2005 32bit Sonoma based - Wifi with Atheros AR5007eg if apply hacked bios RISKY else use USB one - (INVENTEC ASPEN UMA MV) (INVENTEC ASPEN DIS PV) - |- | <!--Name-->Compaq C500 CTO aka HP G7000 || <!--Chipset-->Intel 945GM || <!--IDE--> || <!--SATA--> || <!--Gfx-->GMA 950 || <!--Audio-->HD Audio with realtek ALC262 codec || <!--USB--> || <!--Ethernet-->Realtek 8139 || <!--Wireless-->Broadcom BCM 4311 bios locked || <!--Test Distro--> || <!--Comments-->2005 32bit |- | <!--Name-->HP DV6000 || <!--Chipset-->945GMS || <!--IDE--> || <!--SATA--> || <!--Gfx-->GMA 950 || <!--Audio-->HD Audio IDT 92HD 91B || <!--USB--> || <!--Ethernet-->Intel PRO 100 VE || <!--Wireless-->{{No|Intel 3945 bios locked}} || <!--Test Distro--> || <!--Comments-->2006 32 bit only - Mosfet FDS6679 common cause of shorts giving no power to the tip. To reset adapter, unplug from AC (mains) and wait 15-30 sec. Then plug in again - |- | Presario F700 series, HP G6000 f730us F750 F750us F755US F756NR F765em || AMD Turion Mono MK-36 2.0Ghz NForce 560m or Twin X2 TK-55 with nForce 610m MCP67 || {{N/A| }} || {{Yes|but needs special sata adapt bit and caddy}} || {{Yes|GF Go 7000m 2D and 3D 640x350 to 1280x800 - ball solder issues due to poor cooling}} || {{Maybe| }} || {{Maybe|uhci and ehci boots}} || {{No|Nvidia }} || {{Yes|Atheros AR5007 bios locked}} || Icaros 1.3.1 and Aros One 1.6 USB || 2006 64bit - f9 boot device f10 bios setup - random freezes after a minutes use means internal ventilation maintenance needed each year essential - No sd card and overall limited phoenix bios options - |- | <!--Name-->Presario v6604au v6608au V3500 || <!--Chipset-->NVIDIA MCP67M with AMD Athlon64 X2 TK 55 amd 1.8ghz || <!--IDE--> || <!--SATA-->{{Yes|SATA 150}} || <!--Gfx-->NVIDIA GeForce Go 7150M 630i or C67 630M MCP67 || <!--Audio-->conexant codec || <!--USB--> || <!--Ethernet-->Nvidia or Realtek 10/100 || <!--Wireless-->{{No|Broadcom 4311 bios locked}} || <!--Test Distro--> || <!--Comments-->2006 64bit Altec Lansing Stereo Speakers - ball solder issues - |- | <!--Name-->Compaq presario v6610 v6615eo v6620us || <!--Chipset-->Turion 64 X2 mobile TK-55 / 1.8 GHz to athlon 64x2 @ 2.4ghz || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|SATA 150}} || <!--Gfx-->{{Yes|geforce 7150 or 7300m 2d and 3d}} || <!--Audio-->{{Yes|AMD HD Audio with IDT codec stereo playback only}} || <!--USB-->3 OHCI EHCI || <!--Ethernet-->{{Maybe| }} || <!--Wireless-->{{No|Broadcom bios locked}} || <!--Test Distro-->Icaros 1.3 - || <!--Comments-->2007 [http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=40956&forum=48 works well] - 1 x ExpressCard/54 - SD Card slot - AO4407 test voltage of the Drain side (pins 5-8) with AC adapter and no battery, see 0 volts, connect the battery you should have 10-14v - |- | <!--Name-->v6630em v6642em || <!--Chipset-->nForce 630M with AMD Turion 64 X2 Mobile TL-58 || <!--IDE--> || <!--SATA--> || <!--Gfx-->NVIDIA GeForce 6150M or 7150M || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless-->{{No|Broadcom bios locked}} || <!--Test Distro--> || <!--Comments-->2007 64bit 15.4 in 1280 x 800 ( WXGA ) - |- | <!--Name-->HP Compaq NC6400 || <!--Chipset-->945GM Core Duo || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|GMA 950 2D issues and no 3d}} || <!--Audio-->{{No|HD Audio AD1981HD}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|BCM }} || <!--Wireless-->{{No|Broadcom locked}} || <!--Test Distro-->Icaros || <!--Comments-->2007 - replaced with Atheros AR5007eg if apply hacked bios RISKY else use USB g - * 32bit Core Duo T2400 * 64bit Core 2 Duo T5600 T7600 |- | <!--Name-->HP Compaq NV NC6400 || <!--Chipset-->Core Duo + 945PM || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Maybe|use VESA Radeon x1300M (2D)}} || <!--Audio-->{{Maybe|HD Audio with ADI1981 low volume}} || <!--USB-->{{yes}} || <!--Ethernet-->{{no|BCM 5753M}} || <!--Wireless-->{{No|Intel 3945 ABG bios locked}} || <!--Test Distro--> Icaros 1.4.2 || <!--Opinion-->2007 Harmon Kardon speakers |- | <!--Name-->HP Compaq NC6320 || <!--Chipset-->945GM with * 32bit Core Duo 1.83GHz T2400 * 64bit Core2 Duo 1.83GHz T5600 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Yes|GMA 950 2D with a little 3D tunnel 213}} || <!--Audio-->{{Maybe|Intel HD Audio with AD1981HD codec}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|BCM 5788}} || <!--Wireless-->{{No|Intel 3945 bios locked}} || <!--Test Distro-->Icaros 2 || <!--Comments-->2007 replaced with Atheros AR5007eg if applying hacked wifi bios RISKY!! else use USB - 14.1" or 15 inch XGA 1024x768 - noisy cpu fan for core2 - trackpad rhs acts as window scroller - |- | <!--Name-->HP NC4400 TC4400 Tablet || <!--Chipset-->Core Duo with 82945 chipset || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|bios F.07 limits to 100GB 120GB}} || <!--Gfx-->{{yes|2D and 3D 282 tunnel and gearbox 150}} || <!--Audio-->{{Yes|HD Audio with ADI 1981HD codec via ear phones}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{No|BCM 5753M}} || <!--Wireless-->{{No|Intel 3945 or BCM 4306 - Whitelist BIOS F.0C needed but risky}} || <!--Test Distro-->2017 Icaros 2.1.2 || <!--Comments-->2008 64 bit possible with Core2 - TI SD card reader non bootable - wacom serial digitiser pen not working - * 32bit 1.86GHz core duo * 64bit 2Ghz T7200, 2.16Ghz Core 2 Duo T7600 2.33GHz |- | <!--Name-->HP Pavilion DV2000 CTO || <!--Chipset-->945GMS || <!--IDE--> || <!--SATA--> || <!--Gfx-->GMA 950, X3100, Nvidia 8400M || <!--Audio-->HD Audio Conexant CX 20549 Venice || <!--USB--> || <!--Ethernet-->Nvidia MCP51 || <!--Wireless-->{{No|Broadcom BCM 4311 or Intel 3945 4965 ABG bios locked}} || <!--Test Distro--> || <!--Comments-->2008 Atheros AR5007eg if apply hacked bios RISKY |- | <!--Name-->Compaq Presario C700 || <!--Chipset-->GMA960 || <!--IDE--> || <!--SATA--> || <!--Gfx-->X3100 || <!--Audio-->HD Audio || <!--USB--> || <!--Ethernet-->RTL 8139 || <!--Wireless-->{{Maybe|Atheros AR5007 AR5001 AR242x}} || <!--Test Distro--> || <!--Comments-->2008 |- | <!--Name-->Compaq 2510p 6510b 6710b 6910b || <!--Chipset-->GMA 965GM GL960 || <!--IDE-->{{yes| }} || <!--SATA--> || <!--Gfx-->{{yes|X3100 some 2d but slow software 3d only}} || <!--Audio-->{{maybe|HD Audio ADI AD1981 HD low volume on head phones}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no|Intel 82566 or Broadcom BCM 5787M}} || <!--Wireless-->{{No|Intel 3945ABG or 4965ABG bios locked}} || <!--Test Distro-->Aspire OS Xenon 2014 || <!--Comments-->2008 no sd card boot support - F9 to choose boot option - [http://forums.mydigitallife.info/threads/7681-This-is-no-request-thread!-HP-COMPAQ-bioses-how-to-modify-the-bios/page111?p=333358#post333358 whitelist removal (risky) bios block for wifi card swap] |- | <!--Name-->CQ40 CQ41 || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|VESA Intel}} || <!--Audio-->HD Audio || <!--USB--> || <!--Ethernet-->Realtek RTL8101E || <!--Wireless-->{{No|Broadcom BC4310 bios locked}} || <!--Test Distro--> || <!--Comments-->2008 |- | <!--Name-->Compaq Presario CQ35 CQ36 || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|VESA }} || <!--Audio--> || <!--USB--> || <!--Ethernet-->Realtek RTL8101E RTL8102E || <!--Wireless-->{{No|Broadcom BCM4312 bios locked}} || <!--Test Distro--> || <!--Comments-->2008 Compal LA-4743P - |- | <!--Name-->HP Compaq CQ42 CQ43 CQ45 || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|VESA }} || <!--Audio-->HD Audio with Coxenant codec || <!--USB--> || <!--Ethernet-->Realtek || <!--Wireless-->{{No|Realtek RTL8191SE, Realtek 8188CE}} || <!--Test Distro--> || <!--Comments-->2008 (Quanta AX1) |- | <!--Name-->Compaq Presario CQ50 CQ56 || <!--Chipset-->Nvidia MCP78S || <!--IDE--> || <!--SATA--> || <!--Gfx-->Geforce 8200M || <!--Audio-->nVidia HD Audio with codec || <!--USB--> || <!--Ethernet-->nvidia MCP77 || <!--Wireless-->{{unk|Atheros AR928X bios locked}} || <!--Test Distro--> || <!--Comments-->2008 [http://donovan6000.blogspot.co.uk/2013/06/insyde-bios-modding-wifi-and-wwan-whitelists.html bios modding risky] MCP72XE MCP72P MCP78U MCP78S |- | <!--Name-->CQ60 || <!--Chipset-->Single core Sempron to dual turion || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|VESA for Nvidia 8200M}} || <!--Audio-->{{yes|HD Audio}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no| }} || <!--Wireless-->{{No| bios locked}} || <!--Test Distro--> || <!--Comments-->2008 |- | <!--Name-->HP DV6700 || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{no|Vesa for Nvidia 8400M}} || <!--Audio-->{{no| }} || <!--USB-->{{no| }} || <!--Ethernet-->{{no| }} || <!--Wireless-->{{No|Intel }} || <!--Test Distro--> || <!--Comments-->2008 64bit - |- | <!--Name-->CQ60 || <!--Chipset-->Intel C2D || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|VESA for Nvidia 9200M}} || <!--Audio-->{{yes|HD Audio}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no| }} || <!--Wireless-->{{No| bios locked}} || <!--Test Distro--> || <!--Comments-->2009 64bit - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->CQ57z || <!--Chipset-->AMD slow E-300 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->{{Maybe|VESA ATi HD 6310 wrestler}} || <!--Audio-->{{unk| }} || <!--USB-->{{yes| }} || <!--Ethernet-->{{maybe|Realtek RTL8101 RTL8102}} || <!--Wireless-->{{No|RaLink RT5390}} || <!--Test Distro--> || <!--Comments-->2011 64bit does not support AVX or SSE 4.1 - |- | <!--Name-->HP CQ58z 103SA E5K15EA || <!--Chipset-->AMD slow Dual-Core E1-1500 APU with A68M FCH || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->{{Maybe|VESA 2D for Radeon HD 7310}} || <!--Audio-->Realtek idt codec || <!--USB-->{{yes| }} || <!--Ethernet-->{{yes|Realtek 10/100 BASE-T}} || <!--Wireless-->{{No|Broadcom}} || <!--Test Distro--> || <!--Comments-->2011 64bit does not support AVX or SSE 4.1 - 39.6 cm (15.6") HD BrightView LED-backlit (1366 x 768) |- | <!--Name-->HP 635 DM1 || <!--Chipset-->AMD slow E-300, E-450 later E2-1800 on SB7x0 SB8x0 SB9x0 || <!--IDE-->{{N/A}} || <!--SATA-->ATI non efi SATA AHCI - IDE mode || <!--Gfx-->{{Maybe|use VESA 2D - AMD HD6310, 6320 to HD7340}} || <!--Audio-->{{Yes|Realtek ALC270A GR but not Wrestler HDMI Audio}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{Yes|rtl8169 driver covers Realtek RTL8101E RTL8102E}} || <!--Wireless-->{{unk|Atheros AR9285}} || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - 14" 1366 x 768 - f9 f10 - external battery - 2 stacked ddr3l sodimm slots max 16Gb under one base plate - removable keyboard - |- | <!--Name-->HP G6 2000-2b10NR 2000-2d10SX 2000-2d80NR || <!--Chipset-->AMD very slow E1-2000 E2-3000M on A50M (soldered) A4-3305A on A60M (socket) || <!--IDE-->{{N/A}} || <!--SATA-->2.5in || <!--Gfx-->{{Maybe|VESA AMD Radeon 6320, 6620G, 6520G, 6480G, 6380G}} || <!--Audio-->{{No| }} || <!--USB-->{{No| }} || <!--Ethernet-->{{maybe|Realtek 100 1000}} || <!--Wireless-->{{No|Realtek}} || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - 39.6-cm (15.6-in) HD LED BrightView (1366×768) - 1 or 2 ddr3l max 8G - 19VDC 3.42A Max 65W Tip 7.4mm x 5.0mm - |- | <!--Name-->HP ProBook 6465B || <!--Chipset-->AMD massively slow A6-3310MX or A6-3410MX with A60M || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->{{Maybe|VESA AMD 6480G or 6520G}} || <!--Audio-->{{No|IDT 92HD81B1X}} || <!--USB-->{{No| }} || <!--Ethernet-->{{maybe|rtl8169 Realtek 8111}} || <!--Wireless-->{{No|Intel AC 6205 or broadcom 4313 bios locked}} || <!--Test Distro--> || <!--Comments-->2013 64bit does not support AVX or SSE 4.1 - 13-inch or 14-inch runs hot - |- | <!--Name-->HP Elitebook 8470p 8570p || <!--Chipset-->Intel Quad i7-3840QM, i7-3610QM, i7-3520M, i5-3210M, i3-3130M, i3-2370M on Intel QM77 chipset || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|set the bios boot options to not fastboot and drive mode IDE rather than AHCI }} || <!--Gfx-->{{Maybe|Vesa 2d for HD4000 with some having switchable Radeon M2000 or 7570M}} || <!--Audio-->{{yes|HDAudio for IDT codec}} || <!--USB-->{{yes|USB2}} || <!--Ethernet-->{{No|Intel 82579LM }} || <!--Wireless-->{{No|Intel, Broadcom, Atheros}} || <!--Test Distro-->64 bit boots from CD* if safe mode 2 is used, although it is possible to remove the 'nodma' and 'debug' entries and boot || <!--Comments-->2013 64bit with SSE4.1 and AVX - 14in 1600 x 900 to 1366 x 768 - 2 DDR3L sodimm slots max 16Gb - TPM 1.2 - dual boot 32/64 bit is working fine - |- | <!--Name-->HP ProBook 6475b, Probook 4445s 4545s, HP Pavilion 15-b115sa, [https://support.hp.com/gb-en/document/c04015674#AbT6 HP mt41 Mobile Thin Client PC] || <!--Chipset-->AMD very slow A4 4300M, A6 4400M 4455M or A8 4500M with AMD A70M A76M FCH || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->{{Maybe|VESA 7420 7520G 7640G 7660G}} || <!--Audio-->{{no|HD Audio with idt or realtek codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{No|Realtek RTL8151FH-CG}} || <!--Wireless-->{{No|Intel 6205 or Broadcom BCM 43228 bios locked}} || <!--Test Distro--> || <!--Comments-->2014 64bit does support AVX or SSE 4.1 - 15.6-inch - |- | <!--Name--> || <!--Chipset--> || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->HP ENVY 15-k112nl K1Y78EA || <!--Chipset-->Intel® Core™ i7 i7-4510U || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe| }} || <!--Gfx-->Intel HD4400 and/without NVIDIA® GeForce® GTX 850M || <!--Audio-->{{maybe| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no|Intel }} || <!--Wireless-->{{no| }} || <!--Test Distro-->Deadwood usb3 test iso || <!--Comments-->2014 64bit - 15.6" 768p to 1080p - 19.5V 3.33A (65w) 4.62A (90W) 6.15A (120W) AC - |- | <!--Name-->HP Pavilion Gaming Laptop 15-ak002na || <!--Chipset-->Intel 4 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->GTX 950 || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2015 64bit - |- | <!--Name-->HP ProBook 255 G1, 455 G1 F2P93UT#ABA, 645 G1, Envy 15-j151ea G7V80EA, Envy m6-1310sa (E4R01EA#ABU) || <!--Chipset-->AMD very slow Dual-Core E1-1500, or AMD Quad A4-4300M A8-4500M A10-4600M A4-5150M A6-5350M 2.9Ghz A10-5750M || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->{{Maybe|VESA 2D for 7310, 7420G 7520G 7640G 7660G 8350G 8450G or 8550G, 8650G, 8750G }} || <!--Audio-->{{No|HD Audio IDT 92HD91 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|realtek}} || <!--Wireless-->{{No|Atheros}} || <!--Test Distro--> || <!--Comments-->2015 64bit does support AVX or SSE 4.1 - 14in and 15in 1366 x 768 - external battery - 2 ddr3l sodimm slots - 19.5v / 4.62A psu runs hot - |- | <!--Name-->HP ProBook 245 G4, 255 G2, 455 G2, 255 G3, 455 G3, 255 G4 80CB, 255 G5 82F6, 355 G2, HP Pavilion 15-p038na 15-g092sa 15-p091sa 15-G094S 15-p144na 15-p142na, 15-Af156sa || <!--Chipset-->AMD very slow A4-5000 A6-5200, E2-6110, E1-6010 E2-2000, E1-2100 E2-3800, A4-6210 A6-6310 A8-6410, E2-7110, A6-7310 A8-7410 APU on A68M || <!--IDE-->{{N/A}} || <!--SATA-->sata some with cdrw dvdrw || <!--Gfx-->{{Maybe|VESA Radeon R2 R4 R5}} || <!--Audio-->{{no|HD Audio ALC3201-GR}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 RTL8102E or Atheros 1GbE}} || <!--Wireless-->{{unk|Qualcomm Atheros AR9565}} || <!--Test Distro--> || <!--Comments-->2015 64bit most have SSE4 AVX but E2-2000 does not - 15.6-inch (1366 x 768) - 2 ddr3l sodimm slots - small 31Whr or 41Whr external battery covers 240 G4, 245 G4, 250 G4, 255 G4, 256 G4, 14G, 15G - keyboard repair swap requires removal of all components - |- | <!--Name-->HP Elitebook 725 G2, 745 G2, 755 G2 || <!--Chipset-->Amd Quad very slow A6-7050B A8-7150B 1.9GHz A10-7350B || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->{{Maybe|VESA on AMD R4 R5 Radeon R6 with DP and vga}} || <!--Audio-->{{No|HD audio with IDT 92HD91}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 PCIe GBE}} || <!--Wireless-->{{no|Broadcom or Atheros}} || <!--Test Distro--> || <!--Comments-->2016 64bit - 12.5-inch, 14" or 15.6in (all 1366 x 768) - 19.5V 65w 45W AC adapter - internal pull up tab battery under base which slides off - 2 ddr3l sodimm slots - keyboard swap requires removal of all components - |- | <!--Name-->HP ProBook 645 g2, Probook 445 G2, Probook 245 G2 most have cmos rtc battery || <!--Chipset-->AMD very slow A6-8600 A8-8700 a10- || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->{{Maybe|VESA 2D for Radeon R5 R6}} || <!--Audio-->{{No|HD Audio }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{No|Intel I219V 100/1000}} || <!--Wireless-->{{No|Intel or Qualcomm Atheros}} || <!--Test Distro--> || <!--Comments-->2016 64bit - 14in and 15.6-inch HD (1366 x 768) or FHD 1080p - 2 ddr3l sodimm slots max 16GB - internal battery - hp ac psu tip - |- | <!--Name-->HP Probook 455 G3 should have a cmos battery || <!--Chipset-->AMD slow A10-8700P || <!--IDE-->{{N/A}} || <!--SATA-->1 2.5in sata and most should have 9.5mm dvd-rw || <!--Gfx-->{{Maybe|VESA 2D for Radeon R5}} || <!--Audio-->{{No|HDAudio with Conexant CX7501 codec }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 Realtek RTL8111HSH-CG}} || <!--Wireless-->{{no|RTL8188EE }} || <!--Test Distro--> || <!--Comments-->2016 64bit - 2 ddr3l sodimm slots - keyboard swap problematic - |- | <!--Name-->HP Elitebook 725 G3, 745 G3, 755 G3, 725 G4, 745 G4, 755 G4, HP mt43 || <!--Chipset-->Amd slow A8-8600B, A10-8700B, A12-8800B to Quad A8 Pro 9600B to A10 9800 || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->{{Maybe|VESA on AMD R5 R6 R7 with DP and vga but screen is low res, dull colours, and blurry}} || <!--Audio-->{{No|HD audio with IDT codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{No|Broadcom 5762 PCIe GBE}} || <!--Wireless-->{{no|Realtek RTL8723BE-VB}} || <!--Test Distro--> || <!--Comments-->2016 64bit - 12.5-inch (1366 x 768) to 14" and 15.6in - 2 sodimm ddr3 - 19.5V 45W AC slim 4.5mm hp adapter - randomly shuts down and the noisy fans constantly on - keyboard swap problematic - |- | <!--Name-->HP ProBook 645 G3, 655 G3 should have a cmos rtc battery underside of mb || <!--Chipset-->AMD 8th Gen slow A10-8730B, A8-9600B (4c4t) A6-8530B (2c2t) || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->{{Maybe|VESA 2d for AMD R5}} || <!--Audio-->{{No|HD Audio}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 RTL8111HSH}} || <!--Wireless-->{{No|Intel or Realtek}} || <!--Test Distro--> || <!--Comments-->2016 64bit - 15.6in - 2 ddr4 sodimm slots - keyboard repair swap requires removal of all components - |- | <!--Name-->HP ProBook 250 G5 easy cmos and external main battery || <!--Chipset-->Intel i7-6500U, i5-6200U, i3-6100U to slow i3-6006U, N3710 all sse4.1 and avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe| }} || <!--Gfx-->{{maybe|VESA 2D for iGPU Intel HD405 to HD520 dGPU skylake or AMD Radeon R5 430M}} || <!--Audio-->{{unk|HDAudio with Realtek ALC3227 (or ALC282) codec 0x0282 }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 rtl8111HSH}} || <!--Wireless-->{{no| }} || <!--Test Distro-->Deadwoods' latest usb3 test iso with noacpi || <!--Comments-->2016 64bit - 15.6 inch 768p - HP ac psu - 2 ddr4 sodimm slots - |- | <!--Name-->HP ProBook 250 G6 SL52 LA-E801P - easy cmos battery and external battery || <!--Chipset-->Intel dual core tested '''i5-7200U''' untested i7-7500U to very slow N3060 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes|ahci on M.2 sata or 2.5in sata3 whichever installed with 1 m.2 sata3 permanent and internal dvdrw}} || <!--Gfx-->{{yes|IG: 480p to 1080p 2D for Intel Intel HD Graphics 620 kabylake or AMD Radeon 520}} || <!--Audio-->{{yes|HDAudio 0x8086, 0xa170 or 0x8086, 0x9dc8 with ALC3227 aka ALC282 codec 0x10EC, x0282}} || <!--USB-->{{yes|intel sunrise point-lp USB3.0 xHCI}} || <!--Ethernet-->{{yes|rtl8169 Realtek RTL8111}} || <!--Wireless-->{{No|RTL8821CE or Intel wifi}} || <!--Test Distro-->Deadwoods' latest usb3 D03 test iso with noacpi || <!--Comments-->2017 64bit 768p or 1080p - 19.5V 65W - 2 DDR4 sodimm slots max 16Gb - keyboard swap problematic - synaptics touchpad - poor hinges and build quality - |- | <!--Name-->HP Pavilion 14-BS, HP 15-BS LA-E802P cmos battery and external battery || <!--Chipset-->Intel i3-7200U to slow Celeron || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata 2.5in (possibly requires the drive cable and M.2 sata3, most have no cdrw dvdrw}} || <!--Gfx-->{{Maybe|VESA 2d for Intel}} || <!--Audio-->{{No|HDAudio 0x8086, 0x9d70 with ALC codec 0x10EC, x0}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|Realtek rtl8169}} || <!--Wireless-->{{No|RTL8188CTV, RTL8821CE or Intel Dual Band Wireless-AC 3168}} || <!--Test Distro-->Deadwoods' latest usb3 test iso || <!--Comments-->2017 64bit 768p all - 19.5V 65W - DDR4 slot max 8Gb - keyboard swap problematic - synaptics touchpad - |- | <!--Name-->HP 14-bw022na - cmos coin battery and external battery || <!--Chipset-->AMD very slow A6-9120 APU || <!--IDE-->{{N/A}} || <!--SATA-->m.2 sata || <!--Gfx-->{{Maybe|VESA 2D for R3}} || <!--Audio-->{{no|HDAudio VOID with conexant CX7501 codec}} || <!--USB-->{{maybe|USB3 not working but port on the right works}} || <!--Ethernet-->{{yes|Realtek GbE}} || <!--Wireless-->{{No|Realtek}} || <!--Test Distro-->Deadwoods' latest usb3 test iso with noacpi || <!--Comments-->2017 64bit 768p to 900p - keyboard swap problematic - |- | <!--Name-->HP Probook 455 G4, Probook 455 G5, cmos battery on underside of mb take off back cover and below wifi card || <!--Chipset-->AMD very slow A10-9600P APU, A9-9410, A6-9210 APU || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->{{Maybe|VESA Radeon R4, R5 or R6}} || <!--Audio-->{{No|HDAudio with codec }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|realtek 1GbE}} || <!--Wireless-->{{no|realtek or intel Wireless-AC 7265}} || <!--Test Distro--> || <!--Comments-->2017 64bit 15.6in 768p - 2 ddr4 sodimm slots - keyboard swap problematic - rr03xl battery - |- | <!--Name-->HP ProBook 255 G6 (), easy cmos and external battery || <!--Chipset-->AMD very slow E2-9000e, A9-9420, 9220P, A4-9125 (all 2c) AMD A6-9225 AMD A9-9425 || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata 2.5in (possibly requires the drive cable and M.2 sata3 and internal cdrw dvdrw}} || <!--Gfx-->{{Maybe|VESA 2d for R2 R3 R4}} || <!--Audio-->{{No|HDAudio 0x1022, 0x157a or 0x1002, 0x15b3 with ALC codec 0x10EC, x0}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|Realtek rtl8169}} || <!--Wireless-->{{No|RTL8188CTV, RTL8821CE or Intel Dual Band Wireless-AC 3168}} || <!--Test Distro--> || <!--Comments-->2017 64bit 768p all - 19.5V 65W - DDR4 slot max 8Gb - keyboard swap problematic - synaptics touchpad - |- | <!--Name-->HP ProBook 255 G7 (la-g078p) - no cmos battery so needs internal battery || <!--Chipset-->AMD very slow E2-9000e, A9-9420, 9220P, A4-9125 (all 2c) AMD A6-9225 AMD A9-9425 || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata 2.5in (possibly requires the drive cable and M.2 sata3, most have no internal cdrw dvdrw}} || <!--Gfx-->{{Maybe|VESA 2d for R2 R3 R4}} || <!--Audio-->{{No|HDAudio 0x1022, 0x157a or 0x1002, 0x15b3 with ALC codec 0x10EC, x0}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|Realtek rtl8169}} || <!--Wireless-->{{No|RTL8188CTV, RTL8821CE or Intel Dual Band Wireless-AC 3168}} || <!--Test Distro--> || <!--Comments-->2017 64bit 768p all - 19.5V 65W - DDR4 slot max 8Gb - keyboard swap problematic - synaptics touchpad - |- | <!--Name-->ProBook 245 g8 - no cmos rtc coin battery but uses internal battery || <!--Chipset-->AMD very slow A6-9225, A4-9125, A6-8350B, A4-5350B APU || <!--IDE-->{{N/A}} || <!--SATA-->m.2 sata || <!--Gfx-->{{Maybe|VESA R4 R6}} || <!--Audio-->{{no|HDAudio}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|Realtek GbE}} || <!--Wireless-->{{No|Realtek}} || <!--Test Distro-->Deadwoods' latest usb3 test iso || <!--Comments-->2017 64bit 768p - many later variants - keyboard swap problematic - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Probook 255 G7 84AE 7DE72EA 7DE73EA (epv51 la-g076p) - CMOS Error (502) replace main internal battery HT03XL to have bios remember settings || <!--Chipset-->Ryzen 3 2200U 2300U (2c4t), R5 2500U, R7 2700U (4c8t) Raven Ridge || <!--IDE-->{{N/A}} || <!--SATA-->{{no|M.2 (Sata or NVMe) and very optional 2.5in sata, most have mini sata port}} || <!--Gfx-->{{Maybe|VESA 2d 640p to 768p for AMD Vega 3, 6, or 8}} || <!--Audio-->{{unk|HDAudio 0x1022, 0x15e3 with ALC236 0x10ec, 0x0236 codec}} || <!--USB-->{{maybe|USB3 }} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no|Realtek RTL8821CE, 8822BE or Intel AC 8265}} || <!--Test Distro-->AROS x64 deadwoods' iso does not boot with cd/dvd and installed to 2.5in ssd, boots to grub choice, select but no further and reboots || <!--Comments-->2017 64bit - 12.5 to 15.6in 768p mostly to 1080p - 1 on smaller laptops or 2 ddr4 2400mhz sodimm slots on larger laptops max 16Gb - hp 4.5mm blue tip charging - keyboard swap problematic - esc boot options f9 boot order f10 bios - synaptics touchpad - |- | <!--Name-->HP EliteBook 725 G5, 735 G5, 745 G5, 755 G5, Probook 455 G6, ProBook 645 G6 || <!--Chipset-->Ryzen 3 2200U 2300U (2c4t), R5 2500U, R7 2700U (4c8t) Raven Ridge || <!--IDE-->{{N/A}} || <!--SATA-->{{no|M.2 (Sata or NVMe) and very optional 2.5in sata, some have mini sata port but no cdrw dvdrw}} || <!--Gfx-->{{Maybe|VESA 2d 640p to 768p for AMD Vega 3, 6, or 8}} || <!--Audio-->{{No|HDAudio 0x1022, 0x15e3 with ALC 0x10ec, 0x0 codec}} || <!--USB-->{{maybe|USB3 }} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no|Realtek RTL8821CE, 8822BE or Intel AC 8265}} || <!--Test Distro-->Deadwoods' latest usb3 test iso does not boot software error || <!--Comments-->2017 64bit - 12.5 to 15.6in 768p mostly to 1080p - 1 on smaller laptops or 2 ddr4 2400mhz sodimm slots on larger laptops max 16Gb - hp 4.5mm blue tip charging - keyboard swap problematic - esc boot options f9 boot order f10 bios - synaptics touchpad - |- | <!--Name-->HP 14-cm, 15-bw0, HP 15-db0043na, HP 15-db0996na, HP 15-db0997na, 17-ca0007na, 17-ca1, ProBook 645 G4 - no cmos battery || <!--Chipset-->Ryzen 2200U (2c 4t) 2500U (4c 8t) with AMD Carrizo FCH 51 || <!--IDE-->{{N/A}} || <!--SATA-->{{no|1 M.2 and 1 2.5in on some larger models and hdd port }} || <!--Gfx-->{{Maybe|VESA Radeon R5 and later Vega 3 or 7}} || <!--Audio-->{{No|HDaudio 0x1002, 0x103c or 0x1022, 0x157a with Realtek ALC3227 0x10ec, 0x0282 but ATI HDMI}} || <!--USB-->{{Maybe|USB3 USB boot drive stuck on kitty's eyes}} || <!--Ethernet-->rtl8169 RTL8111E || <!--Wireless-->{{No|RTL 8723DE 8821 bios locked}} || <!--Test Distro-->2020 Icaros 2.3 USB, Deadwoods' latest usb3 test iso does not boot software error || <!--Comments-->2018 64bit 2kg - screen is dim 14in, 15.6in or 17.3" 768p or 1080p - 65W 19.5V ac adapter - internal 3-cell 41 Wh Li-ion battery does not last long - 2 ddr4 sodimm slots - no DVD-Writer - keyboard swap problematic - |- | <!--Name-->HP ProBook 250 G7, 250 G8 - no cmos battery so needs internal battery and needs usb3 boot due to garbage bios boot options || <!--Chipset-->Intel 8235U 8265U || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|M.2 nvme not working, optional sata 2.5in requires LS-G072P and ribbon cable, if internal cdrw dvdrw partial boot}} || <!--Gfx-->{{Maybe|VESA 2D for Intel Whiskey Lake-U 620 GT2 UHD}} || <!--Audio-->{{No|HDAudio 0x8086, 0xa170 or 0x8086, 0x9dc8 with ALC236 codec 0x10EC, x0236}} || <!--USB-->{{maybe|Cannon Point-LP USB3.1 xHCI}} || <!--Ethernet-->{{maybe|rtl8169 Realtek RTL8111}} || <!--Wireless-->{{No|RTL8821CE or Intel Dual Band Wireless-AC 3168}} || <!--Test Distro-->Deadwoods' latest usb3 test 2026.09.D01 iso works but does not boot stuck on kittys eyes if burnt to dvdr || <!--Comments-->2018 64bit 1080p all - 19.5V 65W - DDR4 slot max 16Gb - keyboard swap problematic - synaptics touchpad - f9 boot order f10 uefi - |- | <!--Name-->HP 255 G7 7DC73EA 2D200EA 87CE (fpp55 la-g07jp), - CMOS Error (502) replace 41.04Wh ht03xl hto3xl dynapack suzhou main battery to have bios remember settings || <!--Chipset-->'''tested''' R5 3500U (4c8t) '''untested''' mostly dual cores - AMD Athlon Gold 3150U (2c2t), Silver 3050U APU (2c2t), Ryzen 3 Pro 3145U APU, 3200U (2c4t) || <!--IDE-->{{N/A}} || <!--SATA-->{{no|1 m.2 NVMe or sata3 up to 2280, optional 2.5in sata, many have mini-sata slimline 6+7 internal port but no physical 9mm drive}} || <!--Gfx-->{{Maybe|VESA 2D from 640p to 1080p for AMD Vega 3, 6 or 8 with up to 2gb ram taken}} || <!--Audio-->{{unk|HDAudio 0x1022, 0x15e3 with realtek ALC236 codec 0x10ec, 0x0236}} || <!--USB-->{{maybe|USB3 but no usb-c}} || <!--Ethernet-->{{maybe|rtl8169 Realtek GbE RTL8111HSH}} || <!--Wireless-->{{No|Realtek 8822BE}} || <!--Test Distro-->2025 Aros One 32bit and 64bit usb works sometimes but burnt dvdr iso does not fully boot (stuck on kitty's eyes) || <!--Comments-->2018 64bit - 14in / 15.6in dim tn panel 768p or 1080p - 2 ddr4 sodimm slots max 16gb - hp 19.5V 45W 65W AC blue tip round 4.5 mm - keyboard swap problematic - synaptics touchpad - caps lock blinking 3 times then 2 quick pulses means ram or bios issue - f9 boot order f10 uefi - laptop needs usb3 to boot |- | <!--Name-->HP ProBook 450 G5 needs main battery for bios settings saved || <!--Chipset-->Intel i7-8550U, i5-8250U, i3-8130U, i7-7500U, i5-7200U, i3-7100U, i3-7020, i3-6006U all sse4.1 and avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe| }} || <!--Gfx-->{{maybe|VESA 2D for Intel UHD}} || <!--Audio-->{{unk|HDAudio with codec }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 rtl8111HSH}} || <!--Wireless-->{{no| }} || <!--Test Distro-->Deadwoods' latest usb3 test iso with noacpi || <!--Comments-->2018 64bit - 15.6 inch 768p or 1080p - HP ac psu, 1 ddr4 sodimm slot - |- | <!--Name-->[https://support.hp.com/gb-en/document/c06955717 ProBook 245 g8], Probook 445R G6, 455R G6, HP14-dk0599sa, pavilion 15-cw1511na 15-cw1507sa, HP 15s-eq1516sa no cmos battery || <!--Chipset-->AMD Athlon Gold 3150U (2c2t), Silver 3050U APU (2c2t), Ryzen 3 Pro 3145U APU, 3200U (2c4t) and 3500U (4c8t) || <!--IDE-->{{N/A}} || <!--SATA-->{{no|1 m.2 (NVMe or sata3 up to 2280), optional 2.5in sata but resets}} || <!--Gfx-->{{Maybe|VESA 2D from 640p to 1080p for AMD Vega 3, 6 or 8 with up to 2gb ram taken}} || <!--Audio-->{{unk|HDAudio 0x1022, 0x15e3 with realtek ALC codec 0x10ec, 0x0}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 Realtek GbE RTL8111HSH}} || <!--Wireless-->{{No|Realtek 8822BE}} || <!--Test Distro-->Aros || <!--Comments-->2018 64bit - 14in / 15.6in dim tn panel 768p or 1080p - 2 ddr4 sodimm slots max 16gb - hp 19.5V 45W 65W AC blue tip round 4.5 mm - keyboard swap problematic - synaptics touchpad - f9 boot order f10 uefi |- | <!--Name-->HP ProBook 450 G6 needs main battery for bios settings saved || <!--Chipset-->Intel i7-8565U, i5-8265U, i3-8165U all sse4.1 and avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe| }} || <!--Gfx-->{{maybe|VESA 2D for Intel UHD 620}} || <!--Audio-->{{unk|HDAudio with Realtek ALC3246 aka ALC295 codec }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 rtl8111HSH}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2019 64bit - 15.6 inch 768p or 1080p - 45W 19.5V HP ac psu - 2 ddr4 sodimm slots - |- | <!--Name-->Elitebook 735 G6 5VA23AV, Elitebook 745 G6, 255 g8, HP 15s-dy - no cmos battery || <!--Chipset-->AMD® Ryzen™ 5-3500U Ryzen 3-3300U AMD Ryzen 3-3250U AMD Athlon® Gold 3150U AMD Athlon Silver 3050U AMD 3020e || <!--IDE-->{{N/A}} || <!--SATA-->{{no|m.2 2280 nvme in legacy - hp sure start and secure boot disabled but still issues with gpt installs - LS-H323P LS-K201P}} || <!--Gfx-->{{Maybe|VESA for Vega 8, 5 or 3}} || <!--Audio-->{{No|HDAudio 6.34 ahi with realtek ALC codec 0x10EC, 0x0295}} || <!--USB-->{{maybe|USB3 type-A port boots stick partially to kitty eyes}} || <!--Ethernet-->{{Maybe|rtl8169 realtek RTL8111E or 8111H}} || <!--Wireless-->{{No|realtek or intel}} || <!--Test Distro-->2020 Icaros 2.3 onto USB and AROS One 1.8 USB, Deadwoods' latest usb3 test iso with noacpi || <!--Comments-->2019 64bit - 15.6in 1366x768 to 1920x1080 - 2 3200MHz DDR4 sodimms - 19.5V 2.31A or 20V 2.25 45W 4.5X3.0MM hp - esc bios setup, f9 boot device select - low travel keyboard - poor hw03xl or battery life - plastic hooked base with retained screws - touchpad? - |- | <!--Name-->HP ProBook 445 G7, 455 G7 || <!--Chipset-->Ryzen 3 4300U 5 4500U 4700U || <!--IDE-->{{N/A}} || <!--SATA-->1 sata and 1 nvme || <!--Gfx-->{{Maybe|VESA Vega 3}} || <!--Audio-->{{unk|HDAudio with realtek alc236 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|realtek rtl8111ep}} || <!--Wireless-->{{No|realtek RTL8822CE or intel AC 9260 or Wi-Fi 6 AX200}} || <!--Test Distro-->Deadwoods' latest usb3 test iso || <!--Comments-->2020 64bit - 14 inch 768p or 1080p - 2 ddr4 sodimm slots - smart 45w 65w hp or usb-c charging - keyboard swap problematic - RE03XL battery - |- | <!--Name-->HP ProBook 450 G7 || <!--Chipset-->Intel || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe| }} || <!--Gfx-->{{maybe|VESA 2D for Intel UHD}} || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 rtl8111EP}} || <!--Wireless-->{{no| }} || <!--Test Distro-->Deadwoods' latest usb3 test iso with noacpi || <!--Comments-->2020 15.6 inch 768p or 1080p - 1 ddr4 sodimm slot - |- | <!--Name-->HP EliteBook 745 G7, 845 G7, HP 15-EH0006NA || <!--Chipset-->AMD Ryzen 3 4300U, 5 4500U, PRO 4650U || <!--IDE-->{{N/A}} || <!--SATA-->SSD M.2 || <!--Gfx-->{{Maybe|VESA AMD Radeon Vega 8}} || <!--Audio-->{{unk|Hdaudio with codec 0x10EC, 0x0257}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2020 64bit - 15.6in 1080p - 1 ddr4 sodimm slot - Bang & Olufsen speakers - keyboard swap problematic - |- | <!--Name-->HP ProBook 255 G8, HP 245 G9, ProBook 255 G9 816C2EA#ABE, - no cmos battery only internal battery || <!--Chipset-->AMD RYZEN 3 5300u, 5425U, 5 5500U 5625U, 7 5700u || <!--IDE-->{{N/A}} || <!--SATA-->{{no|NVMe}} || <!--Gfx-->{{Maybe|VESA AMD Vega 6 or 8 hdmi 1.4B}} || <!--Audio-->{{unk|HDAudio}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 Realtek RTL8111HSH-CG GbE}} || <!--Wireless-->{{No|Realtek RTL8822CE or Intel}} || <!--Test Distro--> || <!--Comments-->2021 64bit - 14" to 15.6in 768p to 1080p poor gamut - 45 or 65w hp psu - 2 ddr4 sodimm slots max 16GB - keyboard swap problematic - |- | <!--Name-->HP ProBook 450 G9 || <!--Chipset--> || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe| }} || <!--Gfx-->{{maybe|VESA 2D for Intel Iris Xe}} || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 rtl8111H}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2020 15.6 inch - 1 ddr4 sodimm slot - |- | <!--Name-->HP EliteBook 645 g7, 835 G8, 845 g8, HP ENVY x360 13 15, HP 17-cp0021na || <!--Chipset-->AMD Ryzen 5 5650U, 7 5800U, R7 Pro 5850U || <!--IDE-->{{N/A}} || <!--SATA-->NVMe || <!--Gfx-->{{Maybe|VESA 2D for AMD Radeon}} || <!--Audio-->{{unk|HDAudio 0x, 0x with ALC3247 aka ALC236 codec 0x10ec, 0x0236}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{Maybe|Realtek 1Gbe on 645 only}} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2021 64bit - 13.3" or 14" 1080p - poor screens low nits and srgb score - 845 gets hot ue to poor cooling - slim round hp ac - keyboard swap problematic - |- | <!--Name-->HP Dev One, HP ProBook 455 G8 || <!--Chipset-->AMD Ryzen 7 5800U, R7 5850U || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Maybe|VESA }} || <!--Audio-->{{unk| }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2021 64bit 15.6" 1080p - 2 internal sodimm slots - hp barrel charging - |- | <!--Name-->Elitebook 655 g9 669y1ut#aba, || <!--Chipset-->AMD Ryzen 5 PRO 5675U || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Maybe|VESA }} || <!--Audio-->{{unk| }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2021 64bit 15.6" 1080p - 1 or 2 internal sodimm slots - usb-c charging - |- | <!--Name-->HP probook 635 Aero G8 || <!--Chipset-->AMD Ryzen 5 5600U || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2921 64bit - 14in 1080p - 2 ddr4 slots - ec chip nuvoton NPCX797HA1B - bios winbond 250256JYEN - |- | <!--Name-->HP PROBOOK X360 435 G8 cmos battery || <!--Chipset-->RYZEN 5 5600U || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe| }} || <!--Gfx-->{{maybe|Vesa 2D }} || <!--Audio-->{{maybe|HDaudio with ALC236 codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|RTL8822CE or Intel AX200}} || <!--Test Distro--> || <!--Comments-->2021 64bit - hp round ac plug - |- | <!--Name-->HP Elitebook 845 g9 || <!--Chipset-->AMD 6000 series 6850u || <!--IDE-->{{N/A}} || <!--SATA-->M.2 NVMe || <!--Gfx-->{{Maybe|VESA 2D for Vega 8}} || <!--Audio-->{{unk|HDaudio with codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| }}Qualcomm Atheros || <!--Test Distro--> || <!--Comments-->2022 64bit aluminum case - 14in 1080p to 2140p 16:10 poor screen again - 2 internal ddr5 sodimm slots - usb-c ac charging avoid any knocks - keyboard swap problematic - |- | <!--Name-->HP ProBook 445 G10, 455 G10 || <!--Chipset-->AMD Ryzen 5 7530U || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD Vega 7 || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2023 64bit - 15.6in - hp round ac - |- | <!--Name-->Hp 455 G11 || <!--Chipset-->AMD Ryzen 3 7335U (4c8t), 5 7535U (6c12t), 7 7735U (8c16t) || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD Vega 7 || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 RTL8111HSH}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2023 64bit - 35.6 cm (14.0 in) 1920x1200 or 2560x1600 - usb-c 45w or 65w ac - 2 ddr5 sodimm slots max 32gb - |- | <!--Name--> || <!--Chipset--> || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |} ====IBM/Lenovo==== [[#top|...to the top]] Build quality (Lowest to highest) <pre > iSeries Edge Ideapad Thinkpad - good cases and construction but electronic internals same as anyone else </pre > {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Thinkpad 390X 390E (2626) || <!--Chipset-->Neo Magic MM2200 with C400 P2-266 to P3 500MHz || <!--IDE--> || <!--SATA--> || <!--Gfx-->use VESA || <!--Audio-->{{No|256AV or ESS Solo-1}} || <!--USB--> || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{N/A}} || <!--Test Distro--> || <!--Comments-->1998 32bit |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Thinkpad 600x || <!--Chipset-->Intel 440BX || <!--IDE-->{{Maybe| }} || <!--SATA--> || <!--Gfx-->{{Maybe|use VESA Neomagic NM2360 MagicMedia 256ZX}} || <!--Audio-->{{No|Crystal CS4297A codec}} || <!--USB--> || <!--Ethernet-->{{N/A| }} || <!--Wireless-->{{N/A| }} || <!--Test Distro-->Icaros 1.3.1 || <!--Comments-->1998 32bit a little support - earlier 600 and 600e were Pentium 2 based |- | <!--Name-->Thinkpad X20 (2662-32U) X21 || <!--Chipset-->Intel 440 BX ZX DX || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio-->{{no|AC97 with Cirrus Logic Crystal cs4281}} || <!--USB-->1.1 || <!--Ethernet-->no mini pci intel e100 || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2002 32bit |- | Thinkpad T20 (2647) T21 (26) T22 || 440BX || {{Maybe| }} || {{N/A}} || {{partial|Savage IX-MV (VESA only)}} || {{no|Cirrus Logic CS 4614/22/ 24/30}} || {{yes|USB 1.1}} || {{yes|Intel PRO 100}} || {{N/A}} || Icaros 1.2.4 || 2002 32bit |- | <!--Name-->A21e (2628, 2655) A22e || <!--Chipset-->440MX || <!--IDE--> || <!--SATA--> || <!--Gfx-->Ati rage mobility || <!--Audio-->{{no|AC97 Cs4299 CS4229}} || <!--USB--> || <!--Ethernet-->intel e100 || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2002 |- | Thinkpad T23 (2647) || i810 || {{yes|IDE}} || {{N/A}} || {{maybe|S3 Super Savage IX/C SDR (VESA only)}} || {{maybe|AC'97 CS4299}} || {{yes|USB 1.1}} || {{yes|Intel ICH3 PRO 100 VE}} || {{no|Realtek RTL8180L others with bios hacking risky}} || || 2003 32bit with some support |- | <!--Name-->Thinkpad X22 X23 X24 || <!--Chipset-->830 || <!--IDE--> || <!--SATA--> || <!--Gfx-->ATi Mobility M6 LY || <!--Audio-->Ac97 CS4299 || <!--USB-->2 x 1.1 || <!--Ethernet-->Intel Pro 100 || <!--Wireless-->Actiontec Harris Semi Intersil Prism 2.5 (X23 and X24 only) || <!--Test Distro--> || <!--Comments-->2003 32bit with slice Ultrabase X2 - |- | <!--Name-->A30 A30p || <!--Chipset-->830 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Ati Radeon M6 || <!--Audio-->AC97 CS 4299 || <!--USB--> || <!--Ethernet-->Intel Pro 100 ve || <!--Wireless-->{{No|Intel 2200 bios locked}} || <!--Test Distro--> || <!--Comments-->2003 32bit |- | <!--Name-->A31 A31p R31 R32 T30 || <!--Chipset-->830 || <!--IDE-->{{yes| }} || <!--SATA-->{{N/A| }} || <!--Gfx-->Ati Radeon 7500 or FireGL || <!--Audio-->{{yes|AC97 Intel with AD1881A codec}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{yes| Intel Pro 100 ve}} || <!--Wireless-->{{No|Intel bios locked}} || <!--Test Distro-->[https://forums.lenovo.com/t5/Android-Ecosystem-Developers/AROS-An-operation-system-inside-Android/td-p/1441741 Icaros 1.5.2] || <!--Comments-->2003 32bit Also tested with Icaros 2.0.3. |- | Thinkpad X30 (2673) X31 (2884-xx2) X31t || i830 || {{yes}} || {{N/A}} || {{maybe|VESA only Radeon M6 Mobility}} || {{yes|AC97 - AD1981B codec}} || {{yes|USB 1.1}} || {{yes|Intel PRO 100}} || {{no|Cisco Aironet or Intel 2915 but atheros with bios hacking}} || Icaros 1.4 || 2004 32bit sound bit distorted |- | <!--Name-->R50e R51 || <!--Chipset-->855M || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|Intel 855M use VESA}} || <!--Audio-->intel AC97 with AD1981B codec || <!--USB--> || <!--Ethernet-->{{Yes|Intel 100 VE}} || <!--Wireless-->{{No|Intel PRO Wireless 2200BG bios locked}} || <!--Test Distro--> || <!--Comments-->2004 32bit - |- | IBM Thinkpad T40 (2373) T41 T41p (2379) T42 T42p T43 T43p || Intel 8xx || {{partial|PIO}} || {{N/A}} || {{partial|ATI mobility 7500 9000 (VESA only)}} || {{yes|AC97 playback}} || {{yes|uhci 1.1 and ehci 2.0}} || {{no|e1000}} || {{Maybe|Intel 2200bg bios locked but possible AR5BMB-44 AR5212 FRU 39T0081 mini PCI}} || Icaros 1.2.4 || 2004 32bit 16v IBM plug - Centrino Needs ATA=nodma option - issues with the inner chip of the SMT BGA graphics chip |- | Thinkpad X32 || i855 || {{yes|40, 60 or 80GB 2.5" PATA HDD}} || {{N/A}} || {{maybe|VESA only ATI Mobility Radeon 7000 with 16MB}} || {{maybe| Intel AC'97 Audio with a AD1981B codec}} || {{yes|USB}} || {{no|Intel 1000}} || {{no|Intel 2200 but atheros with bios hacking}} || 2016 Icaros 2.1 || 2004 32bit - 12.1" TFT display with 1024x768 resolution; 256 or 512MB PC2700 memory standard (2GB max) |- | <!--Name-->Thinkpad X40 X40t by Quanta || <!--Chipset--> || <!--IDE--> || <!--SATA-->{{N/A}} || <!--Gfx-->{{maybe|Intel 800 (VESA only)}} || <!--Audio-->{{yes|AC97 AD1981B}} || <!--USB-->{{yes}} || <!--Ethernet-->{{no|Intel e1000}} || <!--Wireless-->{{Maybe|Intel but most atheros with bios hacking - difficult though}} || <!--Test Distro--> || <!--Comments-->2004 32bit last IBM design |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Thinkpad X41 (IBM) MT 1864 1865 2525 2526 2527 2528 x41t (Lenovo) MT 1866 1867 || <!--Chipset-->Intel with single core 1.5 1.6 and tablet 1.2GHz || <!--IDE-->{{yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Yes|Intel 915GML 2D}} || <!--Audio-->{{yes|AC97 AD1981B}} || <!--USB-->{{yes}} || <!--Ethernet-->{{no|Broadcom BCM5751M tg3}} || <!--Wireless-->{{Maybe|Intel or MiniPCI Wi-Fi Atheros AR5BMB FRU 39T0081 but ordinary atheros 54meg needs risky bios hacking}} || <!--Test Distro--> || <!--Comments-->2005 32bit - amongst first Lenovo design - 3pin cmos - |- | <!--Name-->R52 (most 18xx) || <!--Chipset-->Intel 915 || <!--IDE-->{{Yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Yes|Intel 915GML 2D}} || <!--Audio-->{{yes|AC97 AD1981B}} || <!--USB-->{{yes}} || <!--Ethernet-->{{no|Broadcom}} || <!--Wireless-->{{no|Broadcom bios locked}} || <!--Test Distro--> || <!--Comments-->2005 32bit |- | <!--Name-->R52 1846, 1847, 1848, 1849, 1850, 1870 || <!--Chipset-->ATi 200m || <!--IDE-->{{Yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{No|ATI}} || <!--Audio-->{{yes|AC97 AD1981B}} || <!--USB-->{{yes}} || <!--Ethernet-->{{no|Broadcom BCM5751M tg3}} || <!--Wireless-->{{no|Broadcom bios locked}} || <!--Test Distro--> || <!--Comments-->2005 32bit |- | <!--Name-->Thinkpad T60 T60P * 64bit - 6 or 8 is 16:10 on T60/p, eg. 8742-CTO 15.4" * 32bit - 1 and 2 are 14", 15" 4:3, like 2007-YM3 or 1952-CTO || <!--Chipset-->*any* T60/p will take a Core 2 Duo CPU with newer BIOS || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->Intel GMA (2D) with "p" graphics card (ATi V5200 or V5250) || <!--Audio-->{{no|HD Audio}} || <!--USB-->{{yes}} || {{no|e1000e 82573L}} || <!--Wireless-->{{No|Intel ipw3945 ABG but atheros with Middleton's or Zender BIOS hacking risky}} || Icaros 1.4 || <!--Comments-->2006 - |- | <!--Name-->X60 x60s x60t tablet || <!--Chipset-->945GMS 940GML || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{yes|Intel GMA (2D)}} || <!--Audio-->{{no|AD1981 HD Audio}} || <!--USB-->{{yes}} || <!--Ethernet-->{{no|Intel}} || <!--Wireless-->{{no|Intel 3945 ABG or fru 39T5578 Atheros 5K AR5BXB6 ar5007eg with bios hacking}} || <!--Comments-->Icaros 1.4 || 2006 32bit - perhaps needs a zendered bios update but risky |- | <!--Name-->R60 R60e || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->intel 950 with optional radeon x1300 x1400 || <!--Audio-->HD Audio with 1981HD codec || <!--USB--> || <!--Ethernet-->Intel or Broadcom || <!--Wireless-->{{Maybe|Intel 3945 or atheros fru 39T5578 bios locked}} || <!--Test Distro--> || <!--Comments-->2006 32bit |- | Thinkpad T61 T61p without Middleton's or Zender BIOS || Core 2 Duo CPU T7300 T8300 || {{N/A}} || <!--SATA-->{{yes| }} || Intel GMA (2D), NVS 140m or Quadro FX 570M () || {{maybe|HD Audio with Analog Devices AD1984 or AD1984A HD Audio Codec routed to the line output}} || <!--USB-->{{yes}} || {{no|intel e1000e 82573L}} || {{No|Intel but atheros with bios hacking risky}} || Icaros 1.6, AROS One || 2007 64bit |- | <!--Name-->X61 x61s X61T Tablet || <!--Chipset-->Core Duo T8100 on i965 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->{{yes|Intel GMA 3100 (2D) slow 3D}} || <!--Audio-->{{no|AD1984 HD Audio}} || <!--USB-->{{yes|USB 2.0}} || <!--Ethernet-->{{no|Intel 82566DM}} || <!--Wireless-->{{maybe|Atheros AR5212 (some revisions use Intel WLAN runs very hot) bios locked}} || <!--Test Distro--> || <!--Opinion-->2007 64bit ultrabook running very hot - ddr2 max 4gb - 3pin cmos - |- | <!--Name-->R61 R61i || <!--Chipset-->Intel 965 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->intel 965 || <!--Audio-->HD Audio with conexant codec || <!--USB--> || <!--Ethernet-->Broadcom BCM5787M || <!--Wireless-->{{No|Intel 3945 bios locked}} || <!--Test Distro--> || <!--Comments-->2008 64bit |- | Lenovo 3000 N200 || <!--Chipset-->Santa Rosa || {{N/A}} || <!--SATA-->{{maybe| }} || {{yes|Geforce 7300 (2D)}} || {{yes|ALC262 HD Audio}} || <!--USB-->{{yes}} || {{no|Broadcom}} || {{no|Intel 3945 bios locked}} || Icaros 1.4 || 2007 64bit 3D graphics parts are supported but buggy. |- | Lenovo 3000 N200 / V200 || GM965 ICH9-M with Intel Mobile Core 2 Duo T5450 || {{N/A}} || <!--SATA-->{{maybe| }} || {{yes|X3100 (2D)}} || {{Maybe|HD Audio ALC269VB or CX20549}} || {{yes| }} || {{no|BCM5906M}} || {{no|Intel 3965 / 4965AGN bios locked}} || Icaros 1.4.1 2.1 || 2007 64bits of laptop works |- | <!--Name-->X300 || <!--Chipset-->Core 2 Duo Merom SL7100 1.2GHz || <!--IDE-->{{N/A}} || <!--SATA-->1.8 inch || <!--Gfx-->{{maybe|Intel X3100}} || <!--Audio-->HD Audio AD1984A || <!--USB--> || <!--Ethernet-->Intel || <!--Wireless-->{{No|Intel 4965 bios locked}} || <!--Test Distro--> || <!--Comments-->2007 64bit 13.3" TFT 1440x900 (WXGA+) with LED backlight |- | <!--Name-->Thinkpad Edge 11″ AMD K325 || <!--Chipset-->M880G || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{maybe|VESA for ATI HD4200}} || <!--Audio-->{{maybe| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 8111}} || <!--Wireless-->{{no|8192CE (Realtek 8176) bios locked}} || <!--Test Distro--> || <!--Comments-->2007 little support |- | <!--Name-->Thinkpad X301 || <!--Chipset-->Core 2 Duo Penryn SU9400 Su9600 with GM45 chipset || <!--IDE-->{{N/A}} || <!--SATA-->1.8 inch micro SATA (uSATA) || <!--Gfx-->{{maybe|Intel X4500}} || <!--Audio-->AD1984A || <!--USB--> || <!--Ethernet-->Intel || <!--Wireless-->{{No|Intel 5xxx WiFi link 5100, 5150, 5300 and 5350 (WiMAX) bios locked}} || <!--Test Distro--> || <!--Comments-->2009 WXGA+ (1440×900) LED backlight display - 2774 or 4057 Alps and 2776 Synaptics touchpad - optical bay interface is Legacy IDE (PATA) - Addonics ADMS18SA, Lycom ST-170m |- | <!--Name-->X100e || <!--Chipset-->AMD Athlon Neo Single-Core (MV-40) and dual cores || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|2.5in tray in ide mode in bios}} || <!--Gfx-->{{Maybe|Vesa ATI HD3200}} || <!--Audio-->{{yes|HD Audio with CX20582 codec playback}} || <!--USB-->{{Maybe| }} || <!--Ethernet-->{{Yes|Realtek 8111}} || <!--Wireless-->{{no|Realtek r8192se bios locked}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2009 64bit 11.6in 1366 x 768 - 20v 65W round barrel - enter f1 setup f11 diagnostics f12 boot list - runs very warm - |- | <!--Name-->SL400 SL500 || Intel || {{N/A}} || {{Yes|IDE mode}} || {{Maybe|Nvidia 9400M}} || {{Maybe|ALC269}} || {{yes|USB 2.0}} || {{Maybe|RTL8169}} || {{Maybe| bios locked}} || || |- | <!--Name-->SL410 SL510 || 965 || {{N/A}} || {{maybe|IDE mode}} || {{maybe|Intel GMA X4500M (some 2D)}} || {{yes|HD Audio with ALC269 codec - speaker and ear phones}} || {{yes|USB 2.0}} || {{yes|RTL8169}} || {{Maybe| bios locked}} || [http://www.amiga.org/forums/showpost.php?p=645774&postcount=28 Icaros 1.3] || 2009 64bit SL-410 |- | <!--Name-->T400 ODM Wistron || <!--Chipset-->i || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS}} || <!--Gfx-->{{Maybe|Intel 4500MHD works limited 2d no 3d - optional switchable Nvidia or ATi HD3470 untested}} || <!--Audio-->{{Yes|HD Audio with Codec CX20561 (T400)}} || <!--USB--> || <!--Ethernet-->{{no|Intel e1000e}} || <!--Wireless-->{{No|Intel Wifi Link 5100 (AGN) half height card with FRU 43Y6493 or 5300 bios locked}} || <!--Test Distro--> || <!--Comments-->2009 64bit 20v lenovo plug - non-free firmware required iwlwifi |- | <!--Name-->T400s || <!--Chipset-->i || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS}} || <!--Gfx-->{{Maybe|VSEA for Intel 4500MHD works limited 2d no 3d}} || <!--Audio-->{{Maybe|HD Audio with CX20585}} || <!--USB--> || <!--Ethernet-->{{no|Intel e1000e}} || <!--Wireless-->{{No|Intel Wifi Link 5100 (AGN) half height card with FRU 43Y6493 or 5300 bios locked}} || <!--Test Distro--> || <!--Comments-->2009 64bit non-free firmware required iwlwifi |- | <!--Name-->Lenovo T500 T510 || <!--Chipset-->i || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS}} || <!--Gfx-->{{maybe|VESA for switchable Intel / AMD HD 3640}} || <!--Audio-->{{maybe|Intel HD Audio with a CX20561 (t500) and CX20585 (T510) codec}} || <!--USB--> || <!--Ethernet-->{{no|Intel }} || <!--Wireless-->{{no|Intel or Lenovo branded unit Atheros AR5007EG AR5BHB63 bios locked}} || <!--Test Distro--> || <!--Comments-->2009 64bit |- | <!--Name-->X200 ODM Wistron [http://itgen.blogspot.co.uk/2008/12/installing-arch-linux-on-lenovo.html X200s] and x200t tablet model without [http://fsfe.soup.io/post/590865884/the-unconventionals-blog-English-Flashing-Libreboot-on Risky flash of the Libreboot BIOS] || <!--Chipset-->GM45 GS45 with slow Celeron, SU or faster SL Core 2 Duos CPUs || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS}} || <!--Gfx-->{{maybe||Intel GMA 4500 MHD 2D but slow software 3D tunnel 10 gearbox 8 tests}} || <!--Audio-->{{yes|Intel HD Audio with Conexant CX20561 codec playback}} || <!--USB-->{{{Yes|USB 2.0 USB SD card reads and writes}} || <!--Ethernet-->{{no|Intel 82567LM Gigabit}} || <!--Wireless-->{{no|Intel Pro 5100 5150 5300 5350 AGN due to whitelist prevention bios locked}} || <!--Test Distro-->Icaros 2.0.1 || <!--Comments-->2009 64bit 12.1" CCFL (webcam version) or LED backlit (no webcam). no support for 54mm express cards or Authentec 2810 fingerprint reader - thinkpoint only no trackpad - 3pin cmos - |- | <!--Name-->Lenovo T410 T410s T410si || <!--Chipset-->qm57 with i5 m || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS}} || <!--Gfx-->{{maybe|use vesa Intel 5700MHD (Ironlake) core processor igp with optional Nvidia Quadro NVS 3100M}} || <!--Audio-->{{yes|HD Audio Conexant CX20585 codec playback}} || <!--USB-->{{Yes|2.0}} || <!--Ethernet-->{{no|Intel 82577lm gigabit}} || <!--Wireless-->{{unk|Intel n 6200 or Atheros AR9280 AR5BHB92 half size minipcie bios locked}} || <!--Test Distro-->Icaros 2.2 xmas || <!--Comments-->2009 64bit battery life much lower with Nvidia graphics version - no support firewire ricoh r5c832 - ricoh sd card - series 5 3400 |- | <!--Name-->X201 X201s x201t || <!--Chipset-->QM57 Core i3 370m, i5 M520 2.4GHz or i7 620LM 2.0GHz || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS}} || <!--Gfx-->{{Maybe|vesa 2d on Intel GMA HD}} || <!--Audio-->{{yes|Intel HD with [https://ae.amigalife.org/index.php?topic=94.0 Conexant 20585] codec}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no|Intel}} || <!--Wireless-->{{No|bios locked}} || <!--Test Distro--> || <!--Comments-->2010 X201 arrandale power consumption limits battery life to 3-4 hours for 48Whr though to 6 on 72Whr - 12.5" WXGA - 3pin cmos - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Ideapad B470, B570, V370, V470, V570 || <!--Chipset-->Intel® Core™ i5 i5-2430M, i5-2450M, || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->Vesa 2d for Intel || <!--Audio-->HDaudio 0x8086, 0x1c20 with codec || <!--USB-->USB3 || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no|whitelisted}} || <!--Test Distro--> || <!--Comments-->2011 64bit - 14in or 15.6in 768p - |- | <!--Name-->T420 type 4180 4236, t420s , T520 4239 L520 || <!--Chipset-->i5 2540, 2520 or i7 2860QM 2620 has sse4.1 avx || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS but not AHCI}} || <!--Gfx-->{{Maybe|Vesa 136 x 768 - Intel HD 3000 with optional NVS 4200M Nvidia optimus or Radeon HD 565v }} || <!--Audio-->{{Yes|HD Audio playback ear phones only with Conexant CX20672 codec - AHI 6.27}} || <!--USB-->{{Maybe| }} || <!--Ethernet-->{{No|Intel PRO 1000 82579LM}} || <!--Wireless-->{{No|Realtek 1x1, Intel Ultimate-N 6205 6250 2x2 6300 3x3 all bios locked}} || <!--Test Distro-->Icaros 2.2.2 add noacpi to grub boot options || <!--Comments-->2011 64bit - screen 1600x900 or 1366x768 - 2 ddr3l sodimm slots max 16gb - |- | <!--Name-->Thinkpad W520 || <!--Chipset--> has sse4.1 avx || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS}} || <!--Gfx-->{{Maybe|VESA Intel HD 3000 with nvidia quadro 1000m 2000m optimus issues with Nvidia Intel hybrids}} || <!--Audio-->{{Maybe|Intel Hd with CX 20585 codec}} || <!--USB--> || <!--Ethernet-->{{No|Intel 82579 Lm}} || <!--Wireless-->{{No|Intel 6000s}} || <!--Test Distro--> || <!--Comments-->2011 64bit - 15.6" TFT display with 1366x768 (HD), 1600x900 (HD+) or 1920x1080 (FHD) resolution with LED backlight |- | <!--Name-->X220 x220t || <!--Chipset-->QM67 express, dual i5 2520M or i7 dual 2620M sse4.1 avx support || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|IDE in BIOS but not AHCI}} || <!--Gfx-->{{Maybe|VESA 2D 1024 x 768 for Intel HD Graphics 3000}} || <!--Audio-->{{Yes|Intel HD playback with Conexant 20672 codec ear phones and speaker - AHI 6.27 6.34}} || <!--USB-->{{Yes|USB 2.0}} || <!--Ethernet-->{{No|Intel 82579LM}} || <!--Wireless-->{{No|Intel Centrino Advanced-N 6205 Wi-Fi bios locked}} || <!--Test Distro-->Icaros 2.3, Aros One USB 1.6 || <!--Comments-->2011 64bit possible - uses slimmer 7 mm storage sata devices - NEC USB 3.0 on i7's - unwanted trackpad gestures when palms rests on it - 2 ddr3 sodimm slots - external battery - |- | <!--Name-->Thinkpad X120e, x121e Quanta FL8A DAFL8AMB8D0 Rev D || <!--Chipset-->Hudson M1 with slow AMD E350 has no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->{{Maybe|VESA ATI 0x9802}} || <!--Audio-->{{Maybe|ATI SBx00 Azalia HD Audio}} || <!--USB-->USB 2.0 || <!--Ethernet-->RTL8169 RTL8111 || <!--Wireless-->{{no|Broadcom 0x0576 bios locked}} || <!--Test Distro--> || <!--Comments-->2011 64bit 11.6 inch screen - 1 inch think - chiclet keyboard |- | <!--Name-->Ideapad S205 G575 G585, Edge 11 E325 || <!--Chipset-->Slow E-350 later E-450 with A75 or AMD Athlon II Neo has no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->{{Maybe|VESA HD6310}} || <!--Audio-->{{Yes| }} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|Atheros}} || <!--Wireless-->{{No|Broadcom}} || <!--Test Distro--> || <!--Comments-->2011 64bit does not support AVX or SSE 4.1 - removeable and plug in battery - 2pin CR2032 CMOS battery - |- | <!--Name-->Ideapad S206 || <!--Chipset-->AMD E300 1.3GHZ Dual has no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->{{Maybe|VESA }} || <!--Audio-->{{Maybe|Intel HD Audio with CX20672 codec}} || <!--USB-->{{Maybe|3.0}} || <!--Ethernet-->Broadcom 10/100 || <!--Wireless-->{{unk|Atheros AR9285}} || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - 11.6" and integrated battery - Conexant® |- | <!--Name-->Lenovo x130e or x131e edu || <!--Chipset-->Slow AMD E-300 or E-450 has no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->{{Maybe|VESA Radeon HD 6310 or 6320 }} || <!--Audio-->{{Maybe|HD Audio Realtek ALC269VC / ALC3202 codec}} || <!--USB-->{{Maybe|USB 30 and USB 20}} || <!--Ethernet-->{{maybe|Realtek RTL8111 RTL8168B}} || <!--Wireless-->{{No|Realtek RTL8188CE or Broadcom BCM43228 bios locked}} || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - rubber edged bumper for K12 education market - 2pin CR2032 CMOS battery - |- | <!--Name-->Thinkpad Edge E135 E335 || <!--Chipset-->amd dual E-300, E2-1800 or E2-2000 slow atom like A68M FCH has no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|SATA 3.0Gb/s 2.5" wide 7mm high}} || <!--Gfx-->{{Maybe|VESA radeon 6310 or 7340 vga or hdmi}} || <!--Audio-->{{Maybe|HDAudio with Realtek ALC3202 codec}} || <!--USB-->{{maybe|2 usb3, 1 powered usb2}} || <!--Ethernet-->{{maybe|rtl8169 8111f}} || <!--Wireless-->{{no|Realtek WLAN whitelist bios locked}} || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - 11.6 inch to 13.3in 1366x768 - Acrylonitrile-Butadiene-Styrene (ABS) plastic case - external battery - 20v 65w lenovo barrel ac - 2 ddr3 sodimm 8Gb max - |- | <!--Name-->ThinkPad Edge E525 E535 LENOVO IDEAPAD Z575 || <!--Chipset-->AMD A6-3420M A8-3500M later A8-4500M has no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->{{Maybe|VESA AMD 6620G later 7640G}} || <!--Audio-->{{No|HDAudio with Conexant codec}} || <!--USB-->{{Maybe|USB2 but not usb3}} || <!--Ethernet-->{{maybe|rtl8169 Realtek 8111}} || <!--Wireless-->{{No|Broadcom bios locked}} || <!--Test Distro--> || <!--Comments-->2013 64bit does not support AVX or SSE 4.1 - 15.6in 1368 x 768 matt - 65W 20v lenovo round psu - thick desktop replacement - ThinkPad Edge E520 E520S E525 E530 E545 E535 E530C Laptop Keyboard swap - |- | <!--Name-->T430 t430i T530 || <!--Chipset-->ivy bridge i5 3320 3230m on Intel QM77 has sse4.1 and avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->{{Maybe|VESA 1366 x 768 for Intel HD 4000 with optional Nvidia 5400M}} || <!--Audio-->{{Maybe|Intel HD with Realtek ALC3202 aka ALC269VC codec playback ear head phones - HDA 6.27}} || <!--USB-->{{Yes|USB 2 ports and usb2.0 devices thru usb 3.0 ports}} || <!--Ethernet-->{{No|Intel e1000}} || <!--Wireless-->{{unk|Intel or Atheros AR9285 bios locked}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2013 64bit fan noise and chiclet keyboard, synaptics trackpad - HD+ 768p - |- | <!--Name-->Thinkpad X230 x230t || <!--Chipset-->Intel QM67 express i5 has sse4.1 and avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->{{Maybe|VESA }} || <!--Audio-->{{Maybe|Intel HD with ALC269 aka ALC3202}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no|Intel }} || <!--Wireless-->{{No|I}} || <!--Test Distro--> || <!--Comments-->2013 64bit - 12.2 in 1366 x 768 - 2 ddr3 sodimm slots - external battery - |- | <!--Name-->Thinkpad T440 t440s t440p T540 L440 L540 || <!--Chipset-->intel haswell 8 series Core i3 to i7 has sse4.1 and avx || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata}} || <!--Gfx-->{{Maybe|VESA - Intel 4600 or Nvidia}} || <!--Audio-->Intel HD with Realtek ALC3232 alc269 codec or ALC292 || <!--USB-->{{maybe| }} || <!--Ethernet-->{{No|Intel}} || <!--Wireless-->{{No|Intel AC 7260 bios locked}} || <!--Test Distro--> || <!--Comments-->2014 64bit - 14 and 15" models with glitchy trackpad and no physical buttons - keyboard repair not easy as well as 4 variants of key caps - 2pin CR2032 CMOS battery - |- | <!--Name-->Thinkpad X240 x240t ultrabook TN (20AL0081GE), HD IPS display without touch (20AL007NGE) and touch (20AL0076GE) but all 65% sRGB || <!--Chipset-->haswell i7-4600U i5 4200U 4210U 4300U i3-4100U - two batteries, one internal 3cell 45N1110 (45N1111) or 45N1112 (FRU 45N1113) and external 3 / 6cell 45N1126 (FRU 45N1127) || <!--IDE-->{{N/A}} || <!--SATA-->2.5in 7mm sata (torq t7), m.2 2242 in WWAN slot (m and b key NGFF Sata) || <!--Gfx-->{{Maybe|use VESA for Intel 4400 for vga or mini-dp}} || <!--Audio-->{{No|HDAudio 0x8086, 0x0a0c 0x8086, 0x9c20 with Realtek ALC3232 aka ALC292 0x10ec, 0x0292}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{no|Intel® 82577LM Gigabit (Hanksville) }} || <!--Wireless-->{{no|Realtek or Intel 7260n I218-V or I218-LM bios locked}} || <!--Test Distro-->AROS One USB || <!--Comments-->2014 64bit - 12.2in 1366 x 768 or 1080p - 1 ddr3l sodimm slot - no keyboard spill drainage and at least 2 variants of key caps - lenovo rectangle pwr ac - TPM 1.2 - Bluetooth 4.0 no support - bottom panel with 8 retained screws - 2pin CR2032 CMOS battery - |- | <!--Name-->ThinkPad Edge E545 * key cap swap with E440 E531 E540 L440 L450 T431S T440S T440P T540 * Keyboard swap L540 T540p W540 Edge E531 E540 W541 T550 W550S L560 P50S T560 || <!--Chipset-->AMD Socket FS1r2 A6-5350M (2c2t) or A8-4500M, A8-5550M, A10-5750M (4c4t) with A76M FCH has sse4.1 and avx || <!--IDE-->{{N/A}} || <!--SATA-->2.5in 9.5mm - enter UEFI bios with Enter or ESC, config section, sata into compatibility and security, secure boot disabled - mini sata DVD burner PLSD DS8A9SH || <!--Gfx-->{{Maybe|VESA 2D for AMD 7640G, 8450G, 8550G, 8650G ?? Islands}} || <!--Audio-->{{no|VOID for HDAudio 6.34 0x1022, 0x780d with Conexant CX20590 Analog 0x14f1, 0x506e CX20671 codec 0x14f1, 0x5069 or audio over Trinity HDMI}} || <!--USB-->{{maybe|boots pen drives from yellow usb port but not from blue USB3 ones, issues with AMD usb3 hardware quirks}} || <!--Ethernet-->{{yes|rtl8169 1GbE 8111F}} || <!--Wireless-->{{No|Broadcom BCM43142 bios locked}} || <!--Test Distro-->AROS One 2.3 USB works with noacpi added to end of grub2 boot line but not booting on AROS One 64bit 1.1 via usb2 stick or iso burnt to dvd || <!--Comments-->2015 64bit - 15.6in 1366 x 768 matt - 20v 65w 90w round lenovo plug psu - 2 DDR3 SODIMM slots 16GB Max - external 6 Cell Li-Ion Battery 48Wh l11s6y01 45n1043 - 2pin CR2032 CMOS battery in wifi area jp1202 - amd v(tm) virtualization not working - |- |<!--Name-->Y50-70 || <!--Chipset-->Intel 4 || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->GTX 860M or GTX 960M || <!--Audio-->HDAudio || <!--USB-->USB3 || <!--Ethernet-->{{maybe|rtl8169 rtl8111}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2015 64bit - |- |<!--Name-->AMD platform codes *Beema: ABM, *Carizzo-L: ACL, *Carizzo: ACZ, *Godavari: AGR, *Kaveri: AKV, *Stoney Ridge: ASR, *Stoney Ridge: AST (NB), || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> *Summit Ridge: ASU, *Bristol Ridge-L: ABL, *Bristol Ridge: ABR, *Raven Ridge: ARR, *Picasso: API |- |<!--Name-->Lenovo ThinkPad P50 || <!--Chipset-->Intel i7-6820HQ || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->Quadro M2000M || <!--Audio-->HDAudio || <!--USB-->USB3 || <!--Ethernet-->{{no|Intel}} || <!--Wireless-->{{no|Intel }} || <!--Test Distro--> || <!--Comments-->2015 64bit - |- | <!--Name-->[https://www.laptop-schematics.com/db/78/V%20series%20laptops%20(Lenovo)/ V110-14AST (14in) V110-15AST, V110-14ISK V110-15ISK 80TL (15")], || <!--Chipset-->AMD E1-9000, A6-9210 to A9-9410 all dual core and intel 6006u, 6100u, 6200u || <!--IDE-->{{N/A}} || <!--SATA-->1 2.5in sata most 7mm some 9.5mm || <!--Gfx-->{{Maybe|VESA 2D for AMD R2, R3, R5 or R6 or Intel Gfx}} || <!--Audio-->{{No|HDAudio with codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2016 64bit - 14in to 15.6in mostly 768p 220 nits - 20v 45W or 65W lenovo slim rectangle end ac - keyboard swap hard - integrated 24WHr battery - 4gb ddr4 ram soldered and 1 2133Mhz ddr4 slot max 12Gb - abs plastic - |- |<!--Name--> *ThinkPad A275 12in (1 ddr4 1866MHz sodimm) *Thinkpad A475 14in (2 ddr4 1866MHz sodimm) - both internal (main) and external (secondary) battery || <!--Chipset-->A10-8730B A10-9700B 2.500Ghz later A12-8830B A12-9800B all 4c4t (AVX2 on 9000s) || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe|7mm 2.5in sata with mbr and not gpt, setup in another machine - secure boot disabled, bios startup boot set to legacy then uefi - WWAN slot cannot use M.2 2242 sata with M and B key}} || <!--Gfx-->{{Maybe|VESA 2D for AMD R5 or R7}} || <!--Audio-->{{No|HDAudio 6.34 ahi 0x1022, 0x157a with ALC3268 aka ALC298 codec 0x10ec, 0x0298 - VOID even with QUERY / QUERYD added}} || <!--USB-->{{no|USB3 error on boot suspect AMD usb3 quirk}} || <!--Ethernet-->{{Yes|rtl8169 RTL8111EPV}} || <!--Wireless-->{{No|Realtek RTL8822BE WLAN whitelist locked cannot swap}} || <!--Test Distro-->{{maybe|AROSOne USB 32bit 1.8 with noacpi noapic noioapic added to grub2 boot line but Aros One 64bit 1.2 USB has krnPanic }} || <!--Comments-->2016 64bit 12 or 14in 768p - 45W or 65w lenovo rectangle ac adapter - F1 enter bios and F12 boot order - 6 retained screws and snap on base - 2100 error message no solution except using only efi/gpt bios option - |- |<!--Name-->320S-15AST, 320S-15ABR, ideapad Slim 1-11AST-05 81VR || <!--Chipset-->AMD A6-9220e, AMD A6-9225, A9-9425, A10-9600P 7th Gen || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata 2.5in}} || <!--Gfx-->{{maybe| Vesa 2D for AMD}} || <!--Audio-->{{No| }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{No|Qualcomm Atheros QCA9377 or Realtek RTL8821CE}} || <!--Test Distro--> || <!--Comments-->2018 64bit AVX2 - 14in or 15.6" 768p - 1 ddr4 sodimm slot - keyboard swap problematic - |- |<!--Name-->Lenovo Ideapad S145-14AST S145-15AST 81N3 || <!--Chipset-->AMD A6-9225, A9-9425, A10-9600P 7th Gen, AMD A12-9720P Mobo 5B20P11110 NMB341 Bristol Ridge || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata 2.5in}} || <!--Gfx-->{{Maybe|VESA Radeon 8670A 8670M 8690M GCN 3}} || <!--Audio-->{{No| }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{No|Qualcomm Atheros QCA9377 or Realtek RTL8821CE}} || <!--Test Distro--> || <!--Comments-->2018 64bit AVX2 - 14in or 15.6" 768p or 1080p - 1 ddr4 sodimm slot - |- |<!--Name-->Lenovo Ideapad V145-14AST V145-15AST, 81mt, Ideapad 310, Ideapad 320-15ABR, Ideapad 330-14AST 330-15AST 330-17AST || <!--Chipset-->AMD A6-9225, A9-9425 (2c2t), A10-9600P 7th Gen, AMD A12-9720P Mobo 5B20P11110 NMB341 Bristol Ridge || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|sata 2.5in with optional dvd}} || <!--Gfx-->{{Maybe|VESA Radeon 8670A 8670M 8690M GCN 3}} || <!--Audio-->{{unk|HDaudio with ALC3240-va3-cg aka ALC236? codec 0x10de, 0x0236}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{no|rtl8169 8106E 10/100 only}} || <!--Wireless-->{{No|Qualcomm Atheros QCA9377 or Realtek RTL8821CE}} || <!--Test Distro--> || <!--Comments-->2017 64bit AVX2 - 14in or 15.6" 768p or 1080p - 1 ddr4 sodimm slot - 45w 65w slim ac adapter - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- |<!--Name-->Lenovo V330-14ARR 81B1, V330-15ARR 81, 330-14ARR 81 330-15ARR 81D2 - battery internal about 30whr || <!--Chipset-->AMD Ryzen R3 2200U, 2300U or R5 2500U Raven Ridge || <!--IDE-->{{N/A}} || <!--SATA-->M.2 nvme/sata, optional 2.5in sata but no dvd || <!--Gfx-->{{Maybe|VESA Vega 3, 6 or 8 up to 1Gb of soldered ram memory taken}} || <!--Audio-->{{No|HDAudio 0x1002, 0x15de with Realtek® ALC5682I-VD codec 0x10de, 0x or coxenant CX11802 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|Realtek 1GbE}} || <!--Wireless-->{{no|Realtek}} || <!--Test Distro--> || <!--Comments-->2018 64bit - 14" 768p 20mm thick 1.8kg - 20v 2.25a 45w ac round barrel - chiclet keyboard - 4Gb soldered and 1 ddr4 sodimm - TPM 2.0 in bios - 4GB soldered - |- |<!--Name-->Ideapad 330s-14ARR, 330s-15ARR, ideapad 330S-14IKB, 330S-15IKB, - battery internal about 30whr || <!--Chipset-->AMD Ryzen R3 2200U, 2300U or R5 2500U Raven Ridge || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|nvme}} || <!--Gfx-->{{Maybe|VESA 2D for AMD or Intel 610, 620 up to 1Gb of soldered ram memory taken}} || <!--Audio-->{{No|HD Audio with codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|Realtek}} || <!--Test Distro--> || <!--Comments-->2018 64bit - 14" 20mm thick 1.8kg - 20v 2.25a 45w ac round barrel - chiclet keyboard - 4Gb soldered and 1 ddr4 sodimm - TPM 2.0 in bios - 4GB soldered - |- |<!--Name-->Thinkpad Edge E485 E585 - internal battery only || <!--Chipset-->AMD Ryzen R3 2300U R5 2500U R7 2700U || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|m.2 nvme optional 1 2.5in sata}} || <!--Gfx-->{{Maybe|VESA for Vega 3, 8 or 10}} || <!--Audio-->{{No|HDAudio with CX11852 codec }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 rtl8111GUS}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2018 64bit - 14in or 15.6in 768p or 1080p - USB-C 20V 2.25A 3.25A avoid knocking charging port as damages easily - 2 ddr4 sodimm slot max 2400Mhz 32GB - TPM 2.0 software - |- |<!--Name-->Thinkpad A285 - internal and external battery || <!--Chipset-->AMD Ryzen PRO 3 2200U 5 2500U || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|m.2 nvme/sata}} || <!--Gfx-->{{Maybe|VESA Vega up to 2Gb of soldered ram memory taken}} || <!--Audio-->{{unk|HD Audio with ALC ALC3287 codec aka ALC257 }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{No|Mini-Ethernet/Docking}} || <!--Wireless-->{{no|Realtek or Qualcomm - WLAN whitelist no more??}} || <!--Test Distro--> || <!--Comments-->2018 64bit - 12.5in 1080p - avoid usb-c port being lifted/moved whilst in use as damages laptop easily - soldered ram 8gb or 16gb - WWAN whitelist - keyboard swap problematic - |- |<!--Name-->Thinkpad A485 bios setting [https://github.com/PSPReverse/PSPTool AMD PSP Platform Security Processor Key] - internal and external battery || <!--Chipset-->AMD Ryzen PRO 5 2500U || <!--IDE-->{{N/A}} || <!--SATA-->sata port and m.2 nvme port || <!--Gfx-->{{Maybe|VESA Vega }} || <!--Audio-->{{unk|HD Audio with ALC ALC3287 codec aka ALC 257 }} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 RTL8111GUL}} || <!--Wireless-->{{no|Realtek or Qualcomm wifi - WLAN whitelist no more??}} || <!--Test Distro--> || <!--Comments-->2018 64bit - 14in 768p, 1080p or 1440p - avoid usb-c port being lifted/moved whilst in use as damages laptop easily - 2 ddr4 sodimm slots max 32gb - WWAN whitelist - keyboard swap problematic - |- |<!--Name-->[https://www.diy-laptoprepair.com/forum/fix-Lenovo-V155-15-repair-guide-schematics.php Lenovo v155-15api 81V5] V155 (15" AMD) budget all plastic build - MS new protocol, HID over I2C so [https://askubuntu.com/questions/1033033/elantech-touchpad-does-not-work-i2c-hid i2c] [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/input/mouse/elantech.c?h=v6.17 i2c] [https://www.kernel.org/doc/html/v4.16/input/devices/elantech.html PS2 hybrid trackpad] [https://cgit.freebsd.org/src/tree/sys/dev/atkbdc/psm.c?h=releng/14.3 elantech] [https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sys/dev/pckbc/?only_with_tag=OPENBSD_7_8_BASE i2c-hid] 04F3:3140 touchpad not working - internal sunwoda battery L18D3PF1, L18L3PF1, L18C3PF2 35Whr most dead after 5 years || <!--Chipset-->'''tested''' Ryzen 5 3500U and Ryzen 3 3200U - '''untested''' AMD Athlon 300U with bios winbond 25q64fwsiq soic 1.8v bios near nvme || <!--IDE-->{{N/A}} || <!--SATA-->1 M.2 nvme and usually 2.5in 7mm sata - install on mbr not gpt 2.5in in another compatible machine - mini sata dvd/cd da-8aesh11b will boot cd or dvd aros || <!--Gfx-->{{Maybe|VESA 2D to 1080p work for Vega 3 or 8 with up to 2Gb of soldered ram memory taken but hdmi 1.4b no output}} || <!--Audio-->{{Yes|HDAudio add 0x1022, 0x15E3 with ALC3287 aka Realtek ALC257 codec 0x10ec, 0x0257 with 32bit on external speaker and most of the time works on 64bit}} || <!--USB-->{{no|2 USB3.0 usb-a, on left hand side, detected but not working}} || <!--Ethernet-->{{yes|rtl8169 RTL8111GUS works well with 32bit and 64bit}} || <!--Wireless-->{{no|Realtek or Intel wifi}} || <!--Test Distro-->2025 AROS One 2.8 DVD 32bit and AROS One x64 1.1 and 1.2 iso DVD burnt but not USB boot || <!--Comments-->2019 64bit - 15.6in 768p or 1080p 200nits tn panel - 4Gb ddr4 2400MHz soldered with 1 dimm slot max 20Gb - round ac 20V 65W psu 4.0mm x 1.7mm - Fn+F2 to enter bios and F12 boot order - no sd card slot - 2pin cr2032 cmos coin battery - |- |<!--Name-->V15-ADA 82C700E4UK- elan touchpad not working - internal battery 34whr L16M2PB2 l16l2pb3 || <!--Chipset-->AMD r5 3500U || <!--IDE-->{{N/A}} || <!--SATA-->1x 2.5" HDD + 1x M.2 SSD NVMe near fan, no cd dvd || <!--Gfx-->{{Maybe|VESA 2D for Vega 3, 8 with up to 1080p with 2Gb of soldered ram memory taken}} || <!--Audio-->{{Yes|HD Audio 6.36 0x1022, 0x15E3 with R155189 ALC236 codec 0x10ec, 0x0236 on 32bit and on 64bit}} || <!--USB-->{{maybe|3 USB3, on left hand side,}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|Realtek or Qualcomm wifi}} || <!--Test Distro-->2025 3500U with Aros One 32bit 2.8 installed to 2.5in drive on another machine and same for 64bit || <!--Comments-->2019 64bit - 14 or 15.6in 768p on low spec machines to 1080p - 4GB soldered with 1 ddr4 sodimm slot - 2pin cr2032 cmos coin battery - sd card slot - noisy fan - |- |<!--Name-->V15-ADA 82C7 - elan touchpad not working - internal battery 34whr L16M2PB2 l16l2pb3 || <!--Chipset-->AMD Athlon Silver 3020e, Ryzen 3 3050U, 3150U, 3250U || <!--IDE-->{{N/A}} || <!--SATA-->1x 2.5" HDD + 1x M.2 SSD NVme near fan, no cd dvd || <!--Gfx-->{{Maybe|VESA 2D for Vega 3, 8 with up to 1080p with 2Gb of soldered ram memory taken}} || <!--Audio-->{{No|HD Audio 6.36 0x1022, 0x15E3 with RTS5119 R155119 ALC230 codec}} || <!--USB-->{{maybe|3 USB3.0, on left hand side,}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|Realtek or Qualcomm wifi}} || <!--Test Distro-->2025 Aros One 32bit 2.8 and 64bit || <!--Comments-->2019 64bit - 14 or 15.6in 768p on low spec machines to 1080p - 4GB soldered with 1 ddr4 sodimm slot - 2pin cr2032 cmos coin battery - sd card slot - for this mbd bios ram disable doesn't work - noisy fan - |- |<!--Name-->Lenovo V14-ADA 82C6, - elan touchpad not working - if blank black display, bios bug going from uefi->legacy so reset bios rhs push in with pin, then Down, ent, Right x3, ent, up, ent, right, ent x2 - internal battery 34whr L16M2PB2 l16l2pb3 || <!--Chipset-->'''tested''' 3250U - '''untested''' AMD Athlon Silver 3020e, Ryzen 3 3050U, 3150U - for this mbd GV451&GV551 NM-D151 bios ram disable doesn't work || <!--IDE-->{{N/A}} || <!--SATA-->1x 2.5" HDD if cbl + 1x M.2 SSD NVMe near fan, no cd dvd || <!--Gfx-->{{Maybe|VESA 2D for Vega 3 up to 1080p with 2Gb of soldered ram memory taken}} || <!--Audio-->{{no|HD Audio 6.36 0x1022, 0x15E3 with Realtek ALC3223 RTS5119 R185199 aka ALC230 codec 0x10ec, 0x0230 on 32bit and on 64bit}} || <!--USB-->{{maybe|3 USB3, on left hand side,}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|Realtek or Qualcomm wifi}} || <!--Test Distro-->2025 AMD 3250U with Aros One 32bit 2.8 installed to 2.5in drive on another machine and same for 64bit || <!--Comments-->2019 64bit - 14 or 15.6in 768p on low spec machines to 1080p - 4GB soldered with 1 ddr4 sodimm slot - 2pin cr2032 cmos coin battery - sd card slot - F2 bios F12 select - |- |<!--Name-->IdeaPad 1 14ADA5 (low spec cpus) ideaPad 3 14ADA05, IdeaPad 3 15ADA05 81W100QVUK, IdeaPad 3 17ADA05 - elan touchpad not working - internal battery 34whr L16M2PB2 l16l2pb3 || <!--Chipset-->AMD Athlon Silver 3020e, Ryzen 3 3050U, 3150U, 3250U, Ryzen 5 3500U on mobo NM-C821 REV 0.2 1.0 || <!--IDE-->{{N/A}} || <!--SATA-->1x 2.5" HDD if cbl + 1x M.2 SSD NVMe near fan, no cd dvd || <!--Gfx-->{{Maybe|VESA 2D for Vega 3, 8 up to 1080p with 2Gb of soldered ram memory taken}} || <!--Audio-->{{no|HD Audio 6.36 0x1022, 0x15E3 with ALC230 codec 0x10ec, 0x0230 on 32bit and on 64bit}} || <!--USB-->{{maybe|3 USB3, on left hand side,}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|Realtek or Qualcomm wifi}} || <!--Test Distro-->2025 Aros One 32bit 2.8 installed to 2.5in drive on another machine and same for 64bit || <!--Comments-->2019 64bit - 14 or 15.6in 768p on low spec machines to 1080p - 4GB soldered with 1 ddr4 sodimm slot - 2pin cr2032 cmos coin battery - sd card slot - F2 bios F12 boot select - |- |<!--Name-->Lenovo IdeaPad L340-15API 81LW001CUS L340-17API - elan trackpad not functioning - internal battery L18M3PF2 || <!--Chipset-->AMD Athlon 300U, Ryzen 3 3200U r5 3500U || <!--IDE-->{{N/A}} || <!--SATA-->1 M.2 nvme and usually 2.5in sata if ribbon cable present - mini sata dvd/cd da-8aesh11b || <!--Gfx-->{{Maybe|VESA 2D for Vega 3 or 8 with up to 2Gb of soldered ram memory taken - hdmi 1.4b}} || <!--Audio-->{{unk|HDAudio add 0x1022, 0x15E3 with Realtek ALC236 0x10ec, 0x0236}} || <!--USB-->{{maybe|USB3 not detected}} || <!--Ethernet-->{{maybe|rtl8169 RTL8111GUS}} || <!--Wireless-->{{no|Realtek or Intel wifi}} || <!--Test Distro-->AROS One 2.8 USB - install on mbr not gpt 2.5in in another compatible machine || <!--Comments-->2019 64bit - 15.6in 768p or 1080p 200nits - 4Gb ddr4 2400MHz soldered with 1 dimm slot max 20Gb - round ac 20V 65W psu 4.0mm x 1.7mm - Return or F1 to enter bios and F12 boot order - no sd card slot - |- |<!--Name-->[https://www.laptop-schematics.com/db/78/T%20series%20laptops%20(ThinkPad)/ ThinkPad T295 T495] || <!--Chipset-->Ryzen 3 3300U, R5 Pro 3500U or R7 3700U || <!--IDE-->{{N/A}} || <!--SATA-->1 NVMe up to 2280 || <!--Gfx-->{{Maybe|VESA Vega 6, 8 or 10 up to 2Gb of soldered ram memory taken}} || <!--Audio-->{{unk|HD Audio with Realtek® ALC3287 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 Realtek RTL8111EPV}} || <!--Wireless-->{{No|Realtek RTL8822BE or Intel AC 9260}} || <!--Test Distro--> || <!--Comments-->2019 64bit - 14in 768p but mostly FHD 1080p 250 nits - internal battery - ram 8gb or 16gb 2400Mhz soldered with 1 ddr4 slot on T495 only - TPM 2.0 - usb-c charging avoid knock whilst in use - keyboard swap problematic - |- |<!--Name-->ThinkPad T495s (14in) X395 (13in) || <!--Chipset-->Ryzen 3 3300U, R5 Pro 3500U or R7 3700U || <!--IDE-->{{N/A}} || <!--SATA-->1 NVMe up to 2280 || <!--Gfx-->{{Maybe|VESA Vega 6, 8 or 10 up to 2Gb of soldered ram memory taken}} || <!--Audio-->{{unk|HD Audio with Realtek® ALC3287 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{unk| needs Lenovo ThinkPad Ethernet Adapter Gen 2 SC10P42352 or SC10P42354}} || <!--Wireless-->{{No|Realtek RTL8822BE or Intel AC 9260 wifi}} || <!--Test Distro--> || <!--Comments-->2019 64bit - 13in or 14in 768p but mostly FHD 1080p 250 nits - internal battery - ram 8gb or 16gb 2400Mhz soldered - TPM 2.0 - usb-c charging avoid knock whilst in use - keyboard swap problematic - |- |<!--Name-->ThinkPad E14 Gen2, E15 Gen 2 (AMD) 20T8, - lenovo has a mobile phone PC Diagnostic App for error/beep codes || <!--Chipset-->AMD Ryzen 3 4300U, 5 4500U, 7 4700U || <!--IDE-->{{N/A}} || <!--SATA-->2 m.2 nvme, 1 2242 and 1 2280 || <!--Gfx-->{{Maybe|VESA 2D for AMD Radeon up to 2Gb of soldered ram memory taken}} || <!--Audio-->{{unk|HD Audio with ALC ALC3287 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 RTL8111GUS}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2020 15.6in 1080p 220 nits - TPM 2.0 - usb-c charging of internal 45Whr battery - 4gb ddr4 3200Mhz soldered and 1 ddr4 sodimm slot max 20Gb - keyboard swap problematic - plastic bendy case - |- |<!--Name-->Lenovo ThinkPad T14 Gen 1, ThinkPad P14s Gen 1 (AMD) || <!--Chipset-->AMD Ryzen 3 4300u, 5 4500U, Ryzen 5 Pro 4650U, Ryzen 7 Pro 4750U || <!--IDE-->{{N/A}} || <!--SATA-->1 NVMe || <!--Gfx-->{{Maybe|VESA 2D for AMD Vega }} || <!--Audio-->{{unk|HDAudio with Realtek® ALC3287 0x10EC, 0x0257}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 RTL8111EPV (DASH models) or RTL8111HN}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2020 64bit - USB-C charging avoid moving whilst in use - 14" or 15" 1080p - keyboard swap problematic - 8gb or 16gb 3200MHz soldered with 1 ddr4 sodimm slot - sd card slot - |- |<!--Name-->Thinkpad L14 Gen 1, L15 Gen 1, || <!--Chipset-->AMD Ryzen 3 4300u, 5 4500U, Ryzen 5 Pro 4650U, Ryzen 7 Pro 4750U || <!--IDE-->{{N/A}} || <!--SATA-->1 NVMe || <!--Gfx-->{{Maybe|VESA 2D for AMD Vega }} || <!--Audio-->{{unk|HDAudio with Realtek® ALC3287 0x10EC, 0x0257}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{no|rtl8169 needs dongle RTL8111EPV (DASH models) or RTL8111HN}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2020 64bit - USB-C charger avoid moving whilst in use - 14" or 15" 1080p - keyboard swap problematic - 8gb or 16gb 3200MHz soldered with 1 ddr4 sodimm slot - sd card slot - |- |<!--Name-->Lenovo ThinkPad X13 Gen1 AMD, || <!--Chipset-->AMD RYZEN 3 4450U, 5 4650U or 7 4750U || <!--IDE-->{{N/A}} || <!--SATA-->One drive, up to 512GB M.2 2242 SSD or 1TB M.2 2280 SSD NVMe || <!--Gfx-->{{partial|VESA Radeon up to 2Gb of soldered ram memory taken}} || <!--Audio-->{{unk|HDAudio with Realtek® ALC3287 codec}} || <!--USB-->{{maybe| but USB-C ports can fail}} || <!--Ethernet-->{{no|Realtek RTL8111EPV, mini RJ-45 to RJ-45 via optional ThinkPad Ethernet Extension Adapter Gen 2}} || <!--Wireless-->{{no|Realtek Wi-Fi 6 RTL8852AE}} || <!--Test Distro--> || <!--Comments-->2020 13.3" HD 1366x768 to 1080p - USB-C port care needed as damages easily - Memory soldered to systemboard, no slots, dual-channel DDR4-3200 - |- |<!--Name-->Lenovo ThinkBook 14 G2, 15 G2 Are || <!--Chipset-->Ryzen 5 4500u, 7 4700U || <!--IDE-->{{N/A}} || <!--SATA-->14in has 2 m.2 nvme but 15in has 1 nvme and might have 2.5in sata metal caddy if smaller battery version || <!--Gfx-->VESA 2d for AMD Radeon up to 2Gb of soldered ram memory taken || <!--Audio-->{{unk|HDAudio with ALC???? codec 0x10EC, 0x0}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 }} || <!--Wireless-->{{No| wifi}} || <!--Test Distro--> || <!--Comments-->2020 64bit - 14in or 15in 1080p - usb-c charging but high failure rate on the charging port - 4gb or 8gb soldered with 1 ddr4 sodimm slot 3200mhz - hinge(s) issues - |- |<!--Name-->IdeaPad 5 14ARE05 (81YM), Ideapad 5 15ARE05 (), IdeaPad 3 17ARE05 (model 81W5) - elan touchpad MSFT0004:00 06CB:CD98 not working || <!--Chipset-->'''tested''' 4500u - '''untested''' AMD 3 4300U (4c4t), 4600U (6c12t), 7 4700u (8c16t) on AMD Promontory Bixby FCH || <!--IDE-->{{N/A}} || <!--SATA-->{{no|1x M.2 2242 slot and 1x M.2 2280 NVMe which will take sata m.2 will boot to grub then laptop reset after choice}} || <!--Gfx-->{{Maybe|VESA 2D for Vega 6 via hdmi output up to 2Gb of soldered ram memory taken}} || <!--Audio-->{{unk|HDAudio 6.36 0x1637 0x15e3 with Realtek ALC3287 aka ALC257 codec 0x10ec 0x0257}} || <!--USB-->{{maybe|USB 3.1 or 3.2 gen 1}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|Intel ax200 wifi 6}} || <!--Test Distro-->4500u with AROS One 64bit 1.2 usb installed to m.2 sata on another machine || <!--Comments-->2020 64bit 14inch 768p or 1080p - round lenovo ac - 4gb, 8gb, or 16gb ddr4 3200Mhz ram soldered with 1 slot - keyboard swap problematic - integrated battery - |- |<!--Name-->Ideapad Flex 5 81X2, Lenovo Yoga 6 13ALC6 || <!--Chipset-->AMD R5 4500u, R7 4800U, R3 5300 R5 5500U || <!--IDE-->{{N/A}} || <!--SATA-->M.2 NVMe ssd || <!--Gfx-->{{Maybe|VESA AMD Vega up to 2Gb of soldered ram memory taken}} || <!--Audio-->{{unk|HD Audio with ALC? codec}} || <!--USB-->{{maybe|USB3.1 gen 1}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|realtek ac wifi}} || <!--Test Distro--> || <!--Comments-->2020 64bit abs plastic case 14in convertible 1080p touch low nits - 65w usb-c psu ac - possible wacom esr note taking pen supplied - ram soldered DDR4 - keyboard swap problematic - |- |<!--Name-->ThinkPad T14 Gen 2, P14s Gen 2 || <!--Chipset-->AMD 5850U || <!--IDE-->{{N/A}} || <!--SATA-->NVme || <!--Gfx-->VESA 2D || <!--Audio-->{{unk|HDaudio with ALC3287-CG codec 0x10EC, 0x0}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{Maybe| }} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2021 - usb-c power 90% failure rate on the charging port - |- |<!--Name-->Lenovo ThinkBook 14 G3, 15 G3 ACL, || <!--Chipset-->Ryzen 5 5500U || <!--IDE-->{{N/A}} || <!--SATA-->m.2 nvme || <!--Gfx-->VESA 2d for AMD Radeon || <!--Audio-->{{unk|HDAudio with ALC codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 }} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2021 64bit - 14in or 15in 1080p - usb-c charging powered - |- |<!--Name-->ThinkPad E14 G3, E15 Gen 3 (AMD) || <!--Chipset-->AMD 5300U 5500U 5650U 5700U 5800U || <!--IDE-->{{N/A}} || <!--SATA-->up to 2 m.2 nvme || <!--Gfx-->{{Maybe|VESA }} || <!--Audio-->{{unk|HDaudio with Realtek® ALC3287 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 RTL8111GUS}} || <!--Wireless-->{{no|realtek or intel }} || <!--Test Distro--> || <!--Comments-->2021 64bit - 15.6in 1080p - - usb-c charging issues - keyboard swap problematic - 4gb or 8gb soldered with 1 ddr4 3200Mhz sodimm slot - plastic bendy case - |- |<!--Name-->V14 Gen 2 (82KA, 82KC) *ALO *ALC 82KD || <!--Chipset-->Ryzen 3 5300U, 5 5500U, 7 5700U || <!--IDE-->{{N/A}} || <!--SATA-->1 nvme 2280 and optional 2.5in sata after sourcing ribbon cable and connector, no dvd || <!--Gfx-->VESA 2D for AMD radeon || <!--Audio-->{{unk|HDAudio with Realtek® ALC3287 codec}} || <!--USB-->{{maybe|USB3 }} || <!--Ethernet-->{{maybe|rtl8169 Realtek RTL8111H-CG}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2022 64bit - 15.6" FHD 1080p - 4gb or 8gb soldered with 1 ddr4 sodimm slot - 65w round ac adaptor - |- |<!--Name-->V15 G2 Gen2 (82KB, 82KD) *ALO *ALC 82KD || <!--Chipset-->Ryzen 3 5300U, 5 5500U, 7 5700U || <!--IDE-->{{N/A}} || <!--SATA-->1 nvme 2280 and optional 2.5in sata after sourcing ribbon cable and connector, no dvd || <!--Gfx-->VESA 2D for AMD radeon || <!--Audio-->{{unk|HDAudio with Realtek® ALC3287 codec}} || <!--USB-->{{maybe|USB3 }} || <!--Ethernet-->{{maybe|rtl8169 Realtek RTL8111H-CG}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2022 64bit - 15.6" FHD 1080p - 4gb or 8gb soldered with 1 ddr4 sodimm slot - 65w round ac adaptor - |- |<!--Name-->ThinkPad L15 Gen 2 (15″, AMD) || <!--Chipset-->AMD 5000 series AMD Ryzen 3 5400U (4c8t), 5 5600U, 5 5650U (6c12t), 7 PRO 5850U (8c16t) || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{unk|HDAudio with Realtek® ALC3287}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{no|rtl8169 needs dongle RTL8111EPV (DASH models) or RTL8111HN}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2022 64bit - 15.6in 768p or 1080p - usb-c charging - 4gb soldered with 1 ddr4 3200Mhz sodimm slot - |- |<!--Name-->ThinkPad E14 Gen 4, E15 Gen 4 (15″, AMD) || <!--Chipset-->AMD 3 5425u, 5 5625U, 7 5825u || <!--IDE-->{{N/A}} || <!--SATA-->1 (14") or 2 (15") nvme || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{unk|HDAudio with ALC3287 codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe|rtl8169 }} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2023 64bit - 15.6in 1080p - usb-c charging - 4gb or 8gb soldered with 1 ddr4 3200Mhz sodimm slot - L19M3PDA 45Whr battery - U24 TPS65994 and QB6 QB5 mosfet issues - plastic bendy case - |- |<!--Name-->ThinkPad T14 Gen 3 Machine types MT 21AH 21AJ 21CF and 21CG, P14s Gen 3 || <!--Chipset-->AMD 6850U || <!--IDE-->{{n/a}} || <!--SATA-->NVme || <!--Gfx-->VESA 2d || <!--Audio-->{{unk| ALC3287-VA2-CG codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{Maybe|rtl8169 }} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2022 64bit - 14in |- |<!--Name-->ThinkPad T14s Gen 3 || <!--Chipset-->AMD 6500U || <!--IDE-->{{n/a}} || <!--SATA-->NVme || <!--Gfx-->VESA 2d || <!--Audio-->{{unk| ALC3287-VA2-CG codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no|Ethernet support via optional Lenovo® USB-C® to Ethernet Adapter}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2022 64bit - 14in |- |<!--Name-->V14 G3, V15 G3 Gen3 ALC || <!--Chipset-->Ryzen 5 6500U || <!--IDE-->{{N/A}} || <!--SATA-->nvme and optional 2.5in sata if smaller 38Wh battery and after sourcing ribbon cable and connector, no dvd || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 }} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2023 64bit - 15"FHD - battery BYD L20B2PFO - |- |<!--Name-->ThinkPad L15 Gen 3 (15″, AMD) || <!--Chipset-->AMD 6000 series || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{No| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no|rtl8169 needs dongle}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2023 64bit- 15.6in 1080p - |- |<!--Name-->Lenovo Yoga 7 14ARB7 || <!--Chipset-->AMD Ryzen 5, 6600U, 7 6800U || <!--IDE-->{{N/A}} || <!--SATA-->1 nvme || <!--Gfx-->AMD 660M or 680M || <!--Audio-->{{No|HDaudio with ALC3306 aka alc287 codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2022 64bit - 14in 1800p ips 300 nits - usb-c ac charging 71whr integrated battery - sd card slot - digital pen input - 8gb, 6gb or 32gb soldered ddr5 ram - |- |<!--Name-->ThinkPad T14 Gen 4, P14s Gen 4 || <!--Chipset-->AMD Ryzen Pro 5 7540U, Ryzen Pro 7 7840U (AI NPU) || <!--IDE-->{{n/a}} || <!--SATA-->NVme || <!--Gfx-->VESA 2D for AMD 740M 780M|| <!--Audio-->{{unk|HDAudio ALC3287 codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 }} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2023 64bit - 14in 1920x1200 - 8gb, 16gb or 32gb lpddr5 soldered - usb-c charging - |- |<!--Name-->ThinkPad E14 g5, E15 Gen 5 (15″, AMD) || <!--Chipset-->AMD 7000 series Ryzen 5-7530U, 7-7730U || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{unk|HDAudio with codec}} || <!--USB-->{{maybe|USB3}} || <!--Ethernet-->{{maybe| }} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2023 64bit- 15.6in 1080p - |- |<!--Name-->Thinkbook 14 G6 ABP IRL, ThinkBook 16 G6ABP (21KK001CUK) || <!--Chipset-->AMD Ryzen 7530U 7730U || <!--IDE-->{{N/A}} || <!--SATA-->m.2 nvme || <!--Gfx-->VESA 2d for AMD Radeon || <!--Audio-->{{unk|HDaudio with codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 untested}} || <!--Wireless-->{{No| wifi}} || <!--Test Distro--> || <!--Comments-->2023 64bit - 14in 1200p or 1440p - 100W USB-C AC power adapter - |- |<!--Name-->IdeaPad Slim 5 Light 14ABR8 Laptop || <!--Chipset-->AMD Ryzen 3 7330U (4c8t) 5 7530U (6c12t) 7 7730U (8c16t) || <!--IDE-->{{N/A}} || <!--SATA-->2 m.2 nvme slot - 1 2242, 1 2280 || <!--Gfx-->VESA 2d for AMD Radeon || <!--Audio-->{{unk|HDaudio with Realtek® ALC3287 codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{No| wifi}} || <!--Test Distro--> || <!--Comments-->2023 64bit - 14in 1080p - 8Gb or 16Gb soldered ram - usb-c charging only - |- |<!--Name-->ThinkPad X13 Gen 4 (13" AMD) || <!--Chipset-->AMD 7480U 7040U || <!--IDE-->{{N/A}} || <!--SATA-->NVMe || <!--Gfx-->{{partial|VESA}} || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2023 - avoid usb-c port damage - |- |<!--Name-->ThinkPad L14 (Gen4), L15 Gen 4 (15" AMD) || <!--Chipset-->MD Ryzen 5 PRO 7530U, 7480U 7040U || <!--IDE-->{{N/A}} || <!--SATA-->NVMe || <!--Gfx-->{{partial|VESA}} || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no|rtl8169 needs dongle}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2023 64bit - elan trackpad - |- |<!--Name-->Lenovo Gen 4 V14 (82YT, 82YV, 83A0, 83A1, 83CC, 83FR, 82YX, 83FG), V15 (82YU, 82YW, 83FS, 82YY, 83CR), V17 (83A2), || <!--Chipset-->AMD AMD Athlon™ Gold 7220U (2c4t), AMD Athlon™ Silver 7120U (2c2t), AMD Ryzen™ 3 7320U (4c8t), AMD Ryzen™ 5 7520U (4c8t) || <!--IDE-->{{N/A}} || <!--SATA-->nvme and 2.5in sata if smaller 38Wh battery, no dvd || <!--Gfx-->{{Maybe|VESA 2d for AMD 610M HDMI® and USB-C}} || <!--Audio-->{{unk|HDaudio with ALC3287 codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no|Gigabit Ethernet, 1x RJ-45}} || <!--Wireless-->{{no|wifi 6}} || <!--Test Distro--> || <!--Comments-->2023 64bit - 15.6" FHD 1080p - 8 or 16Gb soldered - 65W round tip (3-pin) AC adapter or USB-C - |- |<!--Name-->ThinkPad e14 G6, e15 Gen 6 (15″, AMD) || <!--Chipset-->AMD 7000 series AMD Ryzen™ 7 7735HS || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D for AMD Radeon || <!--Audio-->{{unk|HDAudio codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe| }} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2023 64bit- 15.6in 1080p - |- |<!--Name-->ThinkPad L16 (16" AMD), || <!--Chipset-->AMD 8000 || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->VESA 2D || <!--Audio-->{{unk|HDAudio with codec}} || <!--USB-->{{maybe|USB4}} || <!--Ethernet-->{{no|rtl8169 needs dongle}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2025 64bit |- |<!--Name-->ThinkPad T14 Gen 5, P14s Gen 5 || <!--Chipset-->AMD Ryzen 7 PRO 8840U, AMD Ryzen™ 5 PRO 8540U || <!--IDE-->{{N/A}} || <!--SATA-->NVME || <!--Gfx-->VESA 2d || <!--Audio-->{{unk| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{maybe|rtl8169 }} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2025 64bit - 14inch 1920 x 1200 - |- |<!--Name--> Lenovo WinBook 300e SKU: 82GKS00000 || <!--Chipset-->AMD 3015E || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2023 64bit 4GB 64GB SSD 11.6 Inch Touchscreen Windows 10 Pro Laptop |- |<!--Name-->ThinkPad || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- |<!--Name-->Lenovo Yoga Slim 7a || <!--Chipset-->AMD Ryzen AI 7350 || <!--IDE-->{{N/A}} || <!--SATA-->1 nvme || <!--Gfx-->AMD 860M || <!--Audio-->{{No|HDaudio with ALC3306 aka alc287 codec}} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| wifi}} || <!--Test Distro--> || <!--Comments-->2025 64bit - 14in 1800p ips 300 nits - usb-c ac charging 71whr integrated battery - sd card slot - digital pen input - 8gb, 6gb or 32gb soldered ddr5 ram - |- |<!--Name-->ThinkPad || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====Samsung==== [[#top|...to the top]] {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="2%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->NP-Q1 Q1 || <!--Chipset-->Celeron-M 353 ULV 600Mhz || <!--IDE-->{{Yes|1.8" SFF HDD 20 / 60 GB }} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Yes|GMA 915 2D and 3D opengl1 tunnel 95 gearbox 68}} || <!--Audio-->{{Yes|HD Audio with codec - head phones only}} || <!--USB-->{{Yes}} || <!--Ethernet-->{{No|Marvell}} || <!--Wireless-->{{Yes|Atheros 5006EX}} || <!--Test Distro-->2016 Icaros 2.1 || <!--Comments-->2005 32bit old style tablet UltraMobile PC UMPC - Wacom serial resistive pen or finger no support - 1 sodimm ddr2 max 1Gb - LCD 7" WVGA (800 x 480) - CompactFlash port Type II - |- | <!--Name-->NP Q1U Ultra Mobile PC UMPC Q1F NP-Q1-F000 || <!--Chipset-->Intel A100 600 / A110 Stealey 800 MHz CPU || <!--IDE-->{{Yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Maybe|GMA 950 2D and 3D opengl1}} || <!--Audio-->{{No|HD Audio 1986}} || <!--USB--> || <!--Ethernet-->Intel || <!--Wireless-->{{Maybe|Atheros 5006EX}} || <!--Test Distro-->2016 Icaros 2.1 || <!--Comments-->2006 32bit 1024×600 - sd card slot - |- | <!--Name-->NP P500 family P500Y || <!--Chipset-->AMD with SB600 || <!--IDE-->{{N/A| }} || <!--SATA-->{{Yes| }} || <!--Gfx-->{{Maybe|use VESA Ati x1250}} || <!--Audio-->{{Yes| Audio with codec }} || <!--USB--> || <!--Ethernet-->{{No|Marvell 88E8039 yukon}} || <!--Wireless-->{{yes|Atheros G}} || <!--Test Distro-->2017 Icaros 2.1.2 || <!--Comments-->64bit possible - 15.4 tft display - cheap plastic okay build - 19v propriety end - |- | <!--Name-->R505 R510 || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless-->Atheros G || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->R520 R522 R610H R620 || <!--Chipset-->Intel Mobile Core i3 Intel PM45 82801M ICH9-M|| <!--IDE--> || <!--SATA--> || <!--Gfx-->ATI Mobility Radeon HD 4650 (RV730) || <!--Audio-->Intel HD Audio with Realtek ALC272 || <!--USB--> || <!--Ethernet-->Marvell Yukon 88E8057 || <!--Wireless-->Atheros AR5007EG || <!--Test Distro--> || <!--Comments-->2010 64 bit possible |- | NP-R530 || || {{N/A}} || {{partial|IDE mode}} || {{yes|Intel GMA (2D)}} || {{partial|HD Audio playback}} || {{yes|USB 2.0}} || {{no|Marvell}} || {{unk|Atheros AR9285}} || Icaros 1.5.2 || <!--Comments--> |- | <!--Name-->Samsung R730 17.3 Essential Notebook NP-R730-JA02UK, NP-R730-JA01SE, R730-JT06 || <!--Chipset-->Intel HM55 Dual Core T4300 i3-370M || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|use VESA for Intel 4500MHD and GeForce G 310M with 1 VGA, 1 HDMI}} || <!--Audio-->{{Yes|HDAudio ALC??? codec Realtek}} || <!--USB-->{{yes|USB2}} || <!--Ethernet-->{{No|Marvell Yukon 88E8059 PCI-E}} || <!--Wireless-->{{unk|Broadcom, Intel or Atheros 9k AR9285}} || <!--Test Distro-->Deadwoods ISO 2023-11 || <!--Comments-->2010 64bit - 17.3in HD 1280 x 720 pixels low contrast or some 1600x900 - 2 DDR3 sodimm slots - 2.84 kg 6.26 lbs - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->[http://www.notebookcheck.net/Review-Samsung-305U1A-A01DE-Subnotebook.68246.0.html Series 3 Samsung 305u1a] || <!--Chipset-->AMD Zacate E350 or E450 || <!--IDE--> || <!--SATA--> || <!--Gfx-->AMD Radeon 6320 || <!--Audio-->ALC ACL 269 || <!--USB--> || <!--Ethernet-->Realtek 8111 8169 || <!--Wireless-->Broadcom 4313 || <!--Comments-->2011 64bit |- | <!--Name-->NP-RV415 NP-RV515 || <!--Chipset-->E350 or E450 plus A50M chipset || <!--IDE--> || <!--SATA--> || <!--Gfx-->AMD Radeon HD 6470 || <!--Audio-->HD Audio Realtek || <!--USB--> || <!--Ethernet-->{{unk|RTL8169 Realtek RTL8111 8168B}} || <!--Wireless-->{{unk|Atheros AR9285}} || <!--Test Distro--> || <!--Comments-->2012 64bit slow - |- | <!--Name-->Series 5 NP535U3C || <!--Chipset-->A6-4455M || <!--IDE-->{{N/A}} || <!--SATA-->2.5in || <!--Gfx-->radeon || <!--Audio-->HDAudio || <!--USB-->USB2 || <!--Ethernet-->Realtek GbE || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2012 64bit slow - 13.3in 1368 x 768 - plastic build - 65w 19v psu - |- | <!--Name-->series 3 NP355V5C || <!--Chipset-->A6-4400M, A8-4500M, A10-4600M || <!--IDE-->{{N/A}} || <!--SATA-->2.5in || <!--Gfx-->7640M || <!--Audio-->HDAudio || <!--USB-->USB2 || <!--Ethernet-->Realtek GbE || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2012 64bit - 15.4in 1368 x 768 - plastic build - 65w 19v psu - |- | <!--Name-->Samsung ATIV Book 9 Lite NP905S3G || <!--Chipset-->AMD A6-1450 quad 1GHz Temash atom like || <!--IDE--> || <!--SATA-->128gb || <!--Gfx-->AMD 8250 || <!--Audio-->HD Audio || <!--USB--> || <!--Ethernet-->{{Maybe|Realtek rtl8169 but only with mini LAN AA-AE2N12B Ethernet Adapter RJ45 dongle}} || <!--Wireless-->{{unk|Atheros AR9565}} || <!--Test Distro--> || <!--Comments-->2014 64bit - 13.3 TN glossy 1366 x 768 200nits 60% srgb - plastic case - 26W battery built in with 4hr life - 19V 2.1A 3.0*1.0mm psu - 1 ddr3l slot max 4gb - 720p webcam - mini hdmi out - 1w speakers - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====Toshiba==== [[#top|...to the top]] Order of Build Quality (Lowest to highest) <pre > Equium Satellite (Pro) Libretto Portege Tecra </pre > {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | Tecra 8100 8200 9000 || 440BX || {{yes|IDE}} || {{N/A}} || {{maybe|S3 Savage MX 3D (VESA only)}} || {{no|Yamaha DS-XG ymf744 ymf-754}} || {{yes|USB1.1 only}} || {{N/A}} || {{N/A}} || Icaros 1.5 || little support |- | <!--Name-->Tecra 9100 || <!--Chipset-->810 || <!--IDE-->{{Yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{maybe|S3 Savage IX}} || <!--Audio-->{{no|ymf754}} || <!--USB-->USB 1.1 || <!--Ethernet-->eeee pro100 || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->PSU Adapter For Toshiba Tecra 9000 9100 A1 A10 A11 A3 A3X A4 A5 A7 M1 M2 M3 M4 M5 M7 M9 R10 S1 series 75 Watt 15V 5A |- | [http://tuxmobil.org/toshiba_sp4600.html Satellite Pro 4600] || i810 || IDE || {{N/A}} || {{maybe|Trident Cyber Blade XP (VESA only)}} || {{no|YAMAHA DS-XG AC97 ymf754}} || {{yes|USB}} || {{yes|Intel e100}} || {{no|Agere (internal PCMCIA)}} || || little support |- | Satellite 2805 S603 || Intel 815 || {{yes|IDE}} || {{N/A}} || {{maybe|nVidia GeForce2 Go}} || {{no|Yamaha Corp YMF 754}} || {{yes|USB}} || {{yes|Intel PRO/100}} || {{dunno}} || || little support |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Satellite A10 S167 S1291 - A15 A20 A25 || <!--Chipset-->P4M || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 852GM or Radeon || <!--Audio--> || <!--USB--> || <!--Ethernet-->RTL 8139 || <!--Wireless-->{{Maybe|Intel 2100, Agere or Atheros PA3399U 1MPC minipci}} || <!--Test Distro--> || <!--Comments-->a few models came with antenna leads |- | Satellite [http://eu.computers.toshiba-europe.com/innovation/jsp/SUPPORTSECTION/discontinuedProductPage.do?service=EU&com.broadvision.session.new=Yes&PRODUCT_ID=76230 A30-714] || P4-M / 82845 i845 || {{yes|82801}} || {{N/A}} || {{maybe|VESA}} || {{yes|AC97}} || {{yes}} || {{yes|RTL8139}} || {{N/A}} || Icaros 1.2.4 || nice laptop, drawbacks: heavy, really hot (P4-3.06 GHz!!) - A30 (EU) A33 (Australian) A35 (USA) - |- | <!--Name-->Satellite A40 A45 || <!--Chipset-->P4M or Celeron M with Intel 845 865 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 852GME or Radeon 7000 Mobility || <!--Audio-->AC97 Realtek || <!--USB-->USB2.0 || <!--Ethernet--> || <!--Wireless-->Atheros 5002G 5004G - PA3299U mini pci || <!--Test Distro--> || <!--Comments-->2003 32bit - A40 S161 A40-S1611 A40-2701, A45-S120 A45-S1201 S130 S1301 S1501 - |- | <!--Name-->Satellite a50 A55 a60-s156 Equium A60 PSA67E A65 || <!--Chipset-->P4M or Celeron M with Intel 845 865 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 852GME or Radeon 7000 Mobility || <!--Audio-->AC97 Realtek || <!--USB-->USB2.0 || <!--Ethernet--> || <!--Wireless-->Atheros 5002G 5004G - PA3299U mini-pci || <!--Test Distro--> || <!--Comments-->2003 32bit - |- | <!--Name-->Satellite A70 A75-S206 A80 A85-S107 || <!--Chipset-->P4M or Celeron-M with Intel 845 865 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 852GME or Radeon 7000 Mobility || <!--Audio-->AC97 Realtek || <!--USB-->USB2.0 || <!--Ethernet--> || <!--Wireless-->Atheros 5002G 5004G - PA3299U mini-pci || <!--Test Distro-->Icaros 1.5.1 || <!--Comments-->2003 32bit - |- | Toshiba Satellite Pro M30 || intel 855 || {{yes|boots with ATA=nodma option}} || {{N/A}} || {{maybe|VESA}} || {{yes|AC97}} || {{yes|USB2.0}} || {{yes|Intel PRO/100 VE}} || {{dunno}} || Icaros 1.5 || nice laptop with some support |- | <!--Name-->Portege M300 - M200 tablet || <!--Chipset-->855GM with 1.2GHz Pentium M 753 || <!--IDE-->{{yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{maybe|VESA 2d only - tablet with nvidia 5200 go}} || <!--Audio-->{{no|AC97 STAC 9750}} || <!--USB-->{{yes}} || <!--Ethernet-->{{yes|Intel PRO 100}} || <!--Wireless-->{{no|Intel PRO Wireless 2200BG}} || <!--Test Distro--> || <!--Comments-->little support |- | <!--Name-->Tecra M2 M2-S || <!--Chipset-->Intel 855P Pentium-M || <!--IDE--> || <!--SATA-->{{N/A}} || <!--Gfx-->nvidia fx go5200 32mb or 64mb agp || <!--Audio-->AC97 1981B || <!--USB--> || <!--Ethernet--> || <!--Wireless-->Intel Pro || <!--Test Distro--> || <!--Comments-->2003 32bit - PSU 15V 5A - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Satellite Pro L20 267 (PSL2YE PSL2XE) PSL25E L30 || <!--Chipset-->Celeron M 370 1.4 1.5GHz, 1.73Ghz with RC410M SB400 || <!--IDE-->{{N/A| }} || <!--SATA-->{{yes|IDE mode}} || <!--Gfx-->{{Maybe|use VESA - Ati x200}} || <!--Audio-->{{No|[https://forums.gentoo.org/viewtopic-t-490297-start-0.html ALC861]}} || <!--USB-->{{Maybe|Boots usb sticks}} || <!--Ethernet-->{{yes|rtl8139 Realtek 8139}} || <!--Wireless-->{{No|Atheros mini-pci should work maybe not working with ATi chipset or need to swap??}} || <!--Test Distro-->2016 Icaros 2.1.1 || <!--Comments-->2004 32bit 14" pioneer dvd-rw - 19v |- | <!--Name-->Satellite L30 PSL30E L33 PSL33E || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 800 or ATi RC410 x200 || <!--Audio-->AC97 AD1981B or HD Audio ALC861 || <!--USB--> || <!--Ethernet-->realtek 8139 || <!--Wireless-->Atheros or Intel || <!--Test Distro--> || <!--Comments-->L30 PSL30L 101 PSL33E 113 115 134 00M019 - |- | Satellite Pro M40 313 psm44e || AMD with Ati || {{yes|boots with ATA=nodma}} || {{N/A}} || {{maybe|VESA}} || {{yes|AC97}} || {{yes|USB2.0}} || {{yes|}} || {{maybe|atheros askey ar5bmb5 mini pci}} || || 2005 32bit - nice laptop with some support |- | <!--Name-->Satellite L40 PSL40E PSL40L, PSL43E || <!--Chipset-->945GM with U7700 1.3GHz ULV || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 945 || <!--Audio-->{{No|Intel HD with AD1986A codec}} || <!--USB-->2 USB2.0 || <!--Ethernet-->realtek 8139 || <!--Wireless-->Atheros AR24xx Askey || <!--Test Distro-->Icaros 2.0.3 || <!--Comments-->2006 32bit only - - 12X 13G 139 14B 143 15J 19O - |- | <!--Name-->Satellite L45 PSL40U S7409 S2416 || <!--Chipset-->945GM with Celeron M 440 1.86 GHz || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 945 || <!--Audio-->{{No|Intel HD with AD1986A codec}} || <!--USB-->2 USB2.0 || <!--Ethernet-->realtek 8139 || <!--Wireless-->Atheros AR24xx Askey || <!--Test Distro-->Icaros 2.0.3 || <!--Comments-->2006 32bit only - |- | <!--Name-->Satellite Pro A100 || <!--Chipset-->940G || <!--IDE--> || <!--SATA--> || <!--Gfx-->Nvidia G72M Quadro NVS 110M GeForce Go 7300 / Ati (PSAA3E)|| <!--Audio-->HD Audio with ALC861 codec || <!--USB--> || <!--Ethernet-->Intel 100 || <!--Wireless-->Intel 3945 swap with atheros || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Satellite A110 159 (PSAB0), Equium A110 (PSAB2E), Satellite A110 233 (PSAB6), || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio-->ALC861 || <!--USB--> || <!--Ethernet-->Realtek 8136 || <!--Wireless-->Atheros || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Satellite Pro A120 PSAC0 PSAC1 PSAC1E || <!--Chipset-->Core Solo GMA 950 to T2300 || <!--IDE--> || <!--SATA--> || <!--Gfx-->GMA 945 || <!--Audio-->ALC262 or AC97 AD1981B || <!--USB-->UHCI EHCI || <!--Ethernet--> || <!--Wireless-->Atheros Ar5001 or Intel or Broadcom || <!--Test Distro--> || <!--Comments-->15V 4A charger - |- | <!--Name-->Satellite Pro A120 || <!--Chipset-->Core Duo ATi RS480 + SB450 || <!--IDE--> || <!--SATA--> || <!--Gfx-->use VESA - ATI RC410 Radeon Xpress 200M || <!--Audio-->ALC262 || <!--USB-->OCHI UHCI || <!--Ethernet-->RTL 8139 || <!--Wireless-->Intel 3945 or Atheros Ar5001 || <!--Test Distro--> || <!--Comments-->15v 5a proprietary charger needed |- | <!--Name-->Satelite A130 PSAD6U || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet-->Realtek 8101E || <!--Wireless-->Atheros or Intel || <!--Test Distro--> || <!--Comments-->ST1311 s1311 ST1312 S2276 S2386 - |- | <!--Name-->Satellite A135 S2686 (Compal LA 3391P) || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet-->Realtek 8101E || <!--Wireless-->Atheros or Intel || <!--Test Distro--> || <!--Comments-->S2246 S2346 S2256 S4477 S4666 S4827 - |- | <!--Name-->Satellite A200 PSAE1E (Inventec MW10M) || <!--Chipset-->Pentium M with 945GM Express Celeron M 520 1.6Ghz or Pentium® Core Duo T2130 1.86 GHz || <!--IDE--> {{N/A}}|| <!--SATA--> {{Maybe|SATA}}|| <!--Gfx--> {{Yes|Intel GMA 950 (2D and 3D)}}|| <!--Audio--> {{Yes|HD Audio ALC862}}|| <!--USB--> {{Yes| }}|| <!--Ethernet--> {{yes|RTL8101E rtl8139}}|| <!--Wireless--> {{yes|Atheros 5000 - FN,F5 or FN,F8 or switch}} || <!--Test Distro-->2016 AspireOS 1.8 || <!--Comments-->2006 Excellent 32 bit support! - make sure that your WLAN card is enabled, do this using the hardware switch and FN+F8 key combination |- | <!--Name--> A210, Satellite A215 AMD (Inventec 10A) S5808 || <!--Chipset--> Ati with SB690 || <!--IDE--> {{N/A}}|| <!--SATA-->{{Maybe|SATA}}|| <!--Gfx-->{{Maybe|use VESA HD2600 Mobility M76}} || <!--Audio-->HD Audio ALC268 || <!--USB--> {{Yes| }}|| <!--Ethernet-->{{yes|RTL8101E}}|| <!--Wireless--> {{yes|Atheros 5000}}|| <!--Test Distro-->2018 AspireOS 1.8 || <!--Comments-->A215-S7422 A215-S7472 A215-S4697 (USA) - |- | <!--Name--> [http://www.amiga.org/forums/showthread.php?t=62036 A215 S4757] || <!--Chipset--> Ati X1200 with SB600 || <!--IDE--> {{N/A}}|| <!--SATA-->{{Maybe|SATA}}|| <!--Gfx-->{{Maybe}} || <!--Audio-->HD Audio || <!--USB--> {{Yes| }}|| <!--Ethernet-->{{yes|RTL8101E}}|| <!--Wireless--> {{yes|Atheros 5000}}|| <!--Test Distro-->2017 AspireOS 1.8 || <!--Comments--> |- | <!--Name-->Qosmio G30 (PQG31C-HD202E) || <!--Chipset-->945 with Duo T2500 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->{{yes|Nouveau Nvidia Go 7600 2d and 3d}} || <!--Audio-->{{yes| }} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no| }} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2006 32bit - 17" UXGA 1920x1200, |- | <!--Name-->Tecra A10 || <!--Chipset--> || <!--IDE--> {{N/A}} || <!--SATA--> {{Maybe|IDE mode}} || <!--Gfx--> {{Maybe|Intel GMA 4500M (2D)}} || <!--Audio--> {{Yes|HD Audio}} || <!--USB--> {{Yes|USB 2.0}} || <!--Ethernet-->{{No|Intel PRO 1000}} || <!--Wireless-->{{No|Intel WiFi Link 5100}} || <!--Test Distro--> || <!--Comments-->64 bit possible |- | <!--Name-->L35 - L40 PSL48E - L45 S7423 || <!--Chipset-->GL960 with Intel Celeron || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Maybe|X3100 some 2D but software 3d tunnel 9 gearbox 4}} || <!--Audio-->{{Yes|HD Audio with ALC660 codec playback}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{Yes|REALTEK 8139}} || <!--Wireless-->{{No|Realtek 8187b replace with Atheros 5k}} || <!--Test Distro-->2017 Icaros 2.1.2 || <!--Comments-->1,73Ghz M 520 or M 540 or Dual T2310 (1.46 GHz) T2330 (1.6 GHz) - 14H 14N 15B 17H 17K 17R 17S 18Z - |- | <!--Name-->Satellite a300 - inventec potomac 10s pt10s A300D 21H || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->ATI Mobility Radeon HD 3650 || <!--Audio-->HD Audio - Realtek || <!--USB--> || <!--Ethernet-->Realtek 8102E || <!--Wireless-->Atheros 5005 || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->satellite L300D-224 PSLC8E PSLC9E, l305 (inventec ps10s) || <!--Chipset-->AMD M780 with Turion RM70 or QL-64 || <!--IDE--> {{yes|IDE}} || <!--SATA--> {{yes|SATA}} || <!--Gfx--> {{Maybe|use VESA for Radeon 3100}} || <!--Audio-->{{maybe|HD Audio with Realtek ALC268}} || <!--USB--> {{yes|USB 2.0}} || <!--Ethernet--> {{no|rtl8169 Realtek RTL8101E RTL8102E}} || <!--Wireless-->{{no|Atheros G XB63L or Intel or Realtek}} || <!--Test Distro--> Icaros Desktop Live 2.3 AROS One 2.3 || <!--Comments--> Wireless-handler crashing when using Atheros-Wireless-Card |- | <!--Name-->Satellite P300 (PSPC0C-01D01C) || <!--Chipset-->945GM with Intel Core 2 Duo T5750 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->{{maybe| }} || <!--Audio-->{{No| codec}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no| }} || <!--Wireless-->{{No| swap with Atheros 5k }} || <!--Test Distro-->AROS One 64bit || <!--Comments-->2007 |- | <!--Name-->satellite l300-1bw PSLBDE-005005AR, L300-148 PSLB0E, l300-20D PSLB8E-06Q007EN, l300-294 L300-23L PSLB9E || <!--Chipset-->Intel GM45 + PGA478 socket Celeron 900, Pentium T1600, T2390, T3400 (Socket P) to Core2 Duo T6400 T6670 || <!--IDE--> {{unk|IDE}} || <!--SATA--> {{unk|SATA}} || <!--Gfx--> {{Maybe|use VESA for Intel gma 4500M}} || <!--Audio-->{{maybe|HD Audio with Realtek ALC???}} || <!--USB--> {{unk|USB 2.0}} || <!--Ethernet--> {{unk|rtl8169 Realtek 810xE}} || <!--Wireless-->{{no|Intel or Realtek}} || <!--Test Distro--> || <!--Comments-->2009 64-bit - new unfamiliar Bios called insyde H20 - |- | <!--Name-->satellite l350d || <!--Chipset-->AMD Athlon (tm) X2 QL-60 + RS780M || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Radeon HD 3100 || <!--Audio-->HD Audio with Realtek || <!--USB--> || <!--Ethernet-->Realtek || <!--Wireless-->Realtek 8187b || <!--Test Distro--> || <!--Comments-->2009 64bit |- | <!--Name-->Satellite L450 12 13 14 || <!--Chipset-->AMD Sempron, 2.1GHz with AMD RS780M || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Radeon HD 3200 (based on HD 2400) || <!--Audio--> || <!--USB--> || <!--Ethernet-->Realtek RTL8101E RTL8102E || <!--Wireless-->Realtek 8172 || <!--Test Distro--> || <!--Comments-->2009 64bit - 12X 13P 13X 14V PSLY6E00C006EN |- | <!--Name-->Satellite Pro L450 (Compal LA-5821P) 179 || <!--Chipset-->intel celeron 900 2.20 Ghz no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->intel 4500m || <!--Audio-->HD Audio with codec || <!--USB--> || <!--Ethernet-->RTL8101 /2 /6E PCI Express Gigabit || <!--Wireless-->RTL8191 SEvB || <!--Test Distro--> || <!--Comments-->2009 64bit - 39.6cm (15.6”) Toshiba TruBrite® HD TFT 16:9 768p |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Toshiba Satellite P775, P775-S7320 and P775-10K || <!--Chipset-->Intel Core i5 (2nd Gen) 2430M i7-2630QM || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Maybe|Vesa 2D for Intel}} || <!--Audio-->{{maybe| }} || <!--USB-->{{maybe| }} || <!--Ethernet-->{{no| }} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2011 17.3" - 1600 x 900 (HD+) - 2 DDR3 sodimm max 16Gb - |- |<!--Name-->Toshiba Satellite C660D-19X || <!--Chipset-->AMD E-300 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{maybe|Vesa 2D for ATi}} || <!--Audio-->{{no|HD Audio with Realtek codec}} || <!--USB-->{{no| }} || <!--Ethernet-->{{Maybe|r8169 rtl8101e}} || <!--Wireless-->{{no|Realtek RTL8188 8192ce rtl8192ce}} || <!--Test Distro--> || <!--Comments-->2011 64bit - |- | <!--Name-->L755D (E-350) L750D (E-450) || <!--Chipset-->AMD E350 E450 no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Radeon HD 6310 6320 || <!--Audio-->HDAudio conexant codec || <!--USB--> || <!--Ethernet--> || <!--Wireless-->Realtek || <!--Test Distro--> || <!--Comments-->2012 64bit |- | <!--Name-->Satellite Pro SP C640 C660D-15X (PSC1YE) C670D- () || <!--Chipset-->AMD E350 no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->6310G || <!--Audio-->HD Realtek ALC259 || <!--USB-->USB2 || <!--Ethernet-->Realtek || <!--Wireless-->Broadcom || <!--Test Distro--> || <!--Comments-->2012 64bit |- | <!--Name-->C70D-A C75D-A || <!--Chipset-->E1-1200 no sse4.1 or avx || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{maybe|AMD HD8330}} || <!--Audio-->{{no|HA Audio CX20751 11Z}} || <!--USB-->{{no| }} || <!--Ethernet-->{{no|Atheros AR8162 alx}} || <!--Wireless-->{{no|Realtek 8188e}} || <!--Test Distro--> || <!--Comments-->2013 64bit - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- |} ====Misc==== [[#top|...to the top]] {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Time 500 Packard Bell EasyOne 1450 1550 || <!--Chipset-->K6-3 500Mhz + VIA MVP4 vt82c686a || <!--IDE-->{{N/A|Issues}} || <!--SATA-->{{N/A}} || <!--Gfx-->Use VESA || <!--Audio-->{{No|VIA AC97 3058 with wolfson codec WM9703 WM9704 WM9707 WM9708 or WM9717}} || <!--USB-->via 3038 2 ports USB 1.1 untested || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{N/A}} || <!--Test Distro-->NB May 2013 || <!--Comments-->2001 32bit grub runs but stalls around [PCI] Everything OK |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Sony Vaio PCG FX201/FX202 FX210/FX215 FX401/FX402 FX404/FX405 972M, FX501/FX502 FX504/FX505 || <!--Chipset-->VIA KT133A KM133 Duron 800Mhz Athlon 1.3Ghz || <!--IDE-->{{partial|boot issue with 2013 kernel VIA [rev 06]}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{partial|ATI Rage Mobility Pro (VESA only)}} || <!--Audio-->{{Yes|VIA AC97 686b [rev 50] AD1881A Ear phone and Mic}} || <!--USB-->{{Maybe|issues}} || <!--Ethernet-->{{Yes|RTL 8139}} || <!--Wireless-->{{N/A}} || <!--Comments-->Nightly 1st March 2013 || <!--Comments-->booting usb pendrive from Plop Boot Loader floppy (no bios USB boot). Can freeze coz hardware issue or a ram slot problem - no support for iLink firewire VT8363/8365 pci - vt82c686b |- | <!--Name-->Sony Vaio PCG FX601/FX602, FX604/FX605 FXA53(US), FX701/FX702, FX704/FX705, FX801/FX802 FX804/FX805 || <!--Chipset-->VIA KT133A KM133 Duron 800Mhz Athlon 1.3Ghz || <!--IDE-->{{partial|boot issue with 2013 kernel VIA [rev 06]}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{partial|ATI Rage Mobility Pro (VESA only)}} || <!--Audio-->{{Yes|VIA AC97 686b [rev 50] AD1881A Ear phone and Mic}} || <!--USB-->{{Maybe|issues}} || <!--Ethernet-->{{Yes|RTL 8139}} || <!--Wireless-->{{N/A}} || <!--Comments-->Nightly 1st March 2013 || <!--Comments-->booting usb pendrive somes works |- | <!--Name-->Sony Vaio PCG FX100 R505LE || <!--Chipset-->Intel i815 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Use VESA Intel 82815 CGC || <!--Audio-->Intel ICH AC97 with ADI AD1881A codec || <!--USB--> || <!--Ethernet-->Intel e100 || <!--Wireless-->{{N/A}} || <!--Test Distro--> || <!--Comments-->PCG-FX105 FX105K PCG-FX108 FX108K PCG-FX109 FX109K FX200 FX203/FX203K FX205 FX205K FX209 FX209K FX220 [http://juljas.net/linux/vaiofx240/ FX240] FX250 FX270 FX290 FX301 FX302 FX340 FX370 FX390 FX403 FX503 FX950 |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | Sony VAIO VGN X505VP || Pentium M ULV and Intel 855GM || {{yes}} || {{N/A}} || {{maybe|Intel 855 (VESA only)}} || {{yes|AC97}} || {{yes|USB}} || {{yes|Intel PRO 100 VE}} || {{N/A}} || || 2004 32bit - 0.38 inches at its thinnest point - first laptop to feature a "chiclet" keyboard resemble Chiclets gum - |- | <!--Name-->Sony Z505LE Z505JE || <!--Chipset-->P3 || <!--IDE--> || <!--SATA-->n/a || <!--Gfx-->Rage Mobility M1 AGP mach64 || <!--Audio-->no Yamaha DS-XG PCI YMF744 || <!--USB--> || <!--Ethernet-->Intel 8255x based PCI e100 || <!--Wireless-->n/a || <!--Test Distro--> || <!--Comments-->2004 32bit - |- | <!--Name-->Panasonic Toughbook CF-18 || <!--Chipset-->Core || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{yes|gma for i915}} || <!--Audio-->{{yes|AC97 SigmaTel}} || <!--USB-->{{yes|usb2 }} || <!--Ethernet-->{{yes|RTL 8139C}} || <!--Wireless-->{{no|Intel swap for atheros 5k}} || <!--Test Distro-->Deadwoods' D02 test || <!--Comments-->2003 32bit |- | <!--Name-->Panasonic Toughbook CF-29 CF-30 || <!--Chipset-->Core || <!--IDE--> || <!--SATA--> || <!--Gfx-->use VESA || <!--Audio-->AC97 SigmaTel || <!--USB--> || <!--Ethernet-->RTL 8139C || <!--Wireless-->Intel || <!--Test Distro--> || <!--Comments-->2003 32bit |- | <!--Name-->MSI Microstar PR210 || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Maybe|use VESA ATi RS690M}} || <!--Audio-->{{Yes|HD Audio through speaker / head phones but not hdmi}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{yes|Realtek 8111 8169}} || <!--Wireless-->Atheros AR242x AR542x aw-ge780 mini pci-e || <!--Test Distro-->2017 Icaros 2.1.2 || <!--Comments-->2004 32bit - ENE PCI based SD card with no bios boot option |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Advent 7106 EAA-88 || <!--Chipset-->Pentium M 1.7GHz with 915GM || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{Yes|2D and 3D tunnel 187 gearbox 67}} || <!--Audio-->{{Yes|AC97 Intel ICH6 with Conexant Cx20468 31 codec playback head phones only}} || <!--USB--> || <!--Ethernet-->{{Yes|Realtek 8169}} || <!--Wireless-->{{No|Intel 2200BG Fn/F2 replaced with atheros mini pci in small base panel - startup errors in wireless manager}} || <!--Test Distro-->2017 Icaros 2.1.1 || <!--Comments-->2005 32bit 14" cheap rubbish sadly - fan noise through audio channel - |- | <!--Name-->Motion Computing LE1600 PC Slate || <!--Chipset-->915 || <!--IDE--> || <!--SATA--> || <!--Gfx-->915 || <!--Audio-->Intel AC97 SigmaTel STAC9758 9759 || <!--USB--> || <!--Ethernet-->Realtek 8169 || <!--Wireless-->Intel PRO Wireless 2200BG || <!--Test Distro--> || <!--Comments-->2005 serial Wacom digitiser not usb |- | <!--Name-->Panasonic Toughbook CF-51 CF-P1 CF-T5 CF-Y2 || <!--Chipset-->945GMS || <!--IDE--> || <!--SATA--> || <!--Gfx-->GMA 950 || <!--Audio-->HD Audio || <!--USB--> || <!--Ethernet-->Broadcom || <!--Wireless-->Intel || <!--Test Distro--> || <!--Comments-->2006 32bit |- | <!--Name-->Sony Vaio VGN-AR11S || <!--Chipset-->ntel Core Duo T2500 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{yes| Nvidia Go 7600}} || <!--Audio-->{{yes| }} || <!--USB-->{{yes| }} || <!--Ethernet-->{{no| }} || <!--Wireless-->{{No| }} || <!--Test Distro-->Aros One 32bit || <!--Comments-->2006 32bit - 17" 1920x1200 - blu-ray - |- | Sony Vaio VGN SR29VN || Intel ICH9 || {{N/A}} || {{maybe|IDE legacy}} || {{partial|ATI HD 3400 (VESA only)}} || {{partial|HD Audio (too quiet)}} || {{yes|USB1.1 and USB2.0}} || {{no|Marvell 8040}} || {{no|Intel 5100}} || Icaros 1.5 || 2007 32bit - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Wyse XM Class DELL WYSE Xn0m LAPTOP || <!--Chipset-->AMD T-G56N 1.6 1.65Ghz || <!--IDE-->{{N/A| }} || <!--SATA-->decased 2.5in ssd || <!--Gfx-->{{Maybe|Vesa 2d only AMD 6320}} || <!--Audio-->{{Maybe| }} || <!--USB-->{{Maybe|EHCI 2.0 with NEC uPD720200 USB 3.0}} || <!--Ethernet-->{{Yes|Realtek rtl8169 8111E}} || <!--Wireless-->{{No|Atheros 93xx}} || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 - 1366 x 768 14" - 2 ddr3l slots max 16gb - 19v coax barrel plug psu - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->MSI Ge40 Ge60 || <!--Chipset-->Intel 4 || <!--IDE--> || <!--SATA--> || <!--Gfx-->GTX 860M || <!--Audio--> || <!--USB--> || <!--Ethernet-->{{no|Killer}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2014 64bit - |- | <!--Name-->MSI GE62 2QF Apache Pro || <!--Chipset-->Intel 5 || <!--IDE--> || <!--SATA--> || <!--Gfx-->GTX 970M || <!--Audio--> || <!--USB--> || <!--Ethernet-->{{no|Killer }} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2015 64bit - |- | <!--Name-->MSI GS65 Stealth || <!--Chipset-->i7-8750H and later i7-9750H || <!--IDE-->{{N/A}} || <!--SATA-->nvme || <!--Gfx-->GeForce GTX 1060 or 1070 Max Q, GTX 1660 Ti, RTX 2080 Max-Q || <!--Audio-->{{unk|HDAudio }} || <!--USB-->{{unk|US3}} || <!--Ethernet-->{{No| }} || <!--Wireless-->{{No| }} || <!--Test Distro--> || <!--Comments-->2018 64bit - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Gigabyte P35X || <!--Chipset-->Intel || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->GTX 980M || <!--Audio-->HDaudio || <!--USB-->USB3 || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2014 64bit - |- | <!--Name-->Panasonic Toughpad FZ-G1 MK2 || <!--Chipset-->Core i5-3437U, 1.9GHz || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet-->{{N/A}} || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2014 64bit - |- | <!--Name-->ToughPad FZ-G1 Mk3 || <!--Chipset-->Intel Core i5-4310U || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->Intel HD 4400 || <!--Audio-->HDaudio Codec ALC255 || <!--USB--> || <!--Ethernet-->{{N/A}} || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->2015 64bit - |- | <!--Name-->[https://wiki.recessim.com/view/Panasonic_Toughpad_FZ-G1_MK4 Panasonic Toughpad FZ-G1 MK4] || <!--Chipset-->intel 6300U || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->Intel 520 || <!--Audio-->HDaudio with ALC256 codec - o/c or s/c fails early || <!--USB-->{{maybe|USB3 but options on the right hand side of screen case}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|intel ac 8260}} || <!--Test Distro--> || <!--Comments-->2016 64bit - 10.1in 1600x1200 - 4gb ddr3l soldered - waterproof pen left hand side base - optional slot-in 4g lte and sdhc - 16v 4.06A 64.96W panasonic barrel - |- | <!--Name-->Panasonic Toughpad FZ-G1 MK5 || <!--Chipset-->intel i5-7300U || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->Intel 620 || <!--Audio-->HDaudio ALC295 codec - o/c or s/c fails early || <!--USB-->{{maybe|USB3 but optional usb2 plugin r.h.s. of screen casing}} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no|Intel}} || <!--Test Distro--> || <!--Comments-->2018 64bit - 8gb ddr3l soldered - 10.1" WUXGA 1920 x 1200 with LED backlighting screen 2-800 nit - 10-point capacitive multi touch + Waterproof Digitizer pen l.h.s - |- | <!--Name-->ToughPad FZ-M1 || <!--Chipset-->Intel® Core TM m5-6Y57 vPro TM || <!--IDE-->{{N/A}} || <!--SATA-->sata || <!--Gfx-->Intel HD 4200 || <!--Audio-->HDaudio with ALC codec || <!--USB-->{{maybe| }} || <!--Ethernet-->{{N/A}} || <!--Wireless-->{{no| }} || <!--Test Distro--> || <!--Comments-->2016 64bit - 7in 800p - 8gb ddr3l soldered - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || IDE || SATA || Gfx || Audio || USB || Ethernet || Wireless || Test Distro || Comments |- | <!--Name-->Any Razor Razer laptops || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->AVOID unable to remove secure boot |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ===Netbook=== [[#top|...to the top]] * PC to write Aros image onto an USB pendrive with Raspberry PI writer, USB writer or Rufus for boot purposes on a netbook * SD card sometimes can boot like Dell 2100, EeePC 1001P, ASUS EeePC 900, acer aspire one d150, MSI Wind U100, ====Acer Packard Bell Netbooks==== [[#top|...to the top]] {| class="wikitable sortable" width=100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | Aspire One AOA110 (A110) (ZG5) || Intel 945GSE || {{N/A}} || {{Maybe|IDE legacy mode}} || {{Yes|Intel GMA (2D and 3D) tunnel 99 and gearbox 84 score}} || {{Yes|HD Audio ALC6628}} || {{Yes|USB1.1 and USB2.0}} || {{Yes|rtl8169 RTL8101E}} || {{Yes|AR5006}} atheros 5k || 2016 AspireOS 1.8, 2025 Aros One 2.6 32bit USB || 2007 32bit 1 core - 19v barrel A13-045N2A 19V2.37A 45W 5.5x1.7mm - |- | Aspire One AOA150 (A150) (ZG5) || Intel 945GSE || {{N/A}} || {{Maybe|ide mode}} || {{Yes|Intel GMA 2D and accelerated 3D with tunnel 99 and gearbox 84.1 result}} || {{Yes|HD Audio ALC6628}} || {{Yes|uhci and ehci}} || {{Yes|rtl8169 RTL8101E}} || {{Yes|AR5006}} atheros 5k || 2016 AspireOS 1.8, 2025 aros one 2.6 32bit USB || 2007 32bit 1 core - 19v barrel - |- | Aspire One AOD150 D150 (Compal LA-4781P), AOD110 D110 (ssd) || Intel 945GME || {{N/A}} || {{Maybe|ide legacy}} || {{Yes|Intel GMA 950 (2D)}} || {{Yes|HDAudio with alc272}} || {{Yes|USB}} || {{No|Atheros AR8121 AR8113 AR8114 l1e}} || {{Maybe|AR5007EG AR5BXB63 works but Broadcom BCM4312 has no support}} || 2010 Icaros Desktop 1.3, 2024 Aros one 32bit USB || 2008 32bit 1 core - 19v barrel - |- | Aspire One (ZG8) || Intel 945G and N270 || {{N/A}} || {{Maybe|ide mode}} || {{Yes|Intel GMA 2D and accelerated 3D}} || {{maybe|HD Audio }} || {{Yes|uhci and ehci}} || {{No|Broadcom }} || {{no|Intel}} || 2014 AspireOS 1.8 || 2009 32bit - |- | Aspire One AOD250 D250 emachines em250 || 945GME || {{N/A}} || {{Maybe|ide legacy}} || {{Yes|Intel GMA (2D)}} || {{Yes|alc272 HD Audio}} || {{Yes}} || {{No|AR8132 (L1c)}} || {{No|BCM4312 or Atheros AR5B95}} || 2010 Icaros 1.3 || 2009 32bit 1 core - 19v barrel - |- | <!--Name-->Aspire AO532H (Compal LA-5651p) 533H Pineview || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio-->{{Yes|HD Audio playback}} || <!--USB--> || <!--Ethernet-->{{No|AR8132 (L1c)}} || <!--Wireless-->{{No|Atheros 9k}} || [http://www.amigaworld.net/modules/news/article.php?mode=flat&order=0&item_id=5968 Tested AspireOS June 2011] || <!--Comments--> |- | <!--Name-->emachines eM350 NAV51 || <!--Chipset--> with N450 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Intel 3150 || <!--Audio-->HD Audio with codec || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro-->Icaros 2.2 || <!--Comments-->Single core 64bit - 160GB HDD 1GB RAM 10.1" LED backlit screen and Webcam - 3 cell li-ion battery for 3 hours usage - |- | <!--Name-->emachines eM355 || <!--Chipset--> with N455 || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments-->64bit support possible - |- | <!--Name-->Aspire One 533 || <!--Chipset-->N455 with NM10 || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes}} || <!--Gfx-->{{Yes|2D 0x8086 0xa011}} || <!--Audio-->{{Yes| ALC272 codec ich7}} || <!--USB-->{{Yes}} || <!--Ethernet-->{{No|Atheros AR8152 v1.1 1c}} || <!--Wireless-->{{No|Broadcom 4313}} || <!--Test Distro-->2016 Icaros 2.1 and AROS One 2.3 || <!--Comments-->2011 64bit - f2 setup - 10.1inch 1024 x 768 - |- | Aspire One AOD255 AOD255e AOD260 AOHAPPY (Compal LA-6221P) || N570 and Nm10 || {{N/A}} || {{Maybe|SATA}} || {{Maybe|Intel GMA 3150}} || Audio || USB || {{No|Atheros AR8152 V1.1 (1lc)}} || {{No|Broadcom BCM4313}} || || a little support |- | Aspire One 522 AO522 (Compal LA-7072p) || 1GHz dual C-50 C50 or C-60 C60 + Hudson M1 || {{N/A}} || SATA || AMD 6250 (ATI 9804) or 6290 || ATI SB CX20584 HD Audio || USB || Atheros 8152 v2.0 l1c || {{No|Broadcom BCM4313 or Atheros ath9k}} || || |- | <!--Name-->AAOD270 Aspire One D270 || <!--Chipset-->N2600 Cedarview || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes| }} || <!--Gfx-->{{Yes|2D on Intel GMA 3650}} || <!--Audio-->{{Yes| }} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{Yes|RTL 8169 RTL8101E}} || <!--Wireless-->{{No|Broadcom BCM4313 but swap for Atheros 5k}} || <!--Test Distro--> || <!--Opinion-->2011 64bit atom - ddr2 so-dimm 2gb max - |- | <!--Name-->Aspire One AO532G (Compal LA-6091p) || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Aspire One D257 (Quanta ZE6) || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Acer Aspire One 722 AO722 P1VE6 || <!--Chipset-->AMD C-60 C60 with SB900 || <!--IDE-->{{N/A| }} || <!--SATA--> || <!--Gfx-->{{Maybe| use VESA Ati 6290}} || <!--Audio-->{{Yes|HD Audio with codec but no Wrestler HDMI output}} || <!--USB--> || <!--Ethernet-->{{No|Qualcomm Atheros AR8152 v2.0}} || <!--Wireless-->{{unk|Atheros AR9485}} || <!--Test Distro-->2017 Icaros 2.1.2 || <!--Comments--> |- | <!--Name-->Aspire One AO721 (Wistron SJV10-NL) || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->AO751 AO751H (Quanta ZA3) || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Packard Bell Dot .S || <!--Chipset-->N280 + || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|legacy}} || <!--Gfx-->{{yes|Intel GMA950 (2D)}}|| <!--Audio-->HD Audio ALC272X || <!--USB--> USB2.0 || <!--Ethernet--> {{no|Atheros l1e}} || <!--Wireless-->{{no|Atheros 9k}} || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Packard Bell Dot .SE || <!--Chipset-->N450 + || <!--IDE-->{{N/A}} || <!--SATA-->legacy || <!--Gfx-->Intel GMA950 (2D) || <!--Audio-->HD Audio ALC|| <!--USB-->USB2.0 || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Packard Bell Dot .S2 NAV50 || <!--Chipset-->N455 NM10 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Intel X3150 || <!--Audio-->HD Audio ALC269 || <!--USB--> || <!--Ethernet-->Atheros || <!--Wireless-->Atheros || <!--Test Distro--> || <!--Comments--> |- | <!--Name-->Packard Bell Dot M/A || <!--Chipset-->1.2GHz Athlon L110 + RS690E || <!--IDE-->{{N/A}} || <!--SATA-->legacy mode? || <!--Gfx-->AMD ATI Radeon Xpress X1270 (VESA only) || <!--Audio-->HD Audio ATI SBx00 || <!--USB--> || <!--Ethernet-->Realtek RTL8101E RTL8102E rtl8169 || <!--Wireless-->{{unk|Atheros AR9285}} || <!--Test Distro--> || <!--Opinion--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====Asus Netbooks==== {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | [http://wiki.debian.org/DebianEeePC/Models eeePC] 700 701 2G 4G 8G Surf || Intel 910GML + ICH7 || {{N/A}} || {{Maybe|IDE legacy mode}} || {{Yes|Intel GMA 900 2D and 3D tunnel 68 gearbox 43 on 701 800x480}} || {{Yes|ALC662 HD Audio}} || {{Yes|UHCI and EHCI}} || {{No|Atheros L2}} || {{Yes|Atheros 5k AR5007EG (AR2425 works}} || 2016 Icaros 2.1.1, 2.1.2, Aros One 2.5 32bit USB, || 2007 32bit - power supplies fail due to bad caps issue 9.5V 2.5A 24W Charger AD59930 4.8*1.7MM - |- | [http://wiki.debian.org/DebianEeePC/Models eeePC] 701SD || Intel 910GML + ICH7 || {{N/A}} || {{Maybe|IDE legacy mode}} || {{Maybe|Intel GMA 900 (2D)}} || {{Yes|ALC662 HD Audio}} || {{Yes|UHCI and EHCI}} || {{No|Atheros L2}} || {{No|RTL8187SE swap with Atheros 5k}} || 2014 AspireOS 1.7, || 2007 32bit - boot issues but does boot with ATA=32bit,nopoll or ATA=nodma,nopoll |- | [http://wiki.debian.org/DebianEeePC/Models eeePC] 900 || Intel 910GML + ICH7 || {{N/A}} || {{Maybe|IDE legacy mode}} || {{Maybe|Intel GMA 900 (2D, 3D in some models)}} || {{Yes|ALC662 HD Audio}} || {{Yes|UHCI and EHCI}} || {{No|Atheros L2}} || {{Maybe|depends on chipset AR5007EG (AR2425) works but not RaLink}} || 2014 AspireOS 1.7, || 2008 32bit - boot issues but does boot with ATA=32bit,nopoll or ATA=nodma,nopoll. 900's may need BIOS upgrade to boot usb optical drives. 3D available in some model revisions - AD59230 9.5v 2.31a psu - |- | eeePC 900A || 945GSE || {{N/A}} || {{Maybe|IDE legacy mode}} || {{Yes|Intel GMA 950 (3D)}} || {{Yes|HD Audio ALC269}} || {{Yes|USB2.0}} || {{No|Atheros L1e [1969 1026]}} || {{Yes|Atheros 5k AR242x}} || Nightly Build 2012, 2023 Aros One 32bit 2.4 || 2009 32bit |- | eeePC 901 1000 || 945GM || {{N/A}} || {{Maybe|IDE legacy mode}} || {{yes|Intel GMA 950 (2D)}} || {{Yes|ALC269 HD Audio}} || {{Yes|USB}} || {{No|Atheros L1E (AR8121 AR8113 AR8114)}} || {{No|RaLink Device 2860 swap with Atheros 5k}} || 2011 Icaros 1.4, || 2009 32bit - 12v 3a psu - |- | eeePC Seashell 1000HA 1000HE 1008 1005HA || N280 + Intel GMA950 || {{N/A}} || SATA || {{Yes|Intel GMA (2D)}} || {{Yes|HD Audio ALC269}} || {{Yes|USB}} || {{Maybe|Realtek but not Atheros AR8132 (L1c)}} || {{unk|Atheros AR9285}} || 2014 Aspire OS 1.6, || 2010 32bit - 12v 3a psu - |- | <!--Name-->eeePC 1001ha || <!--Chipset-->GMA945 || <!--IDE-->{{N/A}} || <!--SATA-->legacy || <!--Gfx-->Intel GMA 950 (2D) || <!--Audio-->ALC269 HD Audio || <!--USB--> || <!--Ethernet-->{{No|Attansic Atheros AR8132 l1c}} || <!--Wireless-->{{No|RaLink RT3090 swap with Atheros 5k}} || <!--Test Distro-->untested || <!--Opinion-->2010 32bit |- | eeePC 1001P T101MT 1005PX 1005PE 1015PE Pineview 1001PXD || NM10 and N450 N455 CPU || {{N/A}} || {{Maybe|IDE mode}} || {{Yes|Intel GMA 3150 (2D)}} || {{Yes|HD Audio}} || {{Yes|USB 2.0}} || {{No|Atheros AR8132 (l1c)}} || {{unk|Atheros AR928x 802.11n}} || 2010 Icaros 1.3.3, || 2011 64bit - 19V 2.1A 2.3x0.7 - |- | EeePC 1015B 1215B || single C-30 C30 or dual C-50 C50 + Hudson M1 || {{N/A}} || SATA || {{partial|AMD 6250 (VESA only)}} || ATI SBx00 HD Audio || USB || {{No|AR8152 v2.0 atl1c}} || {{No|Broadcom BCM4313 [14e4 4727]}} || untested recently || 2011 64bit does not support AVX or SSE 4.1 - |- | <!--Name-->Flare X101CH Cedarview || <!--Chipset-->N2600 + N10 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Intel GMA 6300 || <!--Audio--> || <!--USB--> || <!--Ethernet-->{{No|Atheros l1c 2.0}} || <!--Wireless-->{{unk|Atheros 9k AR9285}} || <!--Test Distro--> || <!--Comments-->2012 64bit |- | <!--Name-->Flare 1025CE 1225CE || <!--Chipset-->N2800 + N10 || <!--IDE--> || <!--SATA--> || <!--Gfx-->{{dunno|Intel GMA 3600}} || <!--Audio--> || <!--USB--> || <!--Ethernet-->{{No|Atheros l1c 2.0}} || <!--Wireless-->{{unk|Atheros 9k AR9285}} || <!--Test Distro--> || <!--Comments-->2012 64bit |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====Dell Netbooks==== {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | Inspiron 910 Mini 9 PP39S Vostro A90 || GMA945 || {{Maybe|STEC 8G 16G 32G IDE PATA Parallel ATA miniPCIE SSD 50MM / 70MM very slow}} || {{N/A| }} || {{yes|Intel GMA 2D and 3D opengl1}} || {{yes|ALC268 HD Audio}} || {{yes|USB2 boots and works}} || {{yes|rtl8169 Realtek RTL8102E}} || {{no|Broadcom BCM4310 and 4312 swap with atheros 5k bx32}} || ICAROS 1.3 but Icaros 2.3 (pci issues), AROS One 2.6 and Tiny AROS (digiclock startup) mouse cursor vanishes || 2008 32bit - 9inch 1024x600 screen - 1 ddr2 sodimm slot max 2gig - 19v 1.58a - 0 boot disk select - cr2032 battery under laptop base cover, while mem 2GB max under base flap - |- | <!--Name-->Inspiron Mini 10 1010 PP19S || <!--Chipset-->Atom Z520 Z530 Intel US15W Poulsbo || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{maybe|Intel GMA 500 (VESA only)}} || <!--Audio-->{{Maybe|HD Audio ALC269 codec}} || <!--USB--> || <!--Ethernet-->{{yes|rtl8169 RTL8102E}} || <!--Wireless-->{{no|Intel or BCM4312}} || <!--Test Distro-->untested || <!--Comments-->2008 32bit - 10.10 inch 16:9, 1366 x 768 glossy - 28whr or 56wHr battery options - |- | [https://wiki.ubuntu.com/HardwareSupport/Machines/Netbooks#Dell%20Mini%2010v%20(Inspiron%201011) Mini 10v 1011] [http://wiki.debian.org/InstallingDebianOn/Dell/InspironMini10v]|| Intel 950 || {{N/A}} || {{maybe|ide legacy mode}} || {{yes|Intel GMA (2D)}} || {{maybe|HDAudio}} || {{yes|USB}} || {{yes|RTL8102E 8103E}} || {{no|Dell 1397 Wireless}} || untested || 2008 32bit - |- | <!--Name-->Inspiron Mini 1018 || <!--Chipset-->Intel Atom N455 || <!--IDE-->{{N/A}} || <!--SATA-->{{partial|IDE mode }} || <!--Gfx-->{{yes|Intel GMA 3150 (2D, no VGA output)}} || <!--Audio-->{{partial|HD Audio head phones only - speaker and micro phone do not work}} || <!--USB-->{{yes|USB 2.0}} || <!--Ethernet-->{{yes|RTL8169}} || <!--Wireless-->{{unk|RTL8188CE or AR928X}} || <!--Test Distro-->2011 Icaros 1.5.1, || <!--Comments-->2009 64bit - 1 DDR3 max 2gb - |- | Latitude 2100 || Intel Atom N270 N280 1.60Ghz GMA 945GME || {{N/A}} || {{Yes|set to IDE in bios as ahci not working || {{yes|Intel GMA 950 (2D and 3D with tunnel 98 and gearbox 84)}} || {{yes|HD Audio with ALC272 codec}} || {{yes|USB2.0}} || {{No|Broadcom BCM5764M}} || {{No|Intel 5100 or BCM4322 DW 1510 half height mini pcie use small Atheros 5k}} || <!--Test Distro-->2016 AspireOS 1.8, Icaros 2.1.1 and AROS One USB 2.4 || 2009 32bit ddr2 sodimm max 2G - [https://sites.google.com/site/arosaspireone/about-aspire-one Webcam and card reader not working] lcd cable over hinge an issue - f12 bios and boot - |- | <!--Name-->Latitude 2110 2120 || <!--Chipset-->N470 1.83Ghz, N455 1.6Ghz, N550 1.5Ghz || <!--IDE-->{{N/A}} || <!--SATA-->{{Yes|ATA mode in bios not ahci}} || <!--Gfx-->{{Yes|Intel 3150 2D only}} || <!--Audio-->{{Maybe|HD Audio with ALC269 codec}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No| }} || <!--Wireless-->{{No| swap for Atheros}} || <!--Test Distro-->2014 Icaros 2.3, || <!--Comments-->2011 64bit does not support AVX or SSE 4.1 - ddr2 sodimm |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====HP Compaq Netbooks==== {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | HP Mini 2133 || VIA C7-M P4M900 / 8237 VX700 || {{N/A}} || {{maybe|SATA}} || {{maybe|VIA Chrome 9 HC (VESA only)}} || {{no|VT1708/A HD Audio}} || USB || {{no|Broadcom Corp NetXtreme BCM5788}} || {{no|Broadcom Corp BCM4312}} || untested || 2008 32bit - |- | HP mini 1000 Mi 2140 ks145ut || N270 + 945GM || {{N/A}} || SATA || <!--Gfx-->{{Yes|Intel GMA 950 (2D and opengl1 3d)}} || <!--Audio-->{{Yes|HD Audio (playback tested)}} || <!--USB-->{{Yes| }} || {{no|Marvell 88E8040}} || {{no|Broadcom Corp BCM4312 hard blocked}} || untested || 2009 32Bit - unable to change wifi card |- | <!--Name-->HP Mini 700 702 || <!--Chipset-->N270 + 945GSE || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{Yes|Intel GMA 950 (2D)}} || <!--Audio-->{{Yes|HD Audio IDT 92HD75B (111d:7608, only playback tested)}} || <!--USB-->{{Yes| }} || <!--Ethernet--> || <!--Wireless-->{{No|Broadcom hard locked}} || <!--Test Distro-->untested || <!--Comments-->2009 32bit - |- | Compaq HP Mini 110 110-3112sa || 945GM Express || {{N/A}} || {{maybe|IDE mode}} || {{yes|Intel GMA 950 (2D)}} || {{yes|HD Audio IDT STAC 92xx}} || {{yes|USB 2.0}} || {{no|Atheros}} || {{no|Broadcom hard blocked Fn+F12}} || untested || 2009 32bit - unable to change wifi |- | HP Mini 200 210 || 945GM NM10 Express || {{N/A}} || SATA || Intel GMA 950 || {{Maybe|HDAudio with }} || USB || RTL8101E RTL8102E || {{no|Broadcom BCM4312 hard locked}} || untested || 2009 32bit - |- | HP Mini 311 DM1 (Quanta FP7) || N280 + ION LE || {{N/A}} || SATA || nVidia Geforce ION || {{maybe|HDAudio with }} || USB || eth || {{No|hard locked}} || untested || 2009 64bit does not support AVX or SSE 4.1 - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |} ====Lenovo Netbooks==== {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | IdeaPad S9 S9e(3G) S10 S10e(3G) || 945GME || {{N/A}} || {{maybe|SATA}} || {{yes|Intel GMA (2D)}} || {{maybe|ALC269 or SigmaTel HD Audio}} || {{yes|USB}} || {{no|Broadcom NetLink BCM5906M}} || {{no|Broadcom BCM4312 hard blocked}} || untested || 2009 32bit - |- | IdeaPad S12 || Intel Atom N270 + Nvidia ION LE MCP79 || {{N/A}} || SATA || nVidia C79 ION [Quadro FX 470M] || {{maybe|ALC269 HD Audio}} || USB || {{no|Broadcom}} || {{no|Intel locked down}} || 2012 Icaros 2.0, || 2009 32bit - does not boot - cause unknown |- | S10-2 || 945GME and N280 CPU || {{N/A}} || SATA || {{yes|Intel GMA (2D)}} || {{maybe|ALC269 HD Audio}} || {{yes}} || {{yes|rtl8169}} || {{no|Broadcom BCM4312 hard blocked}} || 2011 Icaros 1.3, || 2009 32bit - |- | S10-3 || NM410 and N450 CPU || {{N/A}} || SATA || {{yes|Intel GMA 3150 (2D)}} || {{maybe|HD Audio ALC269}} || {{yes|USB}} || {{yes|rtl8169}} || {{no|Atheros 9285 or Broadcom BCM4312 hard blocked}} || 2011 Icaros 1.3, || 2009 32bit - |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====Samsung Netbooks==== [[#top|...to the top]] {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | [http://www.amigaworld.net/modules/newbb/viewtopic.php?post_id=616910&topic_id=33755&forum=28#616910 NC10] || 945GME || {{N/A}} || {{maybe|SATA}} || {{yes|Intel GMA 950 (2D)}} || {{partial|SigmaTel HD Audio (playback only)}} || {{yes|USB}} || {{maybe|rtl8169 works but not Marvell 88E8040 sky2}} || {{yes|AR5007EG}} || 2011 Icaros 1.4, || 2009 32bit - Nano silver on keyboard and lcd ribbon cable over hinge issues |- | [http://www.sammywiki.com/wiki/Samsung_NC20 NC20] || VIA VX800 || {{N/A}} || SATA || {{maybe|VIA Chrome9 (VESA only)}} || ALC272 GR (VT1708A) HD Audio || {{yes|USB}} || {{no|Marvell 88E8040}} || {{yes|Atheros AR5001}} || untested || 2009 32bit - |- | NP-N110 NP-N120 || 945GSE || {{N/A}} || SATA || {{yes|Intel GMA 950 (2D)}} || {{yes|ALC272 HD Audio or ALC6628}} || {{yes|USB}} || {{no|Marvell 88E8040}} || {{no|Realtek rtl8187}} || untested || 2009 32bit - Namuga 1.3M Webcam none |- | NP-N130 || 945GSE || {{N/A}} || {{yes|SATA in IDE mode}} || {{yes|Intel GMA 2D and opengl 1.x 99.5 tunnel 99 gearbox}} || {{yes|Intel HD with ALC272 ALC269 codec playback}} || {{yes|USB}} || {{yes|RTL 8169.device - 8101e 8102e}} || {{no|rtl 8192se rtl8187 too small an area to swap for atheros 5k}} || untested || 2009 32bit - 10.x inch 1024 x 600 - Namuga 1.3M Webcam - front slide power on and f2 setup bios - keyboard 17.7mm Pitch is made with Silver Nano (Anti-Bacterial) tech - small touchpad - 1 ddr2 2rx16 sodimm slot 2G max - 44Wh |- | <!--Name-->Go NP-N310 || <!--Chipset-->N270 + 945GME || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|IDE legacy mode}} || <!--Gfx-->{{yes|Intel GMA 950 (2D)}} || <!--Audio-->{{yes|HD Audio ALC6628}} || <!--USB-->{{yes}} || <!--Ethernet-->{{yes|rtl8169}} || <!--Wireless-->{{yes|Atheros5k}} || <!--Test Distro-->untested || <!--Opinion-->2010 32bit - N280 version changed specs |- | NP-N510 || N270 euro N280 uk + ION MCP79 || {{N/A}} || SATA || nVidia C79 ION [Quadro FX 470M] || HD Audio || USB || Marvell 88E8040 || Realtek 8192E || untested || 2010 32bit - does not boot - cause unknown |- | NP-N145 Plus || n450 + NM10 || {{N/A}} || {{maybe|IDE legacy mode}} || {{yes|Intel GMA 3150 (2D, no VGA output)}} || {{yes|Realtek HD Audio}} || {{yes|USB2.0}} || {{no|Marvell 88E8040}} || {{unk|Atheros AR9285}} || untested || 2010 some support but often the trackpad does not work |- | <!--Name-->NC110 Axx || <!--Chipset-->NM10 || <!--IDE-->{{N/A}} || <!--SATA-->Sata || <!--Gfx--> || <!--Audio-->HDAudio with ALC269 codec A9M22Q2 || <!--USB--> || <!--Ethernet-->{{Maybe|Rtl8169}} || <!--Wireless-->{{No|Broadcom BCM4313 or Atheros}} || <!--Test Distro-->untested || <!--Comments-->2011 64bit - |- | NF210 Pineview || n455 or n550 + N10 || {{N/A}} || {{maybe|SATA}} || {{maybe|Intel GMA 3150 (needs retesting, VESA works)}} || {{yes|HD Audio}} || {{yes|USB}} || {{no|Marvell 88E8040}} || Wireless || untested || 2011 64bit - some support |- | <!--Name-->NS310 NP-NS310-A03UK || <!--Chipset-->N570 with NM10 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->{{Maybe|use Vesa 2d }} || <!--Audio-->{{yes| ich7}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{yes|rtl8169 realtek 810xe }} || <!--Wireless-->{{no|bcm4313 }} || <!--Test Distro-->2022 AROS One 2.3, || <!--Comments-->2011 64bit Atom N570 or 1.5 GHz Intel Atom N550 dual core processor, 1 DDR3 sodimm slot memory, a 250GB hard drive, and a 10.1 inch, 1024 x 600 pixel 10.1" W7St - 2300mAh short life - |- | <!--Name-->[https://wiki.archlinux.org/index.php/Samsung_N150 N150] NB30 || <!--Chipset-->MN10 || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Yes|Intel GMA 3150 (2D)}} || <!--Audio-->{{No| }} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|Marvell 88E8040}} || <!--Wireless-->{{unk|Atheros AR9285 or Realtek 8192E}} || <!--Test Distro-->untested || <!--Comments-->2011 a little support |- | <!--Name-->[http://www.kruedewagen.de/wiki/index.php/Samsung_N220 N210 N220] N230 || <!--Chipset-->N450 + NM10 || <!--IDE-->{{N/A}} || <!--SATA-->{{Maybe| }} || <!--Gfx-->{{Yes|Intel GMA 3150 (2D)}} || <!--Audio-->HD Audio ALC269 || <!--USB-->{{Yes| }} || <!--Ethernet-->{{No|Marvell}} || <!--Wireless-->{{unk|Atheros AR9285}} || <!--Test Distro-->untested || <!--Comments-->2011 64bit no sse4.1 or avx - |- | <!--Name-->NC110 Pxx Cedarview || <!--Chipset--> || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{dunno|Intel GMA 3600}} || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless-->{{No|Intel 6000g}} || <!--Test Distro-->untested || <!--Comments-->2012 64bit |- |} ====Toshiba Netbooks==== [[#top|...to the top]] {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="10%" |Wireless ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->NB100 || <!--Chipset-->945GM || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|legacy}} || <!--Gfx-->{{yes|Intel GMA (2D)}} || <!--Audio-->{{yes|ALC262 HD Audio}} || <!--USB--> || <!--Ethernet-->{{yes|rtl8169}} || <!--Wireless-->{{yes|AR5001}} || <!--Test Distro-->untested || <!--Comments-->2009 32bit - |- | <!--Name-->Mini NB200 series NB205 || <!--Chipset-->N280 + GSE945 || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|IDE legacy mode}}|| <!--Gfx-->{{yes|Intel GMA (2D)}} || <!--Audio-->ALC272 HD Audio || <!--USB-->{{yes}} || <!--Ethernet-->{{yes|RTL8169}} || <!--Wireless-->{{maybe|AR9285}} || <!--Test Distro-->untested || <!--Opinion-->2009 32bit - |- | <!--Name-->Mini 300 series NB305 || <!--Chipset-->N455 with NM10 || <!--IDE-->{{N/A}} || <!--SATA-->legacy || <!--Gfx-->Intel GMA 3150 (2D) || <!--Audio-->ALC272 HD Audio || <!--USB--> || <!--Ethernet-->{{maybe|RTL8101E RTL8102E}} || <!--Wireless-->{{maybe|AR9285}} || <!--Test Distro-->untested || <!--Opinion-->2010 64bit - |- | <!--Name-->Mini 500 series NB505 NB520 NB550-10v || <!--Chipset--> || <!--IDE-->{{N/A}} || <!--SATA-->legacy || <!--Gfx-->Intel GMA 3150 (2D) || <!--Audio-->HD Audio || <!--USB--> || <!--Ethernet-->{{maybe|RTL8101E RTL8102E}} || <!--Wireless-->{{no|Realtek 8176 RTL 8188CE}} || <!--Test Distro-->untested || <!--Opinion-->2011 64bit - |- | [http://www.notebookcheck.net/Review-Toshiba-NB550D-AMD-Fusion-Netbook.46551.0.html Mini NB550D 10G] 108 (c30) 109 (c50) || C-50 + M1 || {{N/A}} || SATA || AMD 6250 (VESA only) || HD Audio || USB || {{maybe|rtl8169 Realtek 8111e}} || {{maybe|Atheros 9k}} || untested || 2011 64bit Realtek SD card reader |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ====Misc Netbooks==== {| class="wikitable sortable" width="100%" ! width="15%" |Name ! width="5%" |Chipset ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="5%" |Ethernet ! width="5%" |Wireless ! width="5%" |Test Distro ! width="30%" |Comments |- | Cammy's A1600 || GME945 || {{N/A}} || {{maybe}} || {{yes|Intel GMA950 (2D)}} || {{yes|HD Audio playback}} || {{yes}} || {{no|JMC 250/260}} || Wireless || 2010 Icaros 1.2.4, || 2009 32bit - |- | <!--Name-->Fujitsu Siemens Amilo Mini Ui 3520 || <!--Chipset-->Intel 945 || <!--ACPI--> || <!--SATA-->{{yes}} || <!--Gfx-->{{yes|Intel GMA (2D)}} || <!--Audio-->ALC269 HD Audio || <!--USB-->{{yes}} || <!--Ethernet-->{{yes|rtl8169}} || <!--Wireless-->{{yes|AR5001}} || <!--Test Distro-->untested || <!--Comments-->2009 32bit - |- | Guillemot Hercules eCafe EC-900 H60G-IA], Mitac MiStation and Pioneer Computers Dreambook Light U11 IL1 || Intel 945GME || {{N/A}} || {{maybe}} || {{yes|Intel GMA950 (2D)}} || {{Yes|HD Audio (playback only)}} || {{yes|uhci and ehci}} || {{yes|rtl8169}} || {{no|RAlink RT2860}} || untested || 2009 32bit - |- | <!--Name-->Hannspree Hannsnote SN10E2 24 48 || <!--Chipset-->N450 + NM10 || <!--IDE-->{{N/A}} || <!--SATA-->IDE legacy mode || <!--Gfx-->Pineview Intel (2D) || <!--Audio-->ALC HD Audio || <!--USB-->USB2.0 || <!--Ethernet-->Atheros l1c || <!--Wireless-->{{unk|Atheros AR9285}} || <!--Test Distro-->untested || <!--Opinion-->2009 32bit - |- | MSI Wind U90/U100 || GME945 || {{N/A}} || {{maybe}} || {{yes|Intel GMA 950 (2D)}} || {{partial|HD Audio ALC888s (playback only?)}} || {{yes|uhci 1.1 and ehci 2.0}} || {{yes|rtl8169}} || {{no|RaLink RT2860 RT2700E or rtl8187se (u100x)}} || 2011 Icaros 1.3, || 2009 32bit - |- | Advent 4211 || 945GSE || {{N/A}} || {{maybe|IDE legacy mode}} || Intel GMA950 (2D) || ALC HD Audio || USB || rtl8169 || {{no|Intel 3945 ABG}} || untested || 2009 32bit - MSI U100 clone |- | <!--Name-->Hannspree Hannsnote SN10E1 || <!--Chipset-->N270 + GMA945 || <!--IDE-->{{N/A}} || <!--SATA-->{{maybe|IDE legacy mode}} || <!--Gfx-->{{yes|Intel GMA 950 (2D)}} || <!--Audio-->ALC HD Audio || <!--USB-->USB2.0 || <!--Ethernet-->{{yes|Realtek RTL8101E RTL8102E RTL8169}} || <!--Wireless-->{{no|RaLink RT2860}} || <!--Test Distro-->untested || <!--Comments-->2009 32bit MSI U100 clone |- | <!--Name--> Vaio VGN-P11Z | <!--Chipset--> | <!--IDE--> {{dunno}} | <!--SATA--> {{N/A}} | <!--Gfx--> {{Partial|Intel (VESA only)}} | <!--Audio--> {{no|HD Audio}} | <!--USB--> {{yes|USB 2.0}} | <!--Ethernet--> {{no|Marvell}} | <!--Wireless--> {{unk|Atheros AR928X}} | <!--Test Distro-->2012 Icaros 2.0.3 | <!--Comments-->2008 32bit Rarely boots! |- | <!--Name-->Sony VPC-W11S1E | <!--Chipset-->N280 with 945GSE | <!--IDE-->{{N/A}} | <!--SATA-->{{Yes| }} | <!--Gfx-->{{yes|Intel GMA950 - hdmi}} | <!--Audio-->HD Audio with realtek codec | <!--USB-->3 USB2 | <!--Ethernet-->{{No|Atheros AR8132}} | <!--Wireless-->{{unk|Atheros AR9285}} | <!--Test Distro-->untested | <!--Comments-->2009 32bit - 10.1" 1366 x 768 glossy - 3hr battery life - |- | <!--Name-->Archos 10 Netbook || <!--Chipset-->Atom with ICH7 NM10 945GSE || <!--IDE-->{{No }} || <!--SATA--> || <!--Gfx-->GMA 950 || <!--Audio-->HD Audio with ALC662 codec || <!--USB--> || <!--Ethernet-->Realtek 8139 || <!--Wireless--> || <!--Test Distro-->untested || <!--Comments-->2008 32bit - |- | <!--Name-->MSI Wind U135 DX MS-N014 || <!--Chipset-->Intel N455 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{Yes|2D only accelerated}} || <!--Audio-->{{No|ALC662 rev 1}} || <!--USB-->{{Yes| }} || <!--Ethernet-->{{Maybe|RTL}} || <!--Wireless-->{{No|Atheros AR 9K}} || <!--Test Distro-->2015 Icaros 2.1, || <!--Comments-->2009 32bit - needs noacpi notls added to grub boot line to start up |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--Chipset--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Wireless--> || <!--Test Distro--> || <!--Comments--> |- |} ===Desktop Systems=== [[#top|...to the top]] {| class="wikitable sortable" width="100%" | <!--OK-->{{Yes|'''Works well'''}} || <!--May work-->{{Maybe|'''Works a little'''}} || <!--Not working-->{{No|'''Does not work'''}} || <!--Not applicable-->{{N/A|'''N/A not applicable'''}} |- |} ====Acer==== {| class="wikitable sortable" width="100%" ! width="15%" |Name ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Integrated Gfx ! width="10%" |Audio ! width="10%" |USB ! width="10%" |Ethernet ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->[https://www.acer.com/ac/en/ID/content/support-product/486;-; Veriton X270 VTX270] Intel Core 2 Duo ED7400C or Pentium dual-core UD7600C with 630i | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->{{Maybe|Vesa 2d Nvidia 7100 VGA and HDMI connections}} | <!--Audio-->{{Maybe| with realtek codec}} | <!--USB-->{{Maybe|4 rear and 5 front}} | <!--Ethernet-->{{Maybe| nForce}} | <!--Test Distro-->Icaros 2.3 dvd | <!--Comments-->2009 64bit capable but would not fully boot, DHCP address timeout too short and failed often. Put in a third party NIC, worked - 1 PCI Express x16 slot and a free PCI x1 slot - internal thin long psu with 12pin - |- | <!--Name--> Imedia S1710 with Intel Dual Core E5200 | <!--IDE--> {{Yes|SATA/AHCI}} | <!--SATA--> {{Maybe|Native IDE}} | <!--Gfx--> {{Yes|Nvidia nForce 7100}} | <!--Audio--> {{Yes|Nvidia MCP73}} | <!--USB--> {{Yes|USB 2.0}} | <!--Ethernet--> {{No|NVIDIA MCP73 Ethernet}} | <!--Test Distro--> Nightly Build 14-09-2023, AROS One 2.3 | <!--Comments--> 2009 64-bit - Boot over USB not working on front - 2 DDR2 dual channel max 8GB - DEL for entering Bios - F12 for boot menu - Bus weird, could be reason for Ethernet issue |- | <!--Name-->Acer Revo AR1600, R1600 AR3600, R3600, Packard Bell IMAX Mini N3600, ACER Veriton N260G N270G slim nettop subcompact | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe|Native IDE mode, '''when it works''' boots}} | <!--Gfx-->{{Maybe|Nvidia ION GeForce 9300M - nouveau 3d - '''when it boots''' 400 fps in shell'ed gearbox, 278 in tunnel, 42 in teapot}} | <!--Audio-->{{Maybe|HD Audio with alc662 codec but nothing from HDMI audio}} | <!--USB-->{{Maybe|Nvidia USB boot usb2 stick issues and slower with usb3 drives}} | <!--Ethernet-->{{No|MCP79 nForce}} | <!--Test Distro-->ArosOne 32bit very often boot stuck around ehciInit, 64bit ... | <!--Comments-->2009 64bit does not support AVX or SSE 4.1 Intel Atom 230 N280 - 20cm/8" high 1 ltr noisy fan - DEL setup F12 boot options - 2 ddr2 sodimm slots max 4GB - 19v special barrel size 5.5mm/1.7mm psu - 2 ddr2 sodimm slots max 4GB - atheros 5k AR5BXB63 wifi - 3 wire CMOS coin battery - |- | <!--Name-->Revo AR3610 R3610 3610 Atom 330 nettop subcompact dual core | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe|Native IDE mode, '''when it works''' boots}} | <!--Gfx-->{{Maybe|Nvidia ION GeForce 9400M LE MCP79MX 0x10de 0x087d - nouveau 3d - '''when it boots''' 400 fps in shell'ed gearbox, 278 in tunnel, 42 in teapot}} | <!--Audio-->{{Yes|HD Audio with Realtek alc662 rev1 alc662-hd later ALC885 codec but nothing from HDMI audio}} | <!--USB-->{{Maybe|Nvidia USB with 1% chance slow boot with usb2 sticks, more issues with usb3 drives}} | <!--Ethernet-->{{No|RTL8211CL MCP79 nForce 0x10de 0x0ab0}} | <!--Test Distro-->AROS One 32bit 1.5, 1.6 and 2.4 usb around ehciInit or Kernel SATA, etc try ATA=off, and 64bit 1.2 USB boot often stuck at device 0x00000000b05228c8 interrrupt by using noacpi noiopica | <!--Comments-->2010 64bit does not support AVX or SSE 4.1 20cm/8" high 1 ltr noisy fan - non usb hub keyboard - DEL bios setup, F12 BBS POPUP/drive boot - 2 ddr2 sodimm slots max 4GB - 19v barrel psu with smaller inner pin size 5.5mm/1.7mm - replace wifi RT3090 ver c (0x1814 0x3090) with atheros 5k - 3 wire CMOS coin battery - |- | <!--Name-->Revo N281G | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe| }} | <!--Gfx-->{{maybe|GMA 2d for GMA 3100}} | <!--Audio-->HD audio codec | <!--USB-->USB2 | <!--Ethernet-->Realtek | <!--Test Distro--> | <!--Comments-->2011 64bit does not support AVX and SSE 4.1 Atom D425 - 19v 65w barrel psu thinner inner pin - 2 DDR3L single channel max 4GB - replace wifi RT3090 ver d with atheros 5k mini pci-e - 1lr or 1.5 ltr dvdrw case 209.89 mm, (D) 209.89 mm, (H) 35.35 mm - del enter bios - 3 wire CMOS coin battery - |- | <!--Name-->REVO AR3700 R3700 3700 - ACER Veriton N282G *one long beep with two short - bios damaged *looping one long two short - video card fault *two short beeps - CMOS damaged *got one long and one short beep - board error? | <!--IDE-->{{N/A}} | <!--SATA-->{{Yes|IDE ready in Bios * Known issue, boot into bios, set bios to UEFI and reboot, set bios back to defaults and reboot, blank display, repair with reflash of 8 pin Winbond W25Q socketed bios chip with ch341a using P01.B0L or P01.A4 renamed amiboot.rom}} | <!--Gfx-->{{Yes|Nvidia ION2 GT218 9400M class 0x10de 0x0a64 with vga fine but hdmi fussy over cable and display port used - 32bit nouveau 2d & 3d gearbox 404 tunnel 292 teapot 48 - 64bit not detected}} | <!--Audio-->{{Yes|HDA Intel with Realtek ALC662 rev1 codec 0x10ec 0x0662, head phones only but nothing from NVidia HDMI 0x10de 0x000b}} | <!--USB-->{{Yes|Intel® NM10 Express (NM10 is basically an ICH7 with a die shrink and IDE removed) USB boots usb, installs usb, accesses ok}} | <!--Ethernet-->{{Yes|rtl8169 Realtek rtl8111g}} | <!--Test Distro-->AROS one 32bit USB 1.5 and 1.6 and ArosOne 64bit usb 1.2 | <!--Comments-->2011 Atom D525 64bit does not support AVX or SSE 4.1 - 20cm/8" high 1 ltr noisy fan - early 2 ddr2 sodimm slots but later 2 ddr3 sodimm slots 1Rx8 max 4GB - 19v barrel psu thinner pin - replace wifi RT3090 ver d with atheros 5k mini pci-e - cmos 3pin cr2032CL plastic wrapped - del bios f12 boot choice - |- | <!--Name-->Revo 70 (RL70) with or without dvdrw | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->6320 or 6310 | <!--Audio-->HD audio ALC662-VCO-GR codec | <!--USB-->USB2, 1.1 Hudson D1 | <!--Ethernet-->Realtek 8111E | <!--Test Distro--> | <!--Comments-->2012 64bit does not support AVX or SSE 4.1 AMD E450 1.65GHz - 19v 65w barrel psu thinner inner pin - 2 DDR3L single channel max 4GB - replace wifi RT3090 ver d with atheros 5k mini pci-e - 1lr or 1.5 ltr dvdrw case 209.89 mm, (D) 209.89 mm, (H) 35.35 mm - del enter bios - |- |} ====Asus==== {| class="wikitable sortable" width="100%" ! width="15%" |Name ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Integrated Gfx ! width="10%" |Audio ! width="10%" |USB ! width="10%" |Ethernet ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->EEEbox B202 | <!--IDE--> | <!--SATA--> | <!--Gfx-->Intel GMA950 | <!--Audio-->Intel Azalia HDaudio with Realtek ALC662 or ALC888-GR CODEC | <!--USB--> | <!--Ethernet-->Realtek 8111 or JM250 | <!--Test Distro-->Icaros | <!--Comments-->internal 3 types of wifi chipset not supported |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- |} ====Dell==== {| class="wikitable sortable" width="100%" ! width="10%" |Name ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Integrated Gfx ! width="10%" |Audio ! width="10%" |USB ! width="10%" |Ethernet ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name--> Precision 340 | <!--IDE--> {{yes}} | <!--SATA--> {{n/a}} | <!--Gfx--> {{n/a}} | <!--Audio--> {{yes|Intel AC97}} | <!--USB--> {{yes|USB 1.1 (UHCI)}} | <!--Ethernet--> {{yes|3Com}} | <!--Test Distro--> Nightly Build 2014 09-27 | <!--Comments--> |- | <!--Name-->Dimension 2400 | <!--IDE-->{{Yes}} | <!--SATA-->{{N/A}} | <!--Gfx-->{{Yes|Intel 82845GL Brookdale G/GE (VESA 640x480 by 16)}} | <!--Audio-->{{Unk|AC97 with ADI codec}} | <!--USB-->{{Yes|UHCI EHCI}} | <!--Ethernet-->{{Maybe|Broadcom 440x 4401}} | <!--Test Distro-->[http://eab.abime.net/showthread.php?p=832495 Icaros 1.4] | <!--Comments-->Graphics chipset is capable of higher resolution. |- | <!--Name-->Dimension 4600 | <!--IDE-->{{yes}} | <!--SATA-->{{dunno}} | <!--Gfx-->{{partial|Intel Extreme (VESA only)}} | <!--Audio-->{{yes|Intel AC97 (use rear black port)}} | <!--USB-->{{Yes|UHCI/EHCI}} | <!--Ethernet-->{{yes|Intel PRO/100}} | <!--Test Distro-->Icaros 1.5.2 | <!--Comments--> |- | <!--Name--> Optiplex 170L | <!--IDE--> {{yes|IDE}} | <!--SATA--> {{partial|IDE mode}} | <!--Gfx--> {{partial|Intel Extreme (VESA only)}} | <!--Audio--> {{no|Intel AC97}} | <!--USB--> {{yes|USB 2.0}} | <!--Ethernet--> {{yes|Intel PRO/100}} | <!--Test Distro--> {{dunno}} | <!--Comments--> |- | <!--Name--> Optiplex GX260 | <!--IDE--> {{yes|IDE}} | <!--SATA--> {{N/A}} | <!--Gfx--> {{partial|Intel Extreme (VESA only)}} | <!--Audio--> {{yes|Intel AC97}} | <!--USB--> {{yes|USB 2.0}} | <!--Ethernet--> {{no|Intel PRO/1000}} | <!--Test Distro--> Nightly Build 2014 09-27 | <!--Comments--> |- | Optiplex GX270 | {{yes|Working}} | {{partial|IDE mode}} | {{partial|Intel Extreme (VESA only)}} | {{yes|Intel AC97}} | {{yes|USB 2.0}} | {{no|Intel PRO/1000}} | Icaros 1.5.2 | <!--Comments--> |- | Optiplex GX280 | {{yes|Working}} | {{partial|IDE mode}} | {{maybe|Intel GMA (only VESA tested)}} | {{yes|Intel AC97}} | {{yes|USB 2.0}} | {{no|Broadcom}} | Nightly Build 2014 09-27 | <!--Comments--> |- | <!--Name--> Optiplex GX520 | <!--IDE--> {{yes|IDE}} | <!--SATA--> {{partial|IDE mode}} | <!--Gfx--> {{yes|Intel GMA}} | <!--Audio--> {{partial|Intel AC97 (no line-out)}} | <!--USB--> {{yes|USB 2.0}} | <!--Ethernet--> {{no|Broadcom}} | <!--Test Distro--> {{dunno}} | <!--Comments--> |- | <!--Name--> Optiplex 745 | <!--IDE--> {{N/A}} | <!--SATA--> {{partial|IDE mode}} | <!--Gfx--> {{partial|Intel GMA (VESA only)}} | <!--Audio--> {{partial|HD Audio (no volume control)}} | <!--USB--> {{partial|Only keyboard mouse (legacy mode)}} | <!--Ethernet--> {{no|Broadcom}} | <!--Test Distro--> {{dunno}} | <!--Comments--> |- | <!--Name--> Optiplex 755 | <!--IDE--> {{N/A}} | <!--SATA--> {{partial|IDE mode}} | <!--Gfx--> {{partial|Intel GMA (VESA only)}} | <!--Audio--> {{no|HD Audio}} | <!--USB--> {{yes|USB 2.0}} | <!--Ethernet--> {{no|Intel Gigabit}} | <!--Test Distro--> Icaros 1.5.1 | <!--Comments--> Around 25 second delay in booting from USB |- | <!--Name--> Optiplex 990 | <!--IDE--> {{N/A}} | <!--SATA--> {{partial|non-RAID mode}} | <!--Gfx--> {{partial|Intel HD (VESA only)}} | <!--Audio-->{{no|HD Audio}} | <!--USB--> {{yes|USB 2.0}} | <!--Ethernet--> {{no|Intel Gigabit}} | <!--Test Distro--> Nightly Build 2014 09-27 | <!--Comments--> |- | <!--Name-->Optiplex 360 | <!--IDE--> | <!--SATA--> | <!--Gfx-->{{maybe|ordinary boot gives VGA mode only - VESA}} | <!--Audio-->{{no|HD Audio (Analog Devices ID 194a)}} | <!--USB--> | <!--Ethernet-->{{no|Broadcom}} | <!--Test Distro-->Aspire Xenon | <!--Comments-->poor support |- | <!--Name-->Dell Wyse Vx0 (V90 V30), Vx0L (V10L V90L), Vx0LE (V30LE V90LE) from VIA C7 800GHz to Eden 1.2GHz | <!--IDE-->{{Maybe| }} | <!--SATA-->{{N/A| }} | <!--Gfx-->{{Maybe|Vesa 2d for S3 UniChrome Pro}} | <!--Audio-->{{No|AC97 VIA VT8233A with ?? codec}} | <!--USB-->{{yes|2 back and 1 front USB2}} | <!--Ethernet-->{{Maybe|early models work but later VT6102-3 do not}} | <!--Test Distro-->AROS One 2.2 | <!--Comments-->2006 to 2009 32bit - 12V 4A Coax 5.5mm/2.1mm - 1 sodimm DDR 333MHz SO-DIMM later DDR2 - early V90s do seem to have a reliability problem - |- | <!--Name-->[https://www.poppedinmyhead.com/2021/01/wyse-cx0-thin-client-notes-experiences.html Dell Wyse Cx0] C00LE, C10LE, C30LE, C50LE, C90LE, C90LE7, C90LEW VIA C7 Eden 1GHz | <!--IDE-->{{Maybe| }} | <!--SATA-->{{N/A| }} | <!--Gfx-->{{Maybe|Vesa 2d VX855 VX875 Chrome 9}} | <!--Audio-->{{Maybe|some VIA VT8237A VT8251 HDA with ?? codec work}} | <!--USB-->{{yes|4 outside 2 inside USB2}} | <!--Ethernet-->{{No|VT6120 VT6121 VT6122 Gigabit}} | <!--Test Distro-->Icaros 2.3 | <!--Comments-->2010 to 2013 32bit - [https://ae.amigalife.org/index.php?topic=815.0 boots and works] - 12V 2.5A Coax 5.5mm/2.1mm - 1 sodimm ddr2 - |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->Dell RxxL Rx0L Wyse thin client *R00L Cloud PC of Wyse WSM *R10L Wyse Thin OS *R50L Suse Linux Enterprise *R90L Win XP Embedded *R90LW Win Embedded Standard 2009 *R90L7 Win Embedded Standard 7 | <!--IDE-->128Mb IDE or 1GB | <!--SATA-->{{Maybe|SATA Hyperdisk}} | <!--Gfx-->AMD 690E RS690M Radeon Xpress 1200 1250 1270 | <!--Audio--> | <!--USB-->4 usb2 | <!--Ethernet-->Realtek | <!--Test Distro--> | <!--Comments-->2009 64bit AMD Sempron™ 210U SMG210UOAX3DVE 1.5GHz SB600, up to 4GB single slot 240-pin DDR2 DIMM, 19v barrel psu, DEL key bios - Late 2012 2 data sockets added but only CN18 be used with two white sockets (CN13 & CN15) can used to power the SATA device "4-pin Micro JST 1.25mm |- | <!--Name-->Optiplex 390 sff small form factor - mt mini tower desktop - dt full desktop | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->{{maybe|1 pci-e}} | <!--Audio-->{{maybe|HD Audio}} | <!--USB--> | <!--Ethernet-->{{maybe|realtek}} | <!--Test Distro-->aros one 1.6 usb | <!--Comments-->2011 64bit dual i3 2xxx - kettle iec plug psu cable - add nvidia gf218 gfx - error code 3 mobo or cpu - |- | <!--Name-->Optiplex 3010 sff small form factor | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->{{maybe|1 pci-e}} | <!--Audio-->{{maybe|HD Audio}} | <!--USB-->{{maybe| }} | <!--Ethernet-->{{no|Broadcom 57XX}} | <!--Test Distro--> | <!--Comments-->2012 64bit dual i3 3xxx - kettle iec plug psu cable - |- | <!--Name-->Optiplex 7010 sff small form factor | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->{{maybe|1 pci-e}} | <!--Audio-->{{maybe|HD Audio}} | <!--USB--> | <!--Ethernet-->{{no|Broadcom or Intel 825xx}} | <!--Test Distro--> | <!--Comments-->2012 64bit dual i3 3xxx Q77 - kettle iec plug psu cable - add pci-e ethernet and nvidia gf218 gfx - |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->Dell Wyse 5010 thin client ThinOS D class (D10D D00D D00DX, Dx0D), PCoIP (D10DP) or D90D7, 5040 *username: Administrator, admin, [blank] *password: Fireport, DellCCCvdi, rappot, Wyse#123, Administrator, administrator, r@p8p0r+ | <!--IDE-->{{N/A}} | <!--SATA-->{{Yes|IDE mode may need 30cm ext cable as small area for half-slim sata ssd - decased new ssd??}} | <!--Gfx-->{{Maybe|Vesa 2d 1400x1050 HD6250E IGP by using DVI to hdmi cable and 1 display port, no hdmi port}} | <!--Audio-->{{Maybe|HD 6.34 audio chipset detected but codec alc269 working from one case speaker - none if v6.29 used}} | <!--USB-->{{Yes|most 5010 have 4 USB 2.0 but D90Q7 has 2 USB3 instead}} | <!--Ethernet-->{{Yes|rtl8169 Realtek 8168 8169 - rev 1.?? 8111? - rev 1.91 8111E}} | <!--Test Distro-->Icaros 2.3 | <!--Comments-->2011 64bit no SSE4.1 or AVX slow AMD G-T44R 1.2Ghz later G-T48E 1.4Ghz Dual Bobcat Brazos BGA413 - Del for BIOS - p key to select boot with noacpi - single DDR3 sodimm slot max 4Gb, (8Gb hynix 2rx8 ddr3l)? (remove small board to upgrade) - passive no fan - 15cm/6" small 1ltr case and lack of expansion options - PA16 19v barrel psu Coax 5.5mm/2.5mm |- | <!--Name-->Dell Wyse 7010 DTS thin client (Z class Zx0D) *2011 Zx0 Z90D7 2GF/2GR *2013 Z10D *2014 Z50D 2GF/2GR *2012 Cisco VXC 6000 CVXC-6215-K9 white | <!--IDE-->{{N/A}} | <!--SATA-->{{Yes|Bios set Sata mode to IDE mode and grub boot add 'noacpi' for half slim sata2 ssd or/with 50cm sata ext cable}} | <!--Gfx-->{{Maybe|VESA 2d HD6310 HD6320 Terascale 2 through DVI and sometimes DP 1.1a - no hdmi port}} | <!--Audio-->{{Maybe|HD Audio 6.34 detected but ALC269VB codec works on the one case speaker only}} | <!--USB-->{{Yes|2.0 works but NEC 720200 3.0 not working}} | <!--Ethernet-->{{Yes|rtl8169 Realtek 8169 8111e 8111F}} | <!--Test Distro-->Icaros 2.3 and Aros One 32bit 1.5, 1.9 and 2.3 usb and 64bit 1.2 | <!--Comments-->2011 64bit does not support AVX or SSE 4.1 slow AMD G-t52R 1.5GHz later G-T56N 1.65 GHz Dual with A50M FCH - 20cm/8" high 1.5ltr larger fanless black plastic case with metal ventilated box inside - 2 desktop DDR3L DIMM slots max 16GB - PA-16 19v external psu Coax 5.5mm/2.5mm - 2 40cm SMA female WiFi Antenna to IPEX IPX u.fl Ufl Cable pigtail needed - does not like uefi boot devices - |- | <!--Name-->Wyse 7020 Thin Client * 2013 Quad-core AMD GX-420CA 2.0 GHz (25W) - * 2018 Zx0Q Quad-core AMD GX-415GA 1.5 GHz (15W) with Quad display 3dp and 1dvi | <!--IDE-->{{N/A}} | <!--SATA-->1 sata port | <!--Gfx-->{{Maybe|Vesa 2d only for AMD Radeon HD8400E radeonsi (dual display) or AMD Radeon HD 8330E IGP with AMD Radeon E6240 Seymour E6460 (quad display), no hdmi ports}} | <!--Audio--> | <!--USB-->4 x USB2.0 works but 2 USB3.0 | <!--Ethernet-->rtl8169 Realtek 8169 8111 | <!--Test Distro--> | <!--Comments-->2013 64bit does support AVX or SSE 4.1 quad eKabini Jaguar cores - two SODIMM sockets layered in centre of mobo DDR3L RAM - Coax 5.5mm/2.5mm ac psu 9mm plug is too short but 14mm length is fine - 15cm/6" high smaller 1ltr case and lack of expansion options - |- | <!--Name-->Dell Wyse Dx0Q (5020) D90Q8 NJXG4 AMD G-Series | <!--IDE-->{{N/A}} | <!--SATA-->1 sata port | <!--Gfx-->HD 8330E | <!--Audio--> with Realtek codec | <!--USB-->4 x USB2.0 works but 2 USB3.0 | <!--Ethernet-->rtl8169 Realtek 8169 8111 | <!--Test Distro--> | <!--Comments-->2014 64bit does support AVX or SSE 4.1 Quad-core AMD GX-415GA 1.5 GHz - 2 layered near edge of mobo 204-pin DDR3L SODIMM (bottom one tricky to insert) - 19v Coax 5.5mm/2.5mm - passive no fan - 15cm/6" high smaller 1ltr case and lack of expansion options |- | <!--Name-->Dell Wyse 5060 N07D thin client | <!--IDE-->{{N/A}} | <!--SATA-->{{Yes|IDE bios mode for sata2 port}} | <!--Gfx-->{{maybe|Vesa 2d - AMD R5E GCN2 IGP Sea Islands thru dp1 with an hdmi adapter no output thru dp2 - no hdmi dvi ports}} | <!--Audio-->{{maybe|HD Audio with Realtek ALC231 codec head phones only}} | <!--USB-->{{Maybe|4 x USB2.0 works but 2 USB3.0}} | <!--Ethernet-->{{yes|rtl8169 realtek 8169 8111h}} | <!--Test Distro-->AROS One 1.6 usb | <!--Comments-->2017 64bit does support AVX or SSE 4.1 quad GX-424CC 19.5v external psu - CN-0Y62H1 mobo with 2 layered ddr3l 16Gb max sodimm slots at edge of mobo, bottom 0 one blocking - passive no fan so quiet - 15cm/6" high smaller 1ltr case and lack of expansion options - |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- |} ====Fujitsu Siemens==== {| class="wikitable sortable" width="100%" ! width="15%" |Name ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Integrated Gfx ! width="10%" |Audio ! width="10%" |USB ! width="10%" |Ethernet ! width="15%" |Test Distro ! width="20%" |Comments |- | Scenic [http://uk.ts.fujitsu.com/rl/servicesupport/techsupport/ProfessionalPC/Scenic/ScenicE/ScenicE.htm E600] (compact desktop) | | | {{partial|VESA only}} | {{yes|AC97}} | | {{no|Intel PRO/1000}} | {{dunno}} | Nice small, silent PC with good AROS support. |- | Scenic T i845 | {{dunno}} | {{n/a}} | {{n/a}} | {{dunno|Intel AC97}} | {{dunno|UHCI}} | {{dunno|Intel PRO/100}} | Icaros 1.5.2 | AROS does not boot |- | <!--Name-->Futro S200 S210 S220 and later S300 | <!--IDE-->{{yes| compactflash CF card max ??}} | <!--SATA--> | <!--Gfx-->{{maybe|VESA Silicon Integrated Systems [SiS] 315PRO PCI/AGP }} | <!--Audio-->{{unk|AC97 via }} | <!--USB-->{{unk|via uhci and ehci}} | <!--Ethernet-->{{unk|via VT6102 [Rhine-II] (rev 74) }} | <!--Test Distro--> | <!--Comments-->2008 32bit - TR5670 Rev 1.4 mother with Transmeta TM5800 cpu - pci socket - single SODIMM socket for DDR memory PC2700S max 512MB - |- | <!--Name-->Futro S400 | <!--IDE-->{{yes| but swap with compactflash CF card already with AROS installed}} | <!--SATA--> | <!--Gfx-->{{maybe|VESA Silicon Integrated Systems [SiS] SiS741CX }} | <!--Audio-->{{unk|AC97 SiS7018}} | <!--USB-->{{unk|sis uhci and ehci}} | <!--Ethernet-->{{unk|rtl8169 }} | <!--Test Distro--> | <!--Comments-->2008 32bit - AMD Geode NX1500 1GHz gets hot - SiS 963L / SiS 741CX chipset - 12V 4.2A 4-pin (DP-003-R) psu - single SODIMM socket for DDR PC2700S max 1G - large case 246 x 48 x 177cms torx screws - pci socket - |- | <!--Name-->FUJITSU Futro S700 and S900 Thin Client (based on mini-ITX motherboard D3003-A12, D3003-C1 lesser variant of [https://www.parkytowers.me.uk/thin/Futro/s900/TechNotes_V3.1_Mini-ITX_D3003-S.pdf D3003-S]) *G-T56N 1.65GHz *G-T40N 1.00GHz *G-T44R 1.20GHz | <!--IDE-->{{N/A}} | <!--SATA-->1 sata data socket but mSata 18+8pins 1GB-16GB | <!--Gfx-->Radeon HD 6320, HD 6250, HD 6290 dvi or displayport (DP runs higher) | <!--Audio-->HDAudio | <!--USB-->{{yes|two USB2 front sockets and four on the rear}} | <!--Ethernet-->{{Maybe|Realtek}} | <!--Test Distro--> | <!--Comments-->2011 64bit AMD slow atom-like and fanless - 20V 2A psu 5.5mm/2.1mm coax (S900) - 2 DDR3L SODIMM sockets max 8GB tricky to run 1333 MHz on the Futro S900 - proprietary X2 PCI-e - 1 PCI socket but need a right-angle adaptor - |- | <!--Name-->esprimo p420 e85 desktop case | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe|IDE mode}} | <!--Gfx-->Intel 4600 or old Geforce in pci-e slot | <!--Audio-->HDAudio realtek alc671 codec | <!--USB-->USB3 | <!--Ethernet-->rtl8169 8111 | <!--Test Distro--> | <!--Comments-->2013 64bit - 2 ddr3 dimm slots - 16 pin special psu - |- | <!--Name-->esprimo E420 e85+ SFF case | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe|IDE mode}} | <!--Gfx-->Intel 4600 or low profile pci-e card | <!--Audio-->HDAudio realtek alc671 codec | <!--USB-->USB3 | <!--Ethernet-->rtl8169 8111G | <!--Test Distro--> | <!--Comments-->2013 64bit - 2 ddr3 dimm slots - 16ish pin special psu - hd under front metal bracket, take front cover off first with 3 tabs - 3 slim pci-e slots - |- | <!--Name-->Futro S520 AMD dual 1.0Ghz codenamed "Steppe Eagle" * GX-210HA @ 1.0GHz * GX-212ZC @ 1.2GHz | <!--IDE-->{{N/A}} | <!--SATA-->no sata - 4Gb or 16Gb flash memory soldered to the board | <!--Gfx-->AMD Radeon HD 8210E (GX210HA) or AMD Radeon R1E (GX212ZC) | <!--Audio-->HDAudio | <!--USB--> | <!--Ethernet-->rtl8169 rtl8111e | <!--Test Distro--> | <!--Comments-->2016 64bit does support AVX or SSE 4.1 - smaller than ITX 160mm x 160mm Fujitsu D3314-A11 - 19V 3.4A PSU standard 5.5mm/2.1mm coax plug - 1 ddr3 sodimm slot - |- | <!--Name-->Fujitsu Futro S720 ThinClient D3313-B13 D3313-F *2014 64bit AMD GX-217GA 1.65GHz VFY:S0720P8009FR VFY:S0720P8008DE VFY:S0720P4009GB *2015 64bit AMD GX-222GC 2.20GHz VFY:S0720P702BDE VFY:S0720P702BFR all begin VFY:S0720P and end two digit country code | <!--IDE--> {{N/A|}} | <!--SATA--> {{Yes|up to 2 Sata-cable-connector with space in casing so normal SSD/HDD over Sata was running very well on AHCI and IDE-Mode and 2242 mSata}} | <!--Gfx--> {{Maybe|use VESA 2D for AMD Radeon HD 8280E IGP ( islands) or later R5E IGP ( islands)}} | <!--Audio--> {{yes|HDAudio ALC671 codec partially working, external audio speaker}} | <!--USB--> {{yes|4 rear USB 2.0 but not front 2 USB 3.1}} | <!--Ethernet-->{{yes|rtl8169 Realtek 8169}} | <!--Test Distro-->AROS One USB 2.0 | <!--Comments-->2014 64bit supports AVX and SSE 4.1 - 1 ddr3 Sodimm slot max 8Gb - 19V-20V 2A 5.5mm/2.5mm coax - D3313-B13 stripped down Mini-ITX mobo D3313-S1/-S2/-S3 (eKabini) D3313-S4/-S5/-S6 - SATA data socket can be located under the fins of the cpu heatsink is fanless - mPCIe socket for wireless card - |- | <!--Name-->Fujitsu FUTRO S920 D3313-E D3313-G *2016 AMD GX-222GC SOC 2.20GHz Dual *2017 AMD G-Series GX-415GA (1.50 GHz, Quad Core, 2 MB, AMD Radeon™ HD 8330E) *2017 AMD G-Series GX-424CC 2.40 GHz Quad | <!--IDE--> {{N/A}} | <!--SATA--> {{yes|2242 mSata and 1 Sata-cable-connector with space in casing so normal SSD/HDD over Sata possible}} | <!--Gfx--> {{yes|use VESA 2D for Radeon R5E GCN2/3 IGP}} | <!--Audio--> {{yes|HDAudio ALC671 codec partially working}} | <!--USB--> {{yes|4 rear USB 2.0, front 2 USB 3.1 downgradable to 2.0 in BIOS setting}} | <!--Ethernet--> {{yes|rtl8169 Realtek 8169}} | <!--Test Distro--> AROS One USB 2.4 | <!--Comments-->2016 64bit does support AVX or SSE 4.1 - 2 so dimm slot with max of 8 GB - 19v barrel psu 5.5mm 2.5mm - SATA data socket can be located under the fins of the heatsink - mPCIe a e keyed socket for wireless card - propetary X2 connector with official raizer to X1 connector - almost silent background noise, not affecting sound quality in any way |- | <!--Name-->Fujitsu Thin Client Futro S5011 S7011 | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->{{maybe|Vesa 2D for AMD Vega 3 on 2 dp 1.4}} | <!--Audio-->{{No|HDAudio with ALC623 codec}} | <!--USB-->{{maybe|USB3 USB 3.2 Gen 2 front and 3 usb2 rear }} | <!--Ethernet-->rtl8169 Realtek RTL8111H | <!--Test Distro--> | <!--Comments-->2019 64bit - AMD Ryzen Dual Core R1305G or R1505G 1ltr case - 2 ddr4 sodimm slots - TPM 2.0 - 19v 3.42amp round coax or usb-c 20c 3.25a external psu - |- | <!--Name-->Fujitsu FUTRO S9011 Thin Client VFY:S9011THU1EIN || <!--IDE-->{{N/A}} || <!--SATA-->NVMe || <!--Gfx-->{{maybe|Vesa 2D for AMD Vega 3 on 2 dp 1.4}} || <!--Audio-->{{No|HDAudio with ALC623 codec}} || <!--USB-->{{maybe|USB3 USB 3.2 Gen 2 front and 3 usb2 rear }} || <!--Ethernet-->rtl8169 Realtek RTL8111H || <!--Test Distro--> || <!--Comments-->2020 64bit Ryzen Embedded R1606G - 2 ddr4 sodimm slots - TPM 2.0 - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- |} ====HP Compaq==== {| class="wikitable sortable" width="100%" ! width="15%" |Name ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Integrated Gfx ! width="10%" |Audio ! width="10%" |USB ! width="10%" |Ethernet ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Compaq presario 7360 | <!--IDE-->{{yes|Working}} | <!--SATA-->{{N/A}} | <!--Gfx-->{{Maybe|VESA}} | <!--Audio-->{{Maybe|AC97 via}} | <!--USB-->{{Maybe|issues}} | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->Compaq EP Series 6400/10 | <!--IDE--> {{yes|IDE}} | <!--SATA--> {{N/A}} | <!--Gfx--> {{N/A}} | <!--Audio--> {{no|ISA}} | <!--USB--> {{yes|USB 1.1}} | <!--Ethernet--> {{N/A}} | <!--Test Distro--> {{dunno}} | <!--Comments--> |- | <!--Name-->Compaq Evo D510 | {{yes|Working}} | {{N/A}} | {{partial|Intel Extreme (VESA only)}} | {{yes|AC97}} | {{yes|Working}} | {{yes|Intel PRO/100}} | Icaros 1.5 | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->Compaq DX2000 MT | <!--IDE-->{{yes}} | <!--SATA-->{{maybe}} | <!--Gfx-->{{maybe|Intel Extreme 2 (VESA only)}} | <!--Audio-->{{no|detects AC97 but no support for ADI AD1888 codec}} | <!--USB-->{{yes|OHCI/EHCI }} | <!--Ethernet-->{{no|Intel 82526EZ e1000}} | <!--Test Distro--> Icaros 1.51 | <!--Comments-->boots ok but no audio |- | <!--Name-->Compaq DX 2200 | <!--IDE-->{{yes}} | <!--SATA-->{{maybe}} | <!--Gfx-->{{maybe|RC410 [Radeon Xpress 200] (VESA only)}} | <!--Audio-->{{dunno|HD Audio}} | <!--USB-->{{maybe|OHCI/EHCI issues }} | <!--Ethernet-->{{N/A}} | <!--Test Distro--> {{dunno}} | <!--Comments-->issues |- | <!--Name--> d230 | <!--IDE--> {{yes|UDMA}} | <!--SATA--> {{N/A}} | <!--Gfx--> {{partial|Intel Extreme (VESA only)}} | <!--Audio--> {{partial|Intel AC97 (speaker and headphones only, no line-out)}} | <!--USB--> {{yes|USB}} | <!--Ethernet--> {{Maybe|Broadcom BCM4401}} | <!--Test Distro--> Icaros 1.4.5 | <!--Comments--> |- | <!--Name-->HP Pavilion a220n || <!--IDE-->{{Yes}} || <!--SATA-->{{N/A}} || <!--Gfx-->{{Yes|VESA 1024x768 on nVidia GF4 MX with 64MB shared video ram}} || <!--Audio-->{{Yes|Realtek ALC650 AC'97 comp.}} || <!--USB-->{{Yes|USB 2.0}} || <!--Ethernet-->{{Yes|Realtek 8201BL 10/100 LAN}} || <!--Test Distro-->AROS One 2.5|| <!--Comments-->2004 32bit athlon xp 2600+ Socket 462 / Socket A - 2 dimm ddr pc2700 - |- | <!--Name-->t500 | <!--IDE-->{{Yes}} | <!--SATA-->{{N/A}} | <!--Gfx-->{{Yes|FX5200 (2D; 3D with older driver)}} | <!--Audio-->{{Yes|AC97 ICH4 ALC658D}} | <!--USB-->{{Yes|UHCI/EHCI}} | <!--Ethernet-->{{Yes|RTL 8101L 8139}} | <!--Test Distro-->Nightly Build 2012-09-22 | <!--Comments-->2004 |- | <!--Name-->DC7700 | <!--IDE-->{{Yes}} | <!--SATA-->{{Yes}} | <!--Gfx-->{{Yes|GMA 2D}} | <!--Audio-->{{Yes| ICH8}} | <!--USB-->{{Yes}} | <!--Ethernet-->{{No|82566DM e1000e}} | <!--Test Distro-->Nightly Build 2013-??-?? | <!--Comments-->2006 Some support at low cost |- | <!--Name-->HP dc 7600 CMT | <!--IDE--> | <!--SATA--> | <!--Gfx-->{{Yes|Intel Graphics Media Accelerator 950}} | <!--Audio-->{{Yes|Realtek ACL 260}} | <!--USB-->{{Yes|USB 2.0}} | <!--Ethernet-->{{No|Intel PRO/1000 GT}} | <!--Test Distro--> | <!--Comments-->2007 |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->HP t5000 thin client series t5500 t5510 t5515 PC538A or PC542A t5700 t5710 Transmeta Crusoe Code Morphing TM 5400 5600 800Mhz | <!--IDE-->128mb to 512MB | <!--SATA-->{{N/A}} | <!--Gfx-->Ati Radeon 7000M | <!--Audio-->VIA with codec | <!--USB-->{{No|Issues}} | <!--Ethernet-->VIA Rhine 2 | <!--Test Distro--> | <!--Comments-->2006 32bit - ddr max 1GB - F10 setup - all t51xx and some t55xx units will not include a SODIMM slot - |- | <!--Name-->HP t5000 thin client series CN700 *HSTNC-002L-TC t5135, t5530 | <!--IDE--> | <!--SATA--> | <!--Gfx-->Vesa 2d 128Mb Via S3 32-bit colour | <!--Audio-->AC97 | <!--USB--> | <!--Ethernet-->VIA VT6102 VT6103 [Rhine-II] (rev 78) | <!--Test Distro--> | <!--Comments-->2007 32bit t5135 appears identical to the t5530 except the CPU VIA Esther 400 MHz - RAM 64Mb (? max) - 8 x USB2.0 - 12V 3.33A Coax 5.5mm/2.1mm |- | <!--Name-->HP t5720, t5725 HSTNC-001L-TC | <!--IDE-->{{unk| }} | <!--SATA-->{{N/A}} | <!--Gfx-->VESA 2d SiS741GX 2048 x 1536 32-bit colour | <!--Audio-->AC97 SiS SiS7012 AC'97 | <!--USB-->6 x USB2.0 | <!--Ethernet-->VIA VT6102 VT6103 [Rhine-II] (rev 8d) | <!--Test Distro--> | <!--Comments-->2007 32bit AMD Geode NX1500 1GHz socketed - RAM 512MB or 1GB, 256MB, 512MB or 1GB - 12V psu - sis DDMA support - custom 1.13 BIOS - pci low profile - |- | <!--Name-->t5000 series VX800 HSTNC-004-TC t5145, t5540, t5545, t5630 | <!--IDE--> | <!--SATA--> | <!--Gfx-->Vesa 2d VIA Chrome9 | <!--Audio-->HD Audio VIA | <!--USB--> | <!--Ethernet-->{{No|VT6120 VT6121 VT6122 Gigabit (rev 82)}} | <!--Test Distro--> | <!--Comments-->2010 32bit - RAM 64Mb (? max) - 8 x USB2.0 - 12V 4.16A Coax: 5.5mm/2.1mm - |- | <!--Name-->t5730w HSTNC-003-TC t5730 | <!--IDE-->{{n/a|ATA 44pin DOM Flash}} | <!--SATA--> | <!--Gfx-->Vesa 2d ATI Radeon X1250 2048 x 1536 no 3D | <!--Audio-->HD audio with codec | <!--USB-->{{Yes|6 x USB2.0}} | <!--Ethernet-->{{No|Broadcom 5707M tg3 10/100/1000}} | <!--Test Distro--> | <!--Comments-->2008 64bit AMD Sempron 2100+ 1GHz - 1 slot of ddr2 sodimm (Max 2GB) - 12V 4.16A Coax 5.5mm/2.1mm - F10 enter bios F12 boot devices - |- | <!--Name-->HSTNC-005-TC gt7720, gt7725 | <!--IDE--> | <!--SATA--> | <!--Gfx-->Vesa 2d AMD RS780G HD 3200 - 2560 x 1600 DVI-D & DVI-H | <!--Audio--> | <!--USB-->8 x USB2.0 | <!--Ethernet-->{{No|Broadcom BCM5787M}} | <!--Test Distro--> | <!--Comments-->2009 64bit AMD Turion Dual Core CPU 2.3GHz - 1 DDR2 200-pin SODIMM - 19V 4.16A Coax 7.4mm/5.0mm (gt7725) - |- | <!--Name-->HP t5740 Thin Client HSTNC-006-TC t5740, t5745, st5742 | <!--IDE-->1 port | <!--SATA-->1 port | <!--Gfx-->{{Maybe|VESA for Intel CL40 VGA and DisplayPort connectors}} | <!--Audio-->{{Yes|HD audio with IDT codec}} | <!--USB-->{{Maybe| }} | <!--Ethernet-->{{No|Broadcom BCM57780 Gigabit}} | <!--Test Distro-->Nightly build and Icaros | <!--Comments-->2009 32bit Atom N280 - F10 on power up to get into the BIOS screens. F12 brings up the boot options - hp 19V one with a coax connector, outer diameter 4.8mm with inner to be 1.7mm to 1.4mm - 2 ddr3 sodimm slots max 3gb due to 32bit - 1 pci-e slot completely non standard - |- | <!--Name-->t5000 series HSTNC-012-TC VIA Nano u3500 VX900 *t5550 512MB/1GB Windows CE6 R3 *t5565 1GB/1GB HP ThinPro *t5570 2GB/1GB WES 2009 | <!--IDE--> | <!--SATA--> | <!--Gfx-->Vesa 2d VIA ChromotionHD 2.0 GPU Chrome9 | <!--Audio-->VIA 9170 VT1708S codec | <!--USB--> | <!--Ethernet-->{{No|Broadcom BCM57780 Gigabit}} | <!--Test Distro--> | <!--Comments-->32bit - 1 sodimm - 19V 3.42A supply connector standard yellow-tip coax plug 4.8mm/1.8mm "Standard HP Compaq DC Power Plug 4.8mm x 1.5mm / 1.7mm Yellow Tip Connector - |- | <!--Name-->HP t510 Via Eden X2 U4200 HSTNC-012-TC shares features with t5570e, t5565z | <!--IDE-->2G ATA Flash DOM | <!--SATA-->one | <!--Gfx-->{{Maybe|Vesa 2d for Chrome9 VIA ChromotionHD 2.0 gfx}} | <!--Audio-->{{Maybe|VIA VT8237A VT8251 HDA with codec}} | <!--USB-->{{Maybe|6 USB2 }} | <!--Ethernet-->{{No|Broadcom Corporation NetLink BCM57780 Gigabit Ethernet PCIe}} | <!--Test Distro--> | <!--Comments-->2010 32bit - one slot ddr3 sodimm max 4GB - 19V 3.42A Coax 4.8mm/1.8mm - |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->HP T610 Thin Client and thicker PLUS version AMD G-T56N A55E | <!--IDE-->{{Maybe|}} | <!--SATA-->2 sata | <!--Gfx-->Radeon 6320 1 dp port 1 dvi | <!--Audio-->HDAudio with ALC codec | <!--USB-->two USB2 on the front, two USB2 and two USB 3 ports on the rear | <!--Ethernet-->{{No|Broadcom BCM57780}} | <!--Test Distro--> | <!--Comments-->2010 64bit does not support AVX SSE 4.1 - 2 204-pin DDR3 1600MHz SODIMMs PC3-12800 under motherboard via removable panel - 19.5V 3A Coax male 7.4mm/5.0mm + centre pin - |- | <!--Name-->HP T420 Thin Client *AMD Embedded G-Series GX-209JA SOC (1 GHz, 2 cores) | <!--IDE-->{{N/A}} | <!--SATA-->{{N/A}} | <!--Gfx-->Radeon 8180 dvi vga | <!--Audio-->HDAudio with ALC codec | <!--USB-->2 front 2 rear USB2 | <!--Ethernet-->{{Yes|Realtek}} | <!--Test Distro--> | <!--Comments-->2015 64bit supports AVX SSE 4.1 - soldered in place 2GB DDR3 - smaller than usual 19.5V 2.31A Coax male 4.5mm/3.0mm + centre pin - usb stick internal for storage - E15 BBR - |- | <!--Name-->HP t520 TPC-W016 *AMD GX-212JC 1.2Ghz (2 core) | <!--IDE-->{{N/A}} | <!--SATA-->1 m.2 mounting holes for 2242 and 2260 SSDs SATA (not NVME) | <!--Gfx-->Radeon R2E GCN2 IGP Sea Islands | <!--Audio-->HDAudio with ALC codec | <!--USB-->2 USB3 front, 4 USB2 back | <!--Ethernet-->{{Yes|Realtek}} | <!--Test Distro--> | <!--Comments-->2014 2017 64 bit supports AVX SSE 4.1 - 1 204-pin DDR3 SODIMM - 19.5V 3.33A 7.4mm Coax with central pin |- | <!--Name-->HP t620 TPC-I004-TC *AMD G-Series GX-217GA 2 core APU 1.65GHz (65W) *AMD GX-415GA 4 core (65W) and t620 PLUS (PRO wider version) TPC-I020-TC *AMD GX-420CA SOC 4 core (Plus 85W) | <!--IDE-->{{N/A}} | <!--SATA-->{{yes|single M.2 2280 socket sata3, mSATA socket removed end of 2014}} | <!--Gfx-->{{maybe|Vesa 2d for Radeon HD 8280E graphics 8330E Islands GCN2 IGP - 2 dp ports no dvi}} | <!--Audio-->{{yes|HDAudio with Realtek ALC221 codec 0x10EC 0x0221}} | <!--USB-->{{unk|4 front, 2 back, 1 inside limited space}} | <!--Ethernet-->{{Yes|Realtek 8169}} | <!--Test Distro-->Aros One 32bit with noacpi added to grub boot line | <!--Comments-->2014 64bit supports AVX SSE 4.1 - 2 DDR3L SODIMMs side by side - mSATA ssd and M.2 SSD are M1.6 screws, M2.0 screws used on most SSDs - 19.5V 3.33A Coax male 7.4mm 5mm with centre pin - changed the network card to a Atheros 5000 compatible - |- | <!--Name-->HP T530 *AMD GX-215JJ (2 core) 1.5GHz | <!--IDE-->{{N/A}} | <!--SATA-->1 m.2 sata ssd up to 2280 | <!--Gfx-->Radeon R2E | <!--Audio-->HDAudio with ALC codec | <!--USB-->1 USB3.1, 1 usb-c front, 4 USB2 back | <!--Ethernet-->{{Yes|Realtek}} | <!--Test Distro--> | <!--Comments-->2015 64 bit does support AVX SSE 4.1 - 1 204-pin DDR4 SODIMM - 19.5V 2.31A Coax male 4.5mm/3.0mm with centre pin - |- | <!--Name-->HP T730 Wider "Thin" Client TPC-I018-TC Pixar RX-427BB (2c4t) - no display and fans blowing full speed caused by '''disabling internal gpu in bios''' flash L43_0116.bin onto smc MX25L6473F (3.3V 8-PIN SOP (200mil) SPI 25xx) ([https://www.badcaps.net/forum/troubleshooting-hardware-devices-and-electronics-theory/troubleshooting-desktop-motherboards-graphics-cards-and-pc-peripherals/bios-schematic-requests/96303-hp-t730-password-locked-bios in the rom rcvry socket under a delicate thin narrow surface flap]) with ch341a alike switchable from 5v, 3.3v to 1.8v | <!--IDE-->{{N/A}} | <!--SATA-->{{partial|Storage bios option to IDE and not AHCI to prevent constant install error messages to DH0: - add noacpi to end of grub boot line - 1 M.2 SATA slot (Key B+M) up to 2280 with T8 torx secure stub}} | <!--Gfx-->{{maybe|use VESA for non-vulkan Radeon R7 GCN 2 UVD4.2 Sea Islands with 4 dp outs '''but too easy bricking''' if swapping with 1 PCIe 3.0 x8 slot 30W slim factor low profile 8400gs gt210 nvs295 nvs310 gt1030}} | <!--Audio-->{{yes|HDaudio 6.34 realtek alc221 codec thru case speaker only}} | <!--USB-->{{yes|'''Works''' for 4 USB2 in the back with 2 in the front, 2 USB3.0 ports on front and 1 more internal (not bootable)}} | <!--Ethernet-->{{yes|rtl8169 Realtek RTL8111HSH-CG set up first in Prefs/Network}} | <!--Test Distro-->boots with AROS One 32bit and 64bit USB with added noacpi added to grub boot line - press e - Latest distros can select grub boot options with Aros One 64bit USB and Aros One USB 2.8 but system seems to freeze after choice | <!--Comments-->2016 64bit supports AVX SSE 4.1 - 2 DDR3L sodimm stacked slots max 32GB - '''Larger''' 20cm/8" high 3.5ltr case noisy fan - TPM2 - esc/F9 boot selector F10 enter bios - 2 serial and 1 parallel old ports - Key E Wireless - PCIe slot (x16 physical, x8 electrical) - 19.5V 4.36A 85w TPC-LA561 HP 7.4mm black-ring-tip power plug, red flashing power button, wrong psu or bad MotherBoard MB - |- | <!--Name-->HP t630 Thin Client TPC-I020-TC *AMD Embedded G-Series SoC GX-420GI quad core 2Ghz | <!--IDE-->{{N/A}} | <!--SATA-->{{yes|ahci.device mbr msdos partiton table for 2 Sata M.2, sata0 up to 2280 (1tb max), sata1 2242 (64gb max), both T8 torx secure stubs}} | <!--Gfx-->{{maybe|use VESA for Radeon AMD Wani R7E with 2 displayport 1.2 sockets, use one nearest to power jack - no dvi / hdmi}} | <!--Audio-->{{Yes|HDAudio 6.36 0x1022, 0x157a and ALC255 aka ALC3234 codec 0x10ec, 0x0255, pins 0x17 as LFE and 0x1b as int speaker but not ahi 6.34}} | <!--USB-->{{yes|USB2 2 front and 2 rear, 2 front USB3 and 1 inside}} | <!--Ethernet-->{{Yes|Realtek 8169 8111H}} | <!--Test Distro-->AROS One USB 2.2, 2.8 and 64bit USB 1.0, 1.2, 1.3 with noacpi added to the end of the grub bootline (press e) | <!--Comments-->2016 64bit supports AVX SSE 4.1 - 2 DDR4 SODIMMs side by side speed 1866Mhz limit - 19.5V 3.33A 65W TPC-BA54 Coax male 7.4mm with centre pin - can be easily bricked, might reflash bios with M40 SP149736 - 20cm/8" high 1.5ltr larger fanless case - esc f1 f9 f10 - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->HP Compaq Elite 7200 7300 8200 8300 SFF with kettle IEC psu cable | <!--IDE--> | <!--SATA-->{{yes|IDE ata legacy only in BIOS}} | <!--Gfx-->i pci-e | <!--Audio-->{{Maybe|8200 works}} | <!--USB-->{{yes| }} | <!--Ethernet-->{{no|Intel or Broadcom}} | <!--Test Distro-->icaros 2.3 | <!--Comments-->2013 64bit dual core - add pci-e rtl8169 ethernet card and pci-e gf210 nvidia low height - |- | <!--Name-->HP Compaq Pro 6305 Small Form Factor SFF AMD A75 chipset (FCH 6 SATA 6 Gb/s, 4 USB 3.0) *AMD Quad A10-5800B *AMD A8-5500B *AMD Dual A6-5400B *AMD A4-5300B | <!--IDE--> | <!--SATA--> | <!--Gfx-->Radeon 7000 Terascale iGPU series Radeon HD 7660D, Radeon HD 7560D, Radeon HD 7540D, Radeon HD 7480D | <!--Audio-->HD ALC221 | <!--USB--> | <!--Ethernet-->{{No|Broadcom 5761}} | <!--Test Distro--> | <!--Comments-->2012 64bit |- | <!--Name-->Elitedesk 705 G1 - SFF *AMD A10-8850B, Quad-Core A10 PRO-7850B, A10-8750B *AMD A10-7800B, A10 PRO-6800B, A8-7600B *AMD A8-8650B, A6-8550B *AMD A6-8350B, Dual A6 PRO 7400B, A4-7300B | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe| }} | <!--Gfx-->{{Maybe|VESA 2D with Radeon R7 or 8000}} | <!--Audio-->{{Maybe|HD audio with Realtek ALC221 codec}} | <!--USB-->{{Maybe| }} | <!--Ethernet-->{{No|Broadcom or Intel}} | <!--Test Distro--> | <!--Comments-->2014 64bit - T15 security torx psu with 6pin PWR 200W connector - |- | <!--Name-->HP EliteDesk 705 G2, 705 G3 Mini PC USFF thin client | <!--IDE-->{{N/A}} | <!--SATA-->2.5in and m.2 | <!--Gfx-->Radeon R7 | <!--Audio-->HDAudio | <!--USB-->USB3 | <!--Ethernet-->{{No|Broadcom BCM5762 GbE}} | <!--Test Distro--> | <!--Comments-->2014 64bit AM4 socket with 35W TDP A10-8770E (4c), AMD PRO A6-8570E (2c), AMD Pro A6-9500E, or AMD PRO A10-9700E on AMD B300 FCH - ddr4 sodimm slots - 77 x 175 x 34mm (6.97 x 6.89 x 1.34in) 1L and about 3lbs - |- | <!--Name-->HP EliteDesk 705 G4 Mini 1ltr USFF AMD Ryzen 3 2200G (4c t) or 5 2400G (4c t) | <!--IDE-->{{N/A|}} | <!--SATA-->{{Maybe|Nvme 2280 and 2.5in sata}} | <!--Gfx-->Vega 8 thru DP1.2 port | <!--Audio-->{{No|HD Audio Conexant codec}} | <!--USB-->USB2 usb3 | <!--Ethernet-->rtl8169 realtek | <!--Test Distro--> | <!--Comments-->2016 64bit Am4 socket - 2 sodimm 16GB max - 19.5v hp socket ext psu - |- | <!--Name-->Elitedesk 705 G4 35w, HP Prodesk 405 G4 35W USFF - baseboard 83e9 35W - AMD Athlon PRO 200GE (2c 4t), 2200GE (4c t) or 2400GE (4c t) on AMD B350 FCH | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe|Nvme 2280 and older models 2.5in sata}} | <!--Gfx-->Vega 3, 8 or 11 with 2 dp1.2 ports | <!--Audio-->{{no|HDAudio with Conexant CX20632 codec}} | <!--USB-->USB3 | <!--Ethernet-->rtl8169 Realtek 8169 8111EPH 1Gbe or Realtek RTL8111F | <!--Test Distro--> | <!--Comments-->2017 64bit - realtek wifi 8821 or 8822 - up to 1 ddr4 dimm slots - hp barrel external ac - |- | <!--Name-->Elitedesk 705 G5, HP Elitedesk 806 G6, Prodesk 405 G6 || <!--IDE-->{{N/A}} || <!--SATA-->2x NVMe or 1x SATA + 1x NVMe, but not all three drives at the same time without serious modding of hd caddie || <!--Gfx-->Vega with DP1.4 port || <!--Audio-->{{no|HDAudio with Realtek ALC3205 codec}} || <!--USB-->USB3 || <!--Ethernet-->{{maybe|Realtek}} || <!--Test Distro--> || <!--Comments-->2018 64bit - 2 ddr4 sodimm slots - 3400GE Ryzen 5 PRO 3350GE (4c 8t), Ryzen 3 PRO 3200GE 3150GE (4c 4t), AMD Athlon Silver PRO 3125GE (2c 4t) on AMD PRO 565 |- | <!--Name-->HP t540 1ddr4 slot, t640 2 DDR4 SDRAM sodimm SO-DIMM 260-pin non-ECC max 32gb thin client USFF | <!--IDE-->{{N/A}} | <!--SATA-->1 NVM Express (NVMe) 2230 or 2280 | <!--Gfx-->Vega 3 VGA, DisplayPort | <!--Audio-->HD Audio with codec | <!--USB-->2 USB3 gen1 | <!--Ethernet-->rtl8169 Realtek Realtek RTL8111HSH or RTL8111E PH-CG | <!--Test Distro--> | <!--Comments-->2019 64bit ryzen r1000 series Ryzen Embedded R1305G 1.5 GHz, R1505G dual (2c 4t) 2.0Ghz or R1606G ?.?Ghz (2c4t) - Realtek RTL8852AE wifi - 45W psu Coax male 4.5mm/3.0mm + centre pin - |- | <!--Name-->HP t740 SFF Thin Client | <!--IDE-->{{N/A}} | <!--SATA-->2 M.2, one is sata and other nvme | <!--Gfx-->Vega 8 DisplayPort or + optional pci-e 30W Radeon E9173 | <!--Audio-->HD Audio with codec | <!--USB-->USB3 | <!--Ethernet-->Realtek RTL8111E PH-CG 1Gbe | <!--Test Distro--> | <!--Comments-->2019 64bit - Ryzen Embedded V1756B 3.25Ghz quad - 90W 19.5V 4.62A psu Coax male 4.5mm/3.0mm + centre pin - sodimm DDR4 max 64Gb - slightly noisy fan - |- | <!--Name-->HP EliteDesk 805 G6 Mini 4750GE (8t 16t), Prodesk 405 G6 Ryzen 5 PRO 4650GE (6c 12t) or Ryzen 3 PRO 4350GE (4c 8t) on AMD PRO 565 | <!--IDE-->{{N/A}} | <!--SATA-->2.5in carrier and 2 slots m.2 nvme | <!--Gfx-->Vega 8 with DP1.4 and HDMI flex io2 output options | <!--Audio-->HDAudio with Realtek ALC3205 codec | <!--USB-->4 usb a - gen 2 10gig and gen 1 5gig ports | <!--Ethernet-->{{N/A}} | <!--Test Distro--> | <!--Comments-->2021 64bit AMD Ryzen 4000 SBC unlocked - 2 sodimm ddr4 slots - wifi6 - 90W ac - |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- |} ====Lenovo==== {| class="wikitable sortable" width="100%" ! width="15%" |Name ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Integrated Gfx ! width="10%" |Audio ! width="10%" |USB ! width="10%" |Ethernet ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Lenovo Nettop IdeaCentre Q150 (40812HU) | <!--IDE--> | <!--SATA--> | <!--Gfx-->ION2 | <!--Audio--> realtek codec | <!--USB-->USB2 | <!--Ethernet-->intel 10/100 | <!--Test Distro--> | <!--Comments-->2011 64bit D510 |- | <!--Name-->M625q Tiny (1L) | <!--IDE-->{{N/A}} | <!--SATA-->M.2 Sata | <!--Gfx-->Stoney Radeon R2, R3 or R4 and later R5 with 2 dp ports | <!--Audio-->HD audio with ALC233-VB2-CG codec 0x10EC 0x0233 | <!--USB-->{{No|3 usb3.1 Gen 1 and 3 usb2}} | <!--Ethernet-->rtl8169 RTL8111 | <!--Test Distro--> | <!--Comments-->2016 64bit all dual cores - e2-9000e or a4-9120e later A9-9420e - heatsink covers 70% area covers wifi - 65w or 135w lenovo rectangle ac - 1 ddr4 2666MHz slot max 8gb - tpm 2.0 - |- | <!--Name-->M715q Gen 1 AMD A6 A8 A10-9700E 9770E (2c2t) | <!--IDE-->{{N/A}} | <!--SATA-->m.2 | <!--Gfx-->R4 | <!--Audio-->HDAudio | <!--USB-->USB3 | <!--Ethernet--> | <!--Test Distro--> | <!--Comments-->2016 64bit - |- | <!--Name-->M715q Gen 2 Ryzen 5 PRO 2400GE 4C 8T | <!--IDE-->{{N/A}} | <!--SATA-->m.2 | <!--Gfx-->Vega 11 | <!--Audio-->HD Audio with codec | <!--USB-->USB3 | <!--Ethernet-->1GbE | <!--Test Distro--> | <!--Comments-->2018 64bit - f1 enter setup, esc device boot - fixed 1.8v ch341a needed to reflash 1.8v bios if no boot SOP8 DIP8 Winbond W25Q64, MXIC MX25U1635, MX25U6435 - |- | <!--Name-->ThinkCenter M75n nano Ryzen3 3300U | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->ThinkCentre M75q M75q-1 Tiny 1ltr TMM *AMD Ryzen 5 PRO Quad 3500 Pro 3400GE (4c 8t) 11a5 soe400 *AMD 3200GE (2c 4t) zen1+ 11a4 | <!--IDE-->{{N/A|}} | <!--SATA-->{{Maybe|NVMe 2280 1Tb max - untested 2.5inch}} | <!--Gfx-->Vega 11 | <!--Audio-->HD Audio Realtek ALC222-CG codec ALC3287 | <!--USB-->3 USB3 Gen 1 | <!--Ethernet-->rtl8169 Realtek 8169 8111 | <!--Test Distro--> | <!--Comments-->2019 64bit - 65w 20v 3.25A to 135W rectangle psu - 2 sodimm ddr4 sodimm max 32GB locked 2666MHz - |- | <!--Name-->ThinkCentre Ryzen 7 PRO Tiny 1ltr Gen 2 AMD 4000 series *AMD 4650GE (6c12t) 4750GE (8c16t) 4350G (4c8t) Zen2 - | <!--IDE-->{{N/A|}} | <!--SATA-->{{Maybe|NVme}} | <!--Gfx-->Vega 8 | <!--Audio-->HD Audio codec | <!--USB--> | <!--Ethernet-->Realtek 8169 8111 | <!--Test Distro--> | <!--Comments-->2021 64bit vendor locked - 20v psu - 2 sodimm - |- | <!--Name-->Thinkcenter M75q-2 Gen2 refresh | <!--IDE-->{{N/A}} | <!--SATA-->m.2 nvme | <!--Gfx-->Radeon Vega | <!--Audio-->HDAudio | <!--USB-->USB3 | <!--Ethernet-->1GigE | <!--Test Distro--> | <!--Comments-->2022 64bit 5650GE (6c12t) 5750GE (8c16t) - vendor/PSB can lock your AMD CPU - f12 boot devices |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->Thinkcentre M75q Tiny Gen5 | <!--IDE-->{{N/A| }} | <!--SATA-->2 NVMe | <!--Gfx-->Radeon 780M dp1.4a or hdmi | <!--Audio-->HDAudio with codec | <!--USB-->USB3 usb-c | <!--Ethernet-->1GBe port | <!--Test Distro--> | <!--Comments-->2024 Ryzen PRO 7 8700GE - 90W yellow rectangle connector psu - 2 DDR5 sodimm slots max 128Gb - |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |} ====Misc==== {| class="wikitable sortable" width="100%" ! width="15%" |Name ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Integrated Gfx ! width="10%" |Audio ! width="10%" |USB ! width="10%" |Ethernet ! width="5%" |Test Distro ! width="20%" |Comments |- | <!--Name-->Impart impact Media Group IQ Box mini Digital Signage with MB896 mini itx | <!--IDE-->{{Yes| }} | <!--SATA-->{{N/A}} | <!--Gfx-->GMA 915 gme | <!--Audio--> via audio | <!--USB-->{{yes| }} | <!--Ethernet--> | <!--Test Distro--> | <!--Comments-->2007 32bit - 1 ddr2 slot - pentium m 1.73GHz - |- | <!--Name-->[https://everymac.com/systems/apple/mac_mini/specs/mac_mini_cd_1.83-specs.html Apple A1176 Intel MacMini1,1] | <!--IDE-->{{N/A}} | <!--SATA-->{{unk|gpt/efi }} | <!--Gfx-->{{Yes|gma950 2d and 3d}} | <!--Audio-->{{No|HDAudio with ICH7 [https://answers.launchpad.net/ubuntu/+source/alsa-driver/+question/186749 Sigmatel Stac 9221] [https://android.googlesource.com/kernel/msm/+/android-wear-5.1.1_r0.6/sound/pci/hda/patch_sigmatel.c codec][https://alsa-devel.alsa-project.narkive.com/Yt20W6cE/sigmatel-stac9221-mux-amp-out-0x02-microphone-not-working mic]}} | <!--USB-->{{Yes|USB2}} | <!--Ethernet-->{{No|Marvell}} | <!--Test Distro--> | <!--Comments-->2006 32bit possible 1.83 GHz Intel “Core Duo” (T2400) - swap pci-e wifi for atheros 5k AR5007EG - maybe hack with a 2,1 firmware - max 4GB Ram ddr2 sodimms - external apple psu - dvd boot only with c key - |- | <!--Name-->[https://everymac.com/systems/apple/mac_mini/specs/mac-mini-core-2-duo-1.83-specs.html Apple A1176 Intel Mac Mini2,1] | <!--IDE-->{{N/A}} | <!--SATA-->{{unk|gpt/efi }} | <!--Gfx-->{{Yes|gma950 2d and 3d}} | <!--Audio-->{{No|HDAudio with ICH7 Sigmatel Stac 9221 codec}} | <!--USB-->{{Yes|USB2}} | <!--Ethernet-->{{No|Marvell}} | <!--Test Distro-->Aros One 2.0/ Icaros | <!--Comments-->2007 64bit - swap pci-e wifi for atheros 5k AR5007EG - hacked with a 2,1 firmware and replaced the cpu for T7600 2.33 Ghz C2D and max 4GB Ram ddr2 sodimms - external apple psu - dvd boot only via c key |- | <!--Name-->Apple iMac 5,1 "Core 2 Duo" 1.83GHz 17" T5600 MA710LL || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->GMA 950 with 64Mb || <!--Audio-->HDAudio idt codec || <!--USB-->3 USB2 || <!--Ethernet--> || <!--Test Distro--> || <!--Comments-->2006 64bit - 2 ddr2 667MHz sodimm slots - 17.0" TFT widescreen 1440x900 - polycarbonate |- | <!--Name-->Apple iMac 6,1 "Core 2 Duo" 2.16 2.33 24" only T7400 T7600 aka MA456LL/A A1200 (EMC 2111) || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Nvidia 7300GT with 128 MB of GDDR3 SDRAM PCI Express or GeForce 7600GT with 256Mb mini dvi, vga || <!--Audio-->HDAudio || <!--USB-->3 USB2 || <!--Ethernet--> || <!--Test Distro--> || <!--Comments-->2006 64bit - 2 ddr2 667MHz sodimm slots - 24.0" TFT widescreen 1920 x 1200 - polycarbonate plastic case iMacs of this generation are the most difficult iMacs to service due to their front bezel design |- | <!--Name-->Neoware CA2 | <!--IDE-->flash DOM | <!--SATA-->{{N/A}} | <!--Gfx-->S3 Inc ProSavage PM133 (rev 02) vga | <!--Audio-->VIA VT82C686 AC97 Audio | <!--USB-->USB | <!--Ethernet-->rtl8139 | <!--Test Distro--> | <!--Comments-->2003 32bit - VIA Ezra 800MHz - 2 PC100 sodimm slots - riser board carries an ISA slot and a PCI slot - external 12V power supply.with 4 pins - |- | <!--Name-->Neoware CA5 Capio One | <!--IDE-->44pin Disk On Module DOM | <!--SATA-->{{N/A}} | <!--Gfx-->SiS550 vga | <!--Audio-->AC97 with SiS7019 codec | <!--USB-->USB1.1 | <!--Ethernet-->rtl8139 | <!--Test Distro--> | <!--Comments-->2004 32bit - internal power supply with mains lead has a "clover leaf" style - 2 144-pin PC100 or PC133 SODIMM might have 24MB of RAM soldered - |- | <!--Name-->Neoware CA10 *E140 model BL-XX-XX (800MHz CPU) later *E100 model BK-XX-XX (1GHz CPU) | <!--IDE--> | <!--SATA-->{{N/A}} | <!--Gfx-->VIA VT8623 (Apollo CLE266) vga | <!--Audio-->AC97 with | <!--USB-->4 USB2 | <!--Ethernet-->VIA VT6102/VT6103 [Rhine-II] (rev 74) | <!--Test Distro--> | <!--Comments-->2004/5 32bit - 12v 5.5mm/2.1mm - 2 184-pin DDR DIMM - |- | <!--Name-->VXL Itona thin client *TC3200, *TC3x41 (P3VB-VXL) TC3541 TC3641 TC3841, *TC3xx1 (6VLE-VXL0) TC3931, *TC43xx (Gigabyte C7V7VX) TC4321 | <!--IDE--> | <!--SATA-->{{N/A}} | <!--Gfx-->VIA vga | <!--Audio-->AC'97 Audio with VIA VT | <!--USB-->VIA USB | <!--Ethernet-->Realtek 8100B | <!--Test Distro--> | <!--Comments-->2005 2006 32bit VIA Samuel 2, VIA C3 Nehamiah CPU, 1 DIMM slot, internal psu, |- | <!--Name-->Neoware Capio C50, model CA15 Thin Clients] *Login Administrator Password Administrator *Login User Password User | <!--IDE-->1 flash Disk On Module | <!--SATA-->{{N/A}} | <!--Gfx-->VIA VT8623 (Apollo CLE266) vga | <!--Audio-->AC97 with via codec | <!--USB-->USB | <!--Ethernet-->VIA | <!--Test Distro--> | <!--Comments-->2006 32bit VIA Eden (Samuel II core) CPU - 1 ddr sodimm slot max 512mb - slot - internal psu clover leaf - |- | <!--Name-->[http://etoy.spritesmind.net/neowareca21.html Neoware CA21 Thin Clients] Igel 3210 (and maybe the Clientron G270) *Login Administrator Password Administrator *Login User Password User | <!--IDE-->1 flash Disk On Module DOM | <!--SATA-->{{N/A}} | <!--Gfx-->VIA CN700 vga | <!--Audio-->AC97 with via codec | <!--USB-->USB2 | <!--Ethernet-->VIA | <!--Test Distro--> | <!--Comments-->2007 32bit VIA C3 Nehemiah instead of Ezra-T - made 2 version of the CA 21, one with an Award bios and one with a Phoenix bios - 1 ddr2 sodimm slot max 1gb - VT6656 wireless - slot - internal psu iec - |- | <!--Name-->Neoware CA22 (e140), part number DD-L2-GE with BCOM WinNET P680 (V4) as the Igel 4210LX (Igel 5/4) | <!--IDE-->1 VIA VT82C586A/B VT82C686/A/B VT823x/A/C PIPC Bus Master IDE (rev 06) | <!--SATA-->{{N/A}} | <!--Gfx-->VIA CN700 P4M800 Pro CE VN800 Graphics [S3 UniChrome Pro] (rev 01) vga | <!--Audio-->AC97 with codec | <!--USB-->USB2 VIA VT8237R Plus | <!--Ethernet-->VIA VT6102/VT6103 [Rhine-II] (rev 78) | <!--Test Distro--> | <!--Comments-->2007 32bit - VIA Esther to later C7 1GHz - 1 ddr2 sodimm slots max 512mb - +12V DC/4.16A/50W 5.5mm/2.1mm coaxial - |- | <!--Name-->10Zig RBT402, Clientron U700, | <!--IDE-->{{Yes|44 pin header very little room}} | <!--SATA-->{{N/A|}} | <!--Gfx-->{{Partial|VESA dvi}} | <!--Audio-->{{unk|AC97 with codec}} | <!--USB-->{{unk|VIA }} | <!--Ethernet-->{{unk|}} | <!--Test Distro--> | <!--Comments-->2008 32bit - very small cases with very limited expansion - 1 sodimm 2GB max - 12v 3a psu - Password Fireport |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->Dell Optiplex FX170 D05U thin client, 10Zig 56xx range 5602, 5616v, 5617v, 5672v, Clientron U800, Devon IT TC5, | <!--IDE-->{{Yes|44 pin header very little room}} | <!--SATA-->{{N/A|}} | <!--Gfx-->{{partial|GMA 950 dvi}} | <!--Audio-->{{Yes|HD Audio with codec}} | <!--USB-->{{Yes| }} | <!--Ethernet-->{{No|Broadcom}} | <!--Test Distro-->Icaros 2.3 | <!--Comments-->2009 32bit - very small cases with very limited expansion - 1 ddr2 sodimm 2GB max - 12v 3a psu - Password Fireport - ps2 keyboard socket - |- | <!--Name-->10Zig RBT-616V or Chip PC Technologies EX-PC (model number XPD4741) | <!--IDE-->{{unk|44 pin header very little room}} | <!--SATA-->{{N/A|}} | <!--Gfx-->{{Yes|GMA 950}} | <!--Audio-->{{unk|HD Audio with codec}} | <!--USB-->{{unk| }} | <!--Ethernet-->{{unk|rtl8169}} | <!--Test Distro--> | <!--Comments-->2010 32bit N270 on NM10 with ICH7 - very small cases with very limited expansion - 1 sodimm 2GB max - 12v 4a psu - Password Fireport |- | <!--Name-->Gigabyte Brix GS-A21S-RH (rev. 1.0) SFF | <!--IDE--> | <!--SATA--> | <!--Gfx-->{{maybe|X3100}} | <!--Audio-->{{No|HD Audio with ALC883-GR codec}} | <!--USB-->Intel USB | <!--Ethernet-->{{no|Intel 82566DC}} | <!--Test Distro-->ICAROS 2.3 | <!--Comments-->2009 64bit Intel GME965 chipset with Intel ICH8M - 2 DDR2 Dimm slots - GA-6KIEH2-RH Rev.1.x mini ITX Case 213mm(D) x 64mm(W) x 234mm(H) - custom psu - |- | <!--Name-->VXL Itona MD+24 MD27 MD54 MD64 MD76 thin client | <!--IDE--> | <!--SATA--> | <!--Gfx-->VIA Chrome 9 | <!--Audio-->HD Audio with VIA VT | <!--USB-->VIA | <!--Ethernet-->VIA | <!--Test Distro--> | <!--Comments-->2009 32bit VIA X2 U4200 - 12v-19v barrel psu - |- | <!--Name-->Acer Revo 100 RL100 AMD Athlon II X2 K325 || <!--IDE--> || <!--SATA--> || <!--Gfx-->NVIDIA® ION™ 9300m || <!--Audio-->HDAudio with ALC662 codec || <!--USB-->USB2 1 front 2 back || <!--Ethernet-->NVIDIA nForce 10/100/1000 || <!--Test Distro--> || <!--Comments-->2010 64bit but no AVX - 4Gb DDR3 sodimm - 500 GB - 19v 3.42a 65W - dvd but later BD drive - |- | <!--Name-->Asrock ION 330 330Pro HT-BD, Foxconn NT-330i, Zotac ION F (IONITX mini itx), | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->{{Maybe|ION geforce 9400}} | <!--Audio-->{{Maybe| }} | <!--USB-->{{Maybe|Nvidia USB}} | <!--Ethernet-->{{No|Nvidia }} | <!--Test Distro--> | <!--Comments-->2010 32bit slow atom cpu - 2.5L 8" by 8" plastic case - 2 ddr2 sodimm max 4G - external 19v 65W 3.42A Plug 5.5mm X 2.5mm - little whiny fan - |- | <!--Name-->Zotac ZBOXHD-ND01 | <!--IDE--> | <!--SATA--> | <!--Gfx-->ION1 | <!--Audio-->HDaudio | <!--USB-->USB2 | <!--Ethernet-->NVidia | <!--Test Distro--> | <!--Comments-->2009 32bit |- | <!--Name-->Zotac ZBOX HD-ID11 | <!--IDE--> | <!--SATA--> | <!--Gfx-->ION2 | <!--Audio-->HDaudio with ALC888 codec | <!--USB-->USB2 | <!--Ethernet-->rtl8169 rtl8111D | <!--Test Distro--> | <!--Comments-->2010 |- | <!--Name-->ZOTAC ZBOX Blu-ray 3D ID36 Plus | <!--IDE-->{{N/A}} | <!--SATA-->sata | <!--Gfx-->ION2 | <!--Audio-->HDaudio | <!--USB-->2 USB3 | <!--Ethernet-->GbE | <!--Opinion-->2011 64bit - |- | <!--Name-->Shuttle XS35GT || <!--IDE--> || <!--SATA--> || <!--Gfx-->ION || <!--Audio-->HD audio IDT92HD81 || <!--USB--> || <!--Ethernet-->{{No|JMC261}} || <!--Test Distro--> || <!--Comments-->2011 64bit - Atom™ D510 NM10 - DDR2 |- | <!--Name-->Shuttle XS35GT V2 || <!--IDE--> || <!--SATA--> || <!--Gfx-->ION2 || <!--Audio-->HD audio IDT92HD81 || <!--USB-->Intel || <!--Ethernet-->{{No|JMC251}} || <!--Test Distro--> || <!--Comments-->2011 64bit Atom™ D525 NM10 chipset - DDR3 |- | <!--Name-->Sapphire Edge-HD || <!--IDE--> || <!--SATA--> || <!--Gfx-->ION2 GT218 with vga and hdmi || <!--Audio-->HDAudio realtek codec || <!--USB--> || <!--Ethernet-->{{Unk|Realtek}} || <!--Test Distro--> || <!--Comments-->2011 64bit - Atom™ D510 NM10 - DDR2 65 W AC, DC 19V~3.42A, 19.3L x 14.8w x 2.2H cm (1l), weight 530g, |- | <!--Name-->Sapphire Edge-HD2 || <!--IDE-->{{N/A}} || <!--SATA-->{{yes|IDE mode}} || <!--Gfx-->{{Yes|nouveau ION2 GT218 with vga and hdmi 2d and 3d}} || <!--Audio-->{{Yes|HDAudio}} || <!--USB-->{{Yes|Intel USB2}} || <!--Ethernet-->{{Yes|}} || <!--Test Distro--> || <!--Comments-->2011 64bit Atom™ D525 NM10 chipset - DDR3 |- | <!--Name-->AOPEN Digital Engine DE67-HA(I) | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe| }} | <!--Gfx-->{{Maybe| Vesa 2d for Intel HD}} | <!--Audio-->{{maybe|HDAudio for ALC662 codec}} | <!--USB-->{{maybe|usb3}} | <!--Ethernet-->{{no|Intel WG82579LM}} | <!--Test Distro--> | <!--Comments-->2011 |- | <!--Name-->[https://www.jetwaycomputer.com/JBC600C99352W.html Jetway JBC600C99352W] | <!--IDE--> | <!--SATA--> | <!--Gfx-->ION2 | <!--Audio-->{{No|C-Media CM108AH}} | <!--USB-->USB2 | <!--Ethernet-->Realtek 8111DL | <!--Test Distro--> | <!--Comments-->2011 64bit D525 - DDR3 - 12v psu |- | <!--Name-->Foxconn nT-A3550 A3500 AMD A45 Chipset DDR3 Nettop Barebones - White | <!--IDE-->{{N/A}} | <!--SATA-->1 slot | <!--Gfx-->AMD Radeon HD6310 | <!--Audio--> | <!--USB-->4 USB2 back and 2 USB3 front | <!--Ethernet--> | <!--Test Distro--> | <!--Comments-->2012 64bit does not support AVX or SSE 4.1 AMD Dual-core E350 1.6GHz CPU - 1 ddr3 sodimm - |- | <!--Name-->Asus EeeBox PC EB1021 || <!--IDE--> || <!--SATA--> || <!--Gfx-->Radeon HD6320M || <!--Audio-->HDAudio with ALC codec || <!--USB-->USB2 || <!--Ethernet-->Realtek GbE1 || <!--Test Distro--> || <!--Comments-->2012 64bit - AMD® Brazos E-350 SFF or E-450 with A50M - 2 ddr3l so-dimm - 40W ac - |- | <!--Name-->Xi3 Piston PC Athlon64 X2 3400e (X5A), AMD R-464L quad (X7A) Z3RO NUC | <!--IDE-->{{N/A}} | <!--SATA-->{{N/A}} | <!--Gfx-->AMD mobility HD3650 to radeon HD 7660G | <!--Audio--> codec | <!--USB-->4 USB2 3 USB3 | <!--Ethernet-->{{no|Atheros AR8161}} | <!--Test Distro--> | <!--Comments-->2012 - 2 sodimm 8GB max - 19v 3.3a round - Titan105 bios update - |- | <!--Name-->Sapphire Edge-HD3 || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->Radeon HD6320M with vga and hdmi || <!--Audio-->HDAudio with Realtek ALC662 codec || <!--USB-->USB2 || <!--Ethernet-->Realtek GbE1 || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 AMD® Brazos E-450 with A45M - ddr3l so-dimm - 65W ac - Wireless is Realtek 8191SU WiFi (802.11n) or AzureWave (802.11bgn) - |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->Samsung Syncmaster Thin Client Display TC-W Series 24" LF24 TOWHBFM/EN TC220W LED LF22TOW HBDN/EN || <!--IDE-->{{N/A}} || <!--SATA-->8gb SSD || <!--Gfx-->{{Maybe| VESA mode only Radeon HD 6290}} || <!--Audio--> || <!--USB-->2 USB 2.0 || <!--Ethernet--> || <!--Test Distro--> || <!--Comments-->2012 64bit does not support AVX or SSE 4.1 thin Client C-50 C50 AMD® 1000 MHz and no wireless |- | <!--Name-->Advantech TPC-2140 thin client | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->{{Maybe|VESA }} | <!--Audio--> | <!--USB-->USB2 | <!--Ethernet-->{{Yes|Realtek}} | <!--Test Distro--> | <!--Comments-->2012 64bit does not support AVX or SSE 4.1 atom-like G-T56E 1.65Ghz up to SSE3, BGA413 soldered - |- | <!--Name-->CompuLab FIT-PC3 fitPC3 USFF PC AMD G-T56N || <!--IDE-->{{N/A}} || <!--SATA-->{{yes| }} || <!--Gfx-->RADEON HD 6320 || <!--Audio-->{{yes|HDAudio ALC888 codec}} || <!--USB-->{{yes| }} || <!--Ethernet-->{{yes|rtl8169 8111}} || <!--Test Distro--> || <!--Comments-->2012 64 bit does not support AVX or SSE 4.1 - 12v 3a - 2x sodimm DDR3 max 4GB - wifi rtl8188ce |- | <!--Name-->10Zig 6872 thin client | <!--IDE--> | <!--SATA--> | <!--Gfx-->{{Maybe|VESA }} | <!--Audio--> | <!--USB--> | <!--Ethernet-->{{Yes|Realtek}} | <!--Test Distro--> | <!--Comments-->2012 64bit does not support AVX or SSE 4.1 atom-like G-T56N up to SSE3 BGA413 (FT1) soldered - DDR3l single channel - |- | <!--Name-->10ZiG Technology 9972 1.6 GHz Linux 1.47 kg Black RX-216GD thin client | <!--IDE--> | <!--SATA--> | <!--Gfx-->AMD Radeon 5E 3840 x 2160 @ 30Hz to 2560 x 1600 @ 60Hz 2 x Display Port | <!--Audio--> | <!--USB-->6 x USB2.0 2 x USB3.0 | <!--Ethernet-->{{Maybe|Realtek}} | <!--Test Distro--> | <!--Comments-->2016 64bit does support AVX or SSE 4.1 AMD RX-216TD - 1 ddr3 sodimm - 12V 4A Coax 5.5mm/2.1mm |- | <!--Name-->10ZiG 7800q thin client | <!--IDE--> | <!--SATA--> | <!--Gfx-->AMD Radeon 5E 3840 x 2160 @ 30Hz to 2560 x 1600 @ 60Hz 2 x Display Port | <!--Audio--> | <!--USB-->6 x USB2.0 2 x USB3.0 | <!--Ethernet-->{{Maybe|Realtek}} | <!--Test Distro--> | <!--Comments-->2016 64bit does support AVX or SSE 4.1 AMD GX-424CC (Quad Core) 2.4GHz BGA769 (FT3b) - 1 ddr3 sodimm - 12V 4A Coax 5.5mm/2.1mm |- | <!--Name--> *Itona VXL MZE12 AMD a4-5000 thin client *VXL Itona LQ27 LQ+27 LQ44 LQ+44 LQ49 LQ+49 LQ50 LQ+50 LQ64 LQ+64 thin client | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->Ati 8330 vga hdmi dp | <!--Audio--> | <!--USB-->4 usb2 2 usb3 | <!--Ethernet-->Realtek | <!--Test Distro--> | <!--Comments-->2014 64bit quad BGA769 (FT3) soldered - 2 stacked sodimm ddr3 middle of mobo - 2 m.2 sata slots - 1 sata short cable half size space - limited 1ltr 8in case no fan - 19v hp style psu connector - |- | <!--Name-->Dell Wyse 5212 21.5" AIO Thin Client W11B | <!--IDE-->{{N/A}} | <!--SATA-->Sata | <!--Gfx-->R3 out from DP or vga | <!--Audio-->HDAudio | <!--USB-->USB2 | <!--Ethernet-->Realtek | <!--Test Distro--> | <!--Comments-->2015 64bit slow atom like dual core AMD G-T48E 1.4 GHz - dell type round ac needed 90W 19.5V 4.62A - 21 inch 1080p screen - |- | <!--Name-->LG 24CK560N-3A 24' All-in-One Thin Client Monitor, 27CN650N-6N 27CN650W-AC 27', 34CN650W-AC 34', | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments-->2018 64bit AMD Prairie Falcon GX-212JJ |- | <!--Name-->CompuLab fit-PC4 fitPC4 4x 2Ghz AMD || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet-->{{no|Intel}} || <!--Test Distro--> || <!--Comments-->2018 64 - 2x DDR4 sodimm - |- | <!--Name-->IGEL Hedgehog M340C UD3 thin client *2016 V1.0 AMD GX-412HC 1.2GHz-1.6GHz Radeon R3E, normal bios DEL for Bios or F12 boot selector *2018 AMD GX-424CC 2.4GHz, Radeon R5E, UEFI hit DEL and choose boot or SCU icon | <!--IDE-->{{N/A|}} | <!--SATA-->SATA half slim version '''limited space''' with msata 8+18pins slot on earlier 2016 models | <!--Gfx-->{{Maybe|VESA for Radeon R3E later R5E sea islands vulkan 1.2 with dvi dp output}} | <!--Audio-->{{Yes|HD Audio with codec ?? (412) and Realtek ALC662-VD0-GR (424), both case speaker}} | <!--USB-->amd usb3 boot usb2 with bios "disable usb" entry | <!--Ethernet-->{{Yes|Realtek 8169 8111 (412) and (424)}} | <!--Test Distro-->Aros One x86 USB 1.5, 1.8 and 2.2 but ArosOne 64bit 1.2 boot loop in usb2 port | <!--Comments-->2016 64bit - 20cm/8" high case - 1 DDR3L sodimm slot max 8Gb 1600MHz - external '''12V 3A''' supply with 5.5mm/2.1mm coaxial - IDE like interface under base stand is for legacy addon ports RS232 parallel etc - capacitive touch power on - case opening 3 stages, remove stand and narrow black plastic strip from the back, top cover slides off to the back and lifts off - |- | <!--Name--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Test Distro--> || <!--Comments--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->10ZiG 6148v 6048qv (6100 series) | <!--IDE-->{{N/A}} | <!--SATA-->{{maybe| }} | <!--Gfx--> | <!--Audio-->{{maybe| }} | <!--USB-->{{No| }} | <!--Ethernet-->{{maybe| }} | <!--Test Distro--> | <!--Comments-->2018 64bit AMD Ryzen V1202B |- | <!--Name-->10ZiG 7111q | <!--IDE-->{{N/A}} | <!--SATA-->{{maybe| }} | <!--Gfx--> | <!--Audio-->{{maybe| }} | <!--USB-->{{maybe| }} | <!--Ethernet-->{{maybe| }} | <!--Test Distro--> | <!--Comments-->2019 64bit AMD Ryzen R2514 2.1 GHz - |- | <!--Name-->Shuttle DA320 | <!--IDE--> | <!--SATA--> | <!--Gfx-->R3 R5 | <!--Audio-->HD Audio with ALC662 codec | <!--USB-->{{maybe| }} | <!--Ethernet-->dual realtek 1GbE 8111H | <!--Test Distro--> | <!--Opinion-->2017 64bit AMD 2200G 2400G - Robust metal 1.3-liter case - A320 chipset DDR4 - 19V 6.32A DC PSU - |- | <!--Name-->IGEL UD7 H850C around december 2019 '''AMD Secure Processor''' is a built-in dedicated security system that checks if the BIOS has a valid signature and thus secures the next step in the boot process. This ensures that only devices with a signed BIOS will boot | <!--IDE-->{{N/A}} | <!--SATA-->None but 8gb emmc | <!--Gfx-->Vega 3 | <!--Audio-->HD Audio with Realtek ALC897 or ALC888S codec | <!--USB-->USB 3.2 and 2.0 | <!--Ethernet-->1GbE | <!--Test Distro--> | <!--Comments-->2018 64bit - AMD Ryzen™ Dual-Core 10W TDP - 2 DDR4 sodimms slots max 16Gb - 12V 4A psu - 2x DisplayPort 1.2 no dvi or hdmi - Intel® 9260 or SparkLAN WNFT-238AX wifi - 1x rear serial Prolific PL2303 chipset - locked down components and very limited expansion options |- | <!--Name-->IGEL UD7 H860C - '''AMD Secure Processor''' is a built-in dedicated security system that checks if the BIOS has a valid signature and thus secures the next step in the boot process. This ensures that only devices with a signed BIOS will boot | <!--IDE-->{{N/A}} | <!--SATA-->None but 8gb emmc | <!--Gfx-->Vega 3 | <!--Audio-->HD Audio with Realtek ALC897 or ALC888S codec | <!--USB-->USB 3.2 and 2.0 | <!--Ethernet-->1GbE | <!--Test Distro--> | <!--Comments-->2018 64bit - AMD Ryzen™ Dual-Core 10W TDP - 2 DDR4 sodimms slots max 16Gb - 12V 4A psu - 2x DisplayPort 1.2 no dvi or hdmi - Intel® 9260 or SparkLAN WNFT-238AX wifi - 1x rear serial Prolific PL2303 chipset - locked down components and very limited expansion options |- | <!--Name-->IGEL UD3 M350C (UEFI issues) | <!--IDE-->{{N/A}} | <!--SATA-->None but 8gb emmc | <!--Gfx-->Vega 3 | <!--Audio-->HD Audio with Realtek ALC897 or ALC888S codec | <!--USB-->USB 3.2 and 2.0 | <!--Ethernet-->1GbE | <!--Test Distro--> | <!--Comments-->2018 64bit - AMD Ryzen™ R R1505G Dual-Core 10W TDP - 2 DDR4 sodimms slots max 16Gb - 12V 4A psu - 2x DisplayPort 1.2 no dvi or hdmi - Intel® 9260 or SparkLAN WNFT-238AX wifi - 1x rear serial Prolific PL2303 chipset - locked down components and very limited expansion options |- | <!--Name-->IGEL UD7 H860C AMD Ryzen R1605B Thin Client - '''AMD Secure Processor''' is a built-in dedicated security system that checks if the BIOS has a valid signature and thus secures the next step in the boot process. This ensures that only devices with a signed BIOS will boot | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->HDAudio | <!--USB-->{{maybe| }} | <!--Ethernet-->1GbE | <!--Test Distro--> | <!--Comments-->2020 AMD Ryzen™ Embedded R1605B 2 – 3.6 GHz (Quad-Core) - 12v 5A psu - up to 16GB RAM DDR4 - locked down components and very limited expansion options |- | <!--Name-->Gigabyte Brix Barebone Mini PC BSRE-1605 | <!--IDE-->{{N/A}} | <!--SATA-->2 M.2 | <!--Gfx-->Vega 8 | <!--Audio-->HD Audio ALC269 codec | <!--USB-->USB3 | <!--Ethernet-->2 GbE | <!--Test Distro--> | <!--Comments-->2020 64bit AMD Ryzen V1605B - 2 DDR4 sodimm slots |- | <!--Name-->MINISFORUM Deskmini UM250 Mini PC | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB-->{{maybe| }} | <!--Ethernet-->{{maybe| }} | <!--Test Distro--> | <!--Comments-->2020 64bit AMD Ryzen V1605B - |- | <!--Name-->T-Bao MN25 Mini PC 2500U | <!--IDE-->{{N/A| }} | <!--SATA-->{{Unk|Intel NVMe}} | <!--Gfx-->{{No|VESA Radeon Vega 8}} | <!--Audio-->{{Unk| }} | <!--USB-->{{maybe|USB 3}} | <!--Ethernet-->{{Yes|Realtek PCIe 1GbE}} | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->Atari VCS || <!--IDE-->{{N/A}} || <!--SATA--> || <!--Gfx-->{{maybe|Vesa 2D for AMD Vega 3}} || <!--Audio-->{{unk|HDAudio with ALC codec}} || <!--USB-->{{maybe|USB3 USB 3.2 Gen 2 front and 3 usb2 rear }} || <!--Ethernet-->rtl8169 Realtek RTL8111H || <!--Test Distro--> || <!--Comments-->2021 64bit Ryzen Embedded R1606G - 2 ddr4 sodimm slots - TPM 2.0 - |- | <!--Name-->Minis Forum M200 Silver Athlon M300 3300U | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->Vega 8 | <!--Audio--> | <!--USB-->{{maybe|USB 3.1 gen 1 and 2}} | <!--Ethernet-->{{No|Realtek PCIe 2.5G}} | <!--Test Distro--> | <!--Comments-->2021 64bit |- | <!--Name-->Minis Forum DeskMini UM300 3300U, UM350 DMAF5 3550H, UM370 and UM700 with 3750H | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->Vega 8 | <!--Audio--> | <!--USB-->{{maybe|USB 3.1 gen 1 and 2}} | <!--Ethernet-->{{No|Realtek PCIe 2.5G}} | <!--Test Distro--> | <!--Comments-->2021 64bit |- | <!--Name-->MinisForum X300 with AMD 3400G | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->Vega 8 | <!--Audio--> | <!--USB-->{{maybe|USB 3.1 gen 1 and 2}} | <!--Ethernet-->{{No|Realtek PCIe 2.5G}} | <!--Test Distro--> | <!--Comments-->2021 64bit |- | <!--Name-->Beelink SER3 GTR4 | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->AMD Vega 3 or 10 | <!--Audio-->HD Audio with codec | <!--USB-->{{maybe|USB3}} | <!--Ethernet-->Realtek RJ45 1GbE | <!--Test Distro--> | <!--Comments-->2020 64bit 3200u or 3750h |- | <!--Name-->AsRock DeskMini X300 | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments-->2020 Ryzen 7 Pro 4750G 5600G |- | <!--Name-->MinisForum Besstar Tech X400 with AMD 4650G | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->AMD | <!--Audio--> | <!--USB-->{{maybe|USB 3.1 gen 1 and 2}} | <!--Ethernet-->{{No|Realtek PCIe 2.5G}} | <!--Test Distro--> | <!--Comments-->2021 64bit - MP1584 - kill NB679 NB679GD-Z=ALTM=AL** QFN-12 IC-REG-DL buck/linear synchronous chip IC with bad usb cables - |- | <!--Name-->Beelink SER4 GTR5 | <!--IDE-->{{N/A}} | <!--SATA-->cant boot from installed SSDs unless its an M.2 | <!--Gfx-->AMD Vega | <!--Audio--> | <!--USB-->{{maybe|USB3}} | <!--Ethernet-->1 or 2 Realtek | <!--Test Distro--> | <!--Comments-->2021 64bit 4700U or 5900HX |- | <!--Name-->MSI PRO DP20Z 5M Mini PC - AMD Ryzen 5 5300G | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet-->{{No|Realtek 2.5G LAN RTL8125}} | <!--Test Distro--> | <!--Comments-->2018-2021 R3 3200G Vega 8 - R5 3400G Vega 11 - Ryzen 5 5600G Vega 7 - Athlon 3000G |- | <!--Name-->Minisforum UM450 | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->Vega | <!--Audio-->HDaudio | <!--USB-->USB3 | <!--Ethernet-->{{No|Realtek 2.5G LAN RTL8125}} | <!--Test Distro--> | <!--Comments-->2022 64bit - Ryzen 4500U - |- | <!--Name-->Gigabyte Brix GB-BRR7-4800 (rev. 1.0) GB-BRR7-4700 (rev. 1.0) GB-BRR5-4500 (rev. 1.0) GB-BRR3-4300 (rev. 1.0) | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB-->{{maybe|}} | <!--Ethernet-->Realtek 2.5G LAN RTL8125 | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->ASUS PN50 mini PC AMD Ryzen 7 4700U | <!--IDE--> | <!--SATA--> | <!--Gfx-->Vega | <!--Audio-->HD audio with codec | <!--USB-->{{maybe|3.1 gen1}} | <!--Ethernet-->{{No|realtek 2.5GbE}} | <!--Test Distro--> | <!--Comments-->2022 64bit - |- | <!--Name-->ASUS PN51-S1 mini PC AMD Ryzen 7 5700U | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->Vega thru dp or hdmi | <!--Audio-->HD audio with codec | <!--USB-->{{maybe|3.1 gen1}} | <!--Ethernet-->{{No|realtek 2.5GbE}} | <!--Test Distro--> | <!--Comments-->2022 64bit - 19v or 19.5v 90w psu round barrel - 32gb ddr4 sodimm - |- | <!--Name-->Minis Forum Bessstar Tech EliteMini B550 | <!--IDE-->{{N/A}} | <!--SATA-->1 x 2.5in and 2 nvme | <!--Gfx-->Vega 8 | <!--Audio--> | <!--USB-->{{maybe|4 usb3.1}} | <!--Ethernet-->{{No|realtek 8125 2.5GbE}} | <!--Test Distro--> | <!--Comments-->2022 64bit AMD 4700G 5700G desktop cpu - 19v 120w round barrel - |- | <!--Name-->ASRock A300 and later X300 Mini itx with Desktop AM4 socket | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->Vega | <!--Audio-->HDAudio | <!--USB-->USB3 | <!--Ethernet-->1GbE | <!--Test Distro--> | <!--Comments-->2022 64bit - choose your own AMD APU GE 35w based - DDR4 - |- | <!--Name-->ASRock 4x4 BOX-5800U Zen 3-based AMD Ryzen 7 5800U 15W - | <!--IDE-->{{N/A}} | <!--SATA-->m.2 slot gen 3 and sata | <!--Gfx-->vega | <!--Audio-->HD audio with codec | <!--USB-->{{maybe|}} | <!--Ethernet-->{{Maybe|1 GbE and 1 2.5GbE}} | <!--Test Distro--> | <!--Comments-->2022 64bit - WiFi 6E - |- | <!--Name-->Topton S500+ Gaming Mini PC - Morefine S500+ 5900HX Mini PC - Minisforum UM590 Ryzen AMD Zen3 Ryzen 9 5900HX 7 5800H 45W - | <!--IDE-->{{N/A}} | <!--SATA-->2 nvme 1 sata | <!--Gfx-->Vega 8 thru HDMI 2.0, DP 1.4, and USB type-C | <!--Audio--> | <!--USB-->{{maybe|usb3.1}} | <!--Ethernet-->{{Maybe|1 realtek rtl 8111h and 1 8125 2.5GbE bg-cg}} | <!--Test Distro--> | <!--Comments-->2022 64bit - 2 sodimm ddr4 3200MHz - |- | <!--Name-->Chuwi RzBox later Ubox | <!--IDE-->{{N/A}} | <!--SATA-->2 nvme | <!--Gfx-->Vega 8 later to 660m vga, dp, hdmi | <!--Audio-->HDaudio | <!--USB-->{{maybe|usb-c usb2}} | <!--Ethernet-->dual gigabit | <!--Test Distro--> | <!--Comments-->2022 2025 64bit amd 5800h 4800h 6600H - 90w psu - |- | <!--Name-->Beelink Mini PC SER5, Trigkey AZW S5, Asus PN52, ZHI BEN MX-JB560, | <!--IDE-->{{N/A}} | <!--SATA-->PCIe3 M.2 2280 nvme | <!--Gfx-->AMD Vega 6 with 1 or 2 hdmi | <!--Audio-->HDAudio | <!--USB-->{{maybe|USB3.0}} | <!--Ethernet-->{{Maybe|Realtek 1GbE}} | <!--Test Distro--> | <!--Comments-->2022 64bit 5500U 5560u 5600U to PRO 5600H 5800H - 19v 3.42W 65W psu - |- | <!--Name-->NIPOGI Kamrui ACEMAGICIAN AM06PRO Dual LAN Mini PC AMD Ryzen 7 5800U, 5 5500U or 5600U/5625U | <!--IDE-->{{N/A}} | <!--SATA-->M.2 and 2.5in sata | <!--Gfx-->Vega 7 | <!--Audio-->HDAudio | <!--USB-->USB3 | <!--Ethernet-->2 GbE ports | <!--Test Distro--> | <!--Comments-->2022 64bit - plastic build - 90w usb-c power - loud at 25W setting - |- | <!--Name-->Topton FU02 Fanless Mini PC AMD Ryzen 7 4700U 5600U 5800U 8 Core 16 Threads | <!--IDE-->{{N/A}} | <!--SATA-->NVMe and 2.5in sata | <!--Gfx-->Vega | <!--Audio-->HDAudio | <!--USB-->4 3.0 with 2 2.0 | <!--Ethernet-->2 x 1G | <!--Test Distro--> | <!--Comments-->2022 64 - 2 ddr4 sodimm slots - fanless with copper cube from cpu to metal sheet which gets warm |- | <!--Name-->Xuu XR1 Lite (5300u 4c 8t) PRO 5400U MAX 5600U | <!--IDE-->{{N/A}} | <!--SATA-->1 NVMe 2242 slot | <!--Gfx-->Vega 6 | <!--Audio-->HDAudio | <!--USB-->2 3.0 | <!--Ethernet-->1G | <!--Test Distro--> | <!--Comments-->2022 64 quiet fan - very small case no expansions - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->MINISFORUM UM690 Venus Series | <!--IDE-->{{N/A}} | <!--SATA-->pcie4 nvme 2280 and 1 sata3 2.5in | <!--Gfx-->680m RNDA2 12CU with 2 hdmi | <!--Audio-->HD Audio with codec | <!--USB-->{{maybe|1 USB4 and 2 USB3.2}} | <!--Ethernet-->{{No|2.5G LAN}} | <!--Test Distro--> | <!--Comments-->2022 64bit 6900hx 8C16T - 2 ddr5 sodimmm - 19v ???W - |- | <!--Name-->Beelink Mini PC GTR6 | <!--IDE-->{{N/A}} | <!--SATA-->PCIe4 | <!--Gfx-->AMD 680M RDNA2 | <!--Audio--> | <!--USB-->USB3.2 | <!--Ethernet-->{{No|Realtek 2.5GbE or intel i225}} | <!--Test Distro--> | <!--Comments-->2022 64bit Ryzen 9 6900HX Zen3+ and a 2gb Radeon 680m 12CU ddr5 sodimm - 19v 120w psu - |- | <!--Name-->Asus PN53, Geekom AS 6, | <!--IDE-->{{N/A}} | <!--SATA-->pcie gen4 nvme and ata 2.5in | <!--Gfx-->680m RNDA2 12CU with 2 hdmi and 1 dp | <!--Audio-->HD Audio with codec | <!--USB-->{{maybe|2 usb-c, 2 USB2.1 and 3 USB3.2}} | <!--Ethernet-->{{No|1G LAN}} | <!--Test Distro--> | <!--Comments-->2022 64bit 6900hx 8C 16T - 2 slots ddr5 sodimmm (64Gb max) - 19v 120W - 4 retained base screws beware ribbon cable - |- | <!--Name-->Micro Computer (HK) Tech Ltd MinisForum UM773 Lite later UM750L slim, GMKtec K2 Mini PC | <!--IDE-->{{N/A}} | <!--SATA-->NVMe PCIe4.0 | <!--Gfx-->RDNA | <!--Audio-->HD Audio | <!--USB-->USB4 | <!--Ethernet-->2.5GbE | <!--Test Distro--> | <!--Comments-->2023 2025 64bit - AMD Zen 3+ (8c 16t) Ryzen 7 7735HS, 7840HS and AMD Ryzen 9 7845HX AMD Ryzen™5 7545U (6c12t) - 19v up to 120w ac adapter - ddr5 sodimm 4800Mhz - |- | <!--Name-->[https://www.asrockind.com/en-gb/4x4 ASrock 4x4 SBC] | <!--IDE-->{{N/A}} | <!--SATA-->sata or nvme | <!--Gfx-->Vega or 680M | <!--Audio-->HDAudio | <!--USB-->USB3 or USB4 | <!--Ethernet-->Realtek 1GbE or intel 2.5GbE | <!--Test Distro--> | <!--Comments-->2022 64bit - |- | <!--Name-->Beelink Mini PC GTR7 SER7 | <!--IDE-->{{N/A}} | <!--SATA-->PCIe4 nvme 2280 up to 2Tb | <!--Gfx-->AMD 780M RDNA3 GPU output on hdmi and dp | <!--Audio-->HDAudio | <!--USB-->USB3.2 | <!--Ethernet-->{{No|1 or 2 2.5GbE}} | <!--Test Distro--> | <!--Comments-->2023 64bit AMD Phoenix APUs Zen 4 CPU Ryzen 7 7840HS or 9 7940HS (8c 16t) - 19v 5.26A 120w psu - del dios setup f7 choose boot - 2 usb-c on back - up to 64gb via 2 ddr5 sodimm slots - |- | <!--Name-->MINISFORUM BD770i Ryzen 7 7745HX (8c16t) or BD795i SE 790i 9 7945HX (16c32t) or F1FXM_MB_V1.1 795M LGA1700 mATX | <!--IDE-->{{N/A}} | <!--SATA-->2 NVMe | <!--Gfx-->Radeon 610m over usb-c, dp or hdmi | <!--Audio-->HDAudio with codec | <!--USB-->USB3 with 2 rear USB2 | <!--Ethernet-->Realtek 2.5G | <!--Test Distro--> | <!--Opinion-->2024 mini-ITX M/B is the first MoDT (Mobile on Desktop) with soldered AMD CPU - 2 dual PCIe4.0 M.2 slots - 2 ddr5 sodimm slots max 5200Mhz - 8pin cpu power - battery not easily replaceable underneath - |- | <!--Name-->Minisforum ms-a1 MS-a2 * 5700G to 8700G apu * 9955HX | <!--IDE-->{{N/A}} | <!--SATA-->2 nvme | <!--Gfx-->AMD 610M | <!--Audio-->HDAudio | <!--USB-->USB3 | <!--Ethernet-->dual 2.5GbE | <!--Test Distro--> | <!--Comments-->2024 64bit - 19v ?A round barrel jack - 2 ddr5 so-dimm slots - |- | <!--Name-->AOOSTAR GT68 | <!--IDE-->{{N/A}} | <!--SATA-->Nvme | <!--Gfx-->680m | <!--Audio-->HDaudio | <!--USB-->USB3 | <!--Ethernet-->2 2.5Gb | <!--Test Distro--> | <!--Comments-->2025 Ryzen7 Pro 6850H, |- | <!--Name-->NextSBC 7840HS | <!--IDE-->{{N/A}} | <!--SATA-->Nvme | <!--Gfx-->AMD 780M 12CU | <!--Audio-->HDAudio with codec | <!--USB-->USB4 and USB 3.2 | <!--Ethernet-->2 GbE | <!--Test Distro--> | <!--Comments-->2025 64bit - 32Gb soldered - |- | <!--Name-->Firebat A6 R7 6800H | <!--IDE-->{{N/A}} | <!--SATA-->nvme | <!--Gfx-->AMD 680M | <!--Audio-->HDaudio | <!--USB-->USB3 | <!--Ethernet-->rtl8169 | <!--Test Distro--> | <!--Comments-->2025 64bit - |- | <!--Name-->Minisforum UM760 7640HS | <!--IDE-->{{N/A}} | <!--SATA-->nvme | <!--Gfx-->AMD 760 | <!--Audio-->HDaudio | <!--USB-->USB4 | <!--Ethernet-->rtl8169 and 2.5Gb | <!--Test Distro--> | <!--Comments-->2025 64bit - |- | <!--Name-->Peladn WO4 Mini PC | <!--IDE-->{{N/A}} | <!--SATA-->nvme | <!--Gfx-->AMD 760 | <!--Audio-->HDaudio | <!--USB-->USB3 | <!--Ethernet-->rtl8169 | <!--Test Distro--> | <!--Comments-->2025 64bit 7640HS - 19v 5.26A 120W - |- | <!--Name-->BossGame M4 Neo 7840HS | <!--IDE-->{{N/A}} | <!--SATA-->nvme | <!--Gfx-->AMD 780 | <!--Audio-->HDaudio | <!--USB-->USB3 | <!--Ethernet-->rtl8169 | <!--Test Distro--> | <!--Comments-->2025 64bit - |- | <!--Name-->Minisforum UM870 || <!--IDE-->{{N/A}} || <!--SATA-->NVme || <!--Gfx-->AMD 780M || <!--Audio-->HDaudio || <!--USB-->USB3 || <!--Ethernet-->2.5GbE || <!--Test Distro--> || <!--Comments-->2025 64bit - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || IDE || SATA || Gfx || Audio || USB || Ethernet || Test Distro || Comments |- | <!--Name-->GEEKOM A8 Max AI Mini PC AMD Ryzen™ 9 8945HS, Ryzen™ 7 8845HS or 8745HS | <!--IDE-->{{N/A}} | <!--SATA-->NVme | <!--Gfx-->AMD 780M | <!--Audio-->HDAudio with codec | <!--USB-->{{maybe| USB4}} | <!--Ethernet-->{{No|Dual 2.5 G Ethernet ports}} | <!--Test Distro--> | <!--Comments-->2025 64bit - |- | <!--Name-->Beelink SER 9 | <!--IDE-->{{N/A}} | <!--SATA-->NVme | <!--Gfx-->Radeon 890M | <!--Audio-->HDaudio | <!--USB-->USB4 | <!--Ethernet-->{{No| }} | <!--Test Distro--> | <!--Comments-->2025 64bit - Ryzen AI HX 370 strix point - |- | <!--Name-->GMKtec EVO-X2 mini pc | <!--IDE-->{{n/a}} | <!--SATA-->nvme | <!--Gfx-->AMD 8060S iGPU RDNA3.5 RADV GFX1151 | <!--Audio-->HDaudio | <!--USB-->USB4 | <!--Ethernet-->{{No| }} | <!--Test Distro--> | <!--Comments-->2025 64bit - amd ryzen AI Max+ 395 (16c32t) strix halo - |- | <!--Name-->BosGame M5 | <!--IDE-->{{n/a}} | <!--SATA-->nvme | <!--Gfx-->AMD 8060S iGPU RDNA3.5 RADV GFX1151 | <!--Audio-->HDaudio | <!--USB-->USB4 | <!--Ethernet-->{{No| }} | <!--Test Distro--> | <!--Comments-->2025 64bit - amd ryzen AI Max+ 395 (16c32t) - |- | <!--Name-->Steam Machine GabeCube | <!--IDE-->{{N/A}} | <!--SATA-->nvme | <!--Gfx-->semi-custom 1080p amd 7600m like with 28cu 8gb ddr6 gddr 10GFlops | <!--Audio-->hdaudio with codec | <!--USB-->usb3 | <!--Ethernet-->{{maybe|rtl8169}} | <!--Test Distro--> | <!--Comments-->2026 64bit amd 1772 hawk point2 6c12t zen4 avx512 FP7 socket with FCH51 - 16gb ddr5 - |- | <!--Name-->AMD Ryzen AI Halo Developer Platform Workstation | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments-->2026 64bit - amd ryzen AI Max+ 395 (16c32t) - |- | <!--Name-->GMKtec EVO-X1 PRO | <!--IDE--> | <!--SATA-->nvme | <!--Gfx-->AMD 890M with HDMI 2.1 and DP 2.1 | <!--Audio-->HDAudio | <!--USB-->USB4 40G and USB3 10G | <!--Ethernet-->2xIntel | <!--Test Distro--> | <!--Comments-->2026 64bit - AMD Ai 9 HX 470 Gorgon Point 12c 24t - 19v 120w - DDR5 - |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->AMD 8065S | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments-->2026 64bit - AMD Ai MAX+ 495 Gorgon Halo - |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |} ===Server Systems=== [[#top|...to the top]] ====IBM==== {| class="wikitable sortable" width="100%" ! width="15%" |Name ! width="5%" |IDE ! width="5%" |SATA ! width="10%" |Integrated Gfx ! width="10%" |Audio ! width="10%" |USB ! width="10%" |Ethernet ! width="15%" |Test Distro ! width="20%" |Comments |- | <!--Name-->xSeries 206m | <!--IDE-->{{yes}} | <!--SATA-->{{yes}} | <!--Gfx-->{{Maybe|ATI RN50b (VESA only)}} | <!--Audio-->{{n/a}} | <!--USB-->{{yes|USB 2.0 (UHCI/EHCI)}} | <!--Ethernet-->{{no|Broadcom}} | <!--Test Distro-->Nightly Build 2014-09-27 | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- |} ===Motherboard=== [[#top|...to the top]] * Late 2002, USB2.0 added and slightly better AROS sound support (AC97) appeared * 2002-2005 and still, to a limited extent, ongoing [http://en.wikipedia.org/wiki/Capacitor_plague bad capacitors] * Late 2003, ATX PSUs moved from 5V to 12v rails (extra 4pin on motherboard for CPU) * Late 2005, PCI Express replaced AGP and HDAudio replaced AC97 * Late 2007, ATX PSUs added extra 12V PCI-E connectors and 4+4pin for CPUs * Late 2010, USB3.0 appears on motherboards or needing a PCI-E motherboard slot * Late 2014 Hardware USB2 removed from USB3 chipsets ====AMD Sockets==== [[#top|...to the top]] =====Socket 7 (1997/1999)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->1997 VT82C586B (QFP-208) is the first from VIA with DDMA |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2000 VT82C686 has close to excellent DDMA support |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->SiS 5581/5582 SiS 5591/5595 SiS 530 /5595 SiS 600/5595 SiS 620/5595 |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |} =====Socket A 462 (2001/4)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->[http://www.sharkyextreme.com/hardware/motherboards/article.php/2217921/ABIT-NF7-S-nForce2-Motherboard-Review.htm Abit NF7-S] | <!--Chipset-->nForce 2 | <!--ACPI--> | <!--IDE-->2 ports | <!--SATA-->SIL 3112A | <!--Gfx--> | <!--Audio-->{{yes|ALC650 AC97 (Nvidia APU)}} | <!--USB-->{{yes}} | <!--Ethernet-->Realtek RTL 8201LB | <!--Opinion-->Firewire Realtek RTL8801B |- | <!--Name-->ASRock K7NF2 | <!--Chipset-->nforce2 ultra 400 | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA-->{{N/A}} | <!--Gfx-->{{yes|AGP 8x}} | <!--Audio-->CMedia CMI 9761A AC'97 | <!--USB-->{{yes}} | <!--Ethernet-->Realtek 8201 | <!--Opinion--> |- | <!--Name-->ASRock K7S8X | <!--Chipset-->SIS 746FX | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA--> | <!--Gfx-->{{yes|AGP 8x}} | <!--Audio-->{{yes|AC'97 cmedia}} | <!--USB-->{{maybe|USB2.0 works but does not boot}} | <!--Ethernet-->{{yes|SiS900}} | <!--Opinion--> |- | <!--Name-->ASRock K7S41GX | <!--Chipset-->SIS 741GX + DDR 333 | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA--> | <!--Gfx-->{{maybe|onboard sis does not work with vga or vesa but AGP 8x works}} | <!--Audio-->{{yes|AC97 SIS 7012}} | <!--USB-->{{maybe|USB2.0 works but does not boot}} | <!--Ethernet-->{{yes|SiS 900}} | <!--Opinion-->works ok |- | <!--Name-->[http://www.asus.com ASUS A7N8X] | <!--Chipset-->nForce2 | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA-->Silicon Image Sil 3112A | <!--Gfx-->1 AGP slot | <!--Audio-->{{yes|ac97 ALC650}} | <!--USB-->{{yes|ehci USB2.0}} | <!--Ethernet-->{{yes|rtl8201BL - nforce}} | <!--Opinion-->first total support for AROS in 2004/5 - damocles and M Schulz |- | <!--Name-->Biostar M7NCD | <!--Chipset-->nForce2 Ultra 400 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->{{yes|ALC650 AC97}} | <!--USB--> | <!--Ethernet-->{{yes|RTL8201BL}} | <!--Opinion--> |- | <!--Name-->Chaintech 7NJS Ultra Zenith | <!--Chipset-->nForce2 Ultra 400 | <!--ACPI--> | <!--IDE--> | <!--SATA-->Promise PDC 20376 | <!--Gfx--> | <!--Audio-->{{yes|CMI8738}} | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->DFI Lanparty NF2 Ultra | <!--Chipset-->nForce2 Ultra 400 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->{{no|via ac97 VT1616}} | <!--USB--> | <!--Ethernet-->RTL8139C | <!--Opinion--> |- | <!--Name-->ECS N2U400-A | <!--Chipset-->nForce2 Ultra 400 | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->{{no|Cmedia 9379A AC97}} | <!--USB-->{{yes|usb2.0}} | <!--Ethernet-->{{no|VIA VT6103L}} | <!--Opinion--> |- | <!--Name-->Gigabyte GA7N400L | <!--Chipset-->nForce2 Ultra 400 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->1 AGP 8x slot | <!--Audio-->{{yes|AC97 ALC650}} | <!--USB-->2 USB2.0 | <!--Ethernet-->RTL8100C | <!--Opinion--> |- | <!--Name-->[http://www.gigabyte.lv/products/page/mb/ga-8siml Gigabyte 8SIML] | <!--Chipset-->SIS 650 | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA--> | <!--Gfx-->{{maybe|VESA}} | <!--Audio-->{{yes|AC'97}} | <!--USB-->{{maybe|working}} | <!--Ethernet-->{{no|Realtek RTL8100L LAN}} | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Matsonic [http://www.elhvb.com/mobokive/archive/matsonic/manual/index.html Manuals] MS83708E | <!--Chipset-->SIS730 | <!--ACPI--> | <!--IDE-->{{yes|SiS 5513}} | <!--SATA-->{{N/A}} | <!--Gfx-->{{maybe|sis 305 no support use VESA}} | <!--Audio-->{{no|sis7018}} | <!--USB-->{{no|SiS 7001 USB 1.1 only}} | <!--Ethernet-->{{yes|SIS900}} | <!--Opinion-->little support |- | <!--Name-->[http://h10025.www1.hp.com/ewfrf/wc/document?docname=bph07585&lc=en&dlc=en&cc=us&dest_page=softwareCategory&os=228&tool=softwareCategory&query=Pavilion%20742n&product=89232 MSI MS-6367 HP 722n 742n (Mambo) (2001/2)] | <!--Chipset-->Nvidia nforce 220D (2001/2) | <!--ACPI--> | <!--IDE-->{{Yes}} | <!--SATA-->{{N/A}} | <!--Gfx-->GeForce2 AGP works 2D nouveau only | <!--Audio-->{{Maybe|AC97 ADI 1885 no volume control on Units 0-3}} | <!--USB-->{{Yes|4 USB1.1 ports AMD based - front 2 ports iffy}} | <!--Ethernet-->{{No|nForce}} | <!--Opinion-->Tested 20th Aug 2012 NB |- | <!--Name-->MSI K7N2 [http://us.msi.com/index.php?func=proddesc&maincat_no=1&prod_no=546/ Delta ILSR] Delta-L | <!--Chipset-->nForce2 (2002/3) | <!--ACPI--> | <!--IDE-->{{yes|Primary & Secondary ports}} IDE Tertiary port (RAID) | <!--SATA-->2 ports (RAID) | <!--Gfx-->{{yes|when fitted with an agp video card}} | <!--Audio-->{{yes|ac97 ALC650}} | <!--USB-->{{yes}} | <!--Ethernet-->{{yes|rtl8201BL - nforce}} | <!--Opinion-->runs AROS well. Tested with Icaros 1.2.3 |- | <!--Name-->MSI K7N2 Delta2-LSR Platinum | <!--Chipset-->nForce2 (2002/3) | <!--ACPI--> | <!--IDE-->{{yes|Primary & Secondary ports}} IDE Tertiary port (RAID) | <!--SATA-->2 ports (RAID) | <!--Gfx-->{{yes|when fitted with an agp video card}} | <!--Audio-->{{No|ac97 ALC655}} | <!--USB-->{{yes}} | <!--Ethernet-->{{yes|rtl8201BL - nforce}} | <!--Opinion-->runs AROS well. Tested with Icaros 1.2.3 |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->[http://www.sharkyextreme.com/hardware/motherboards/article.php/2204281/Soltek-SL-75MRN-L-nForce2-Motherboard-Review.htm Soltek 75FRN-L] | <!--Chipset-->nForce2 | <!--ACPI--> | <!--IDE-->{{yes|2 ports}} | <!--SATA-->{{N/A}} | <!--Gfx-->AGP slot | <!--Audio-->{{yes|ALC650}} | <!--USB-->{{yes|2 usb2.0}} | <!--Ethernet-->{{yes|Realtek RTL8201BL}} | <!--Opinion-->good support |- | <!--Name-->[http://www.3dvelocity.com/reviews/mach4nf2ultra/mach4.htm XFX Pine Mach4 nForce2 Ultra 400] | <!--Chipset-->nForce2 | <!--ACPI--> | <!--IDE-->{{yes|3 ports}} | <!--SATA-->{{maybe|2 ports VIA VT6240}} | <!--Gfx-->1 AGP 8x slot | <!--Audio-->{{yes|ALC650}} | <!--USB-->{{yes|2 USB2.0}} | <!--Ethernet-->{{yes|RTL8201BL}} | <!--Opinion-->some support |- | <!--Name-->ASUS A7V266 | <!--Chipset-->via KT266A + 8233 | <!--ACPI--> | <!--IDE-->{{no|issues}} | <!--SATA--> | <!--Gfx-->1 AGP slot | <!--Audio-->AC97 with AD1980 codec | <!--USB-->via 8233 | <!--Ethernet-->VIA VT6103 | <!--Opinion-->2002 issues with booting |- | <!--Name-->Asus A7V8X-X | <!--Chipset-->VIA KT400 | <!--ACPI--> | <!--IDE-->{{unk| }} | <!--SATA-->{{N/A}} | <!--Gfx-->{{yes|agp}} | <!--Audio-->{{unk|AC97 with ADI AD1980 codec}} | <!--USB-->{{unk|VIA 8235}} | <!--Ethernet-->{{unk|Realtek 10/100}} | <!--Opinion-->2003 not booting for Socket A for AMD Barton/Thoroughbred/Athlon XP/Athlon/Duron 2.25+ GHz CPU - 3 x DDR DIMM Sockets Max. 3 GB - |- |} =====Socket 754 (2004/5)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Abit NF8-V2 | <!--Chipset-->nForce3 250GB (2004/5) | <!--ACPI--> | <!--IDE-->{{yes|2 ports}} | <!--SATA-->{{maybe|2 ports}} | <!--Gfx-->1 AGP slot x8 | <!--Audio-->ALC658 ac97 | <!--USB-->{{yes|2 USB2.0}} | <!--Ethernet-->{{no|RTL8201C}} | <!--Opinion-->a little support but no Firewire VIA VT6306 |- | <!--Name-->Biostar CK8 K8HNA Pro | <!--Chipset-->nforce3 150 | <!--ACPI--> | <!--IDE--> | <!--SATA-->VT6420 thru ide legacy only | <!--Gfx--> | <!--Audio-->{{no|AC97 ALC655}} | <!--USB--> | <!--Ethernet-->Realtek RTL8110S | <!--Opinion-->Firewire VT6307 no |- | <!--Name-->[http://www.extremeoverclocking.com/reviews/motherboards/Chaintech_ZNF3-150_3.html Chaintech ZNF3-150 Zenith] | <!--Chipset-->nforce3 150 | <!--ACPI--> | <!--IDE-->2 ports | <!--SATA-->{{maybe|Sli3114 SATA via IDE emul}} | <!--Gfx-->1 AGP slot | <!--Audio-->{{no|VIA Envy24PT (VT1720) + VT1616}} | <!--USB-->{{Maybe|2 USB2.0}} | <!--Ethernet-->{{no|Broadcom GbE 5788}} | <!--Opinion-->very little support needs PCI cards but no Firewire VIA VT6306 |- | <!--Name-->DFI Lanparty UT nF3 250GB | <!--Chipset-->nForce3 250gb | <!--ACPI--> | <!--IDE-->2 ports | <!--SATA-->{{maybe|2 ports nForce3 and 2 Marvell SATA PHY}} | <!--Gfx--> | <!--Audio-->{{yes|AC97 ALC850}} | <!--USB-->{{Maybe|2 USB2.0}} | <!--Ethernet-->CK8S - Winfast NF3 250K8AA works and Marvell 88E1111 does not work | <!--Opinion-->2005 some support but no Firewire VIA VT6307 |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Gigabyte GA-K8N | <!--Chipset-->NVIDIA nForce3 150 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->Realtek ALC658 AC97 | <!--USB--> | <!--Ethernet-->Realtek RTL8100C | <!--Opinion-->Firewire TI43AB23 no |- | <!--Name-->Gigabyte K8NNXP | <!--Chipset-->nForce3 150 | <!--ACPI--> | <!--IDE--> | <!--SATA-->Sata sil3512 | <!--Gfx--> | <!--Audio-->ALC658 AC97 | <!--USB--> | <!--Ethernet-->RTl8110S | <!--Opinion-->Firewire TI STB82AA2 no |- | <!--Name-->Gigabyte GA-K8NSNXP | <!--Chipset-->nForce3 250GB | <!--ACPI--> | <!--IDE--> | <!--SATA-->SiI 3512 CT128 Sata Sil3515 | <!--Gfx--> | <!--Audio-->ALC850 AC97 | <!--USB--> | <!--Ethernet-->{{No|Marvel 88E8001}} | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->MSI K8N Neo-FIS2R | <!--Chipset-->nVIDIA NF3-250Gb | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->Realtek 7.1 AC'97 ALC850 | <!--USB--> | <!--Ethernet-->{{No|Marvell 88E1111}} | <!--Opinion--> |- | <!--Name-->[http://techreport.com/articles.x/5748/1 Shuttle AN50R] | <!--Chipset-->nF3-150 | <!--ACPI--> | <!--IDE--> | <!--SATA-->Sil 3112 | <!--Gfx--> | <!--Audio-->ALC650 AC97 | <!--USB--> | <!--Ethernet-->Nvidia nF3 (10/100) Intel 82540EM Gigabit | <!--Opinion-->Firewire VT6307 no |- | <!--Name--> Foxconn WinFast K8S755A | <!--Chipset-->SiS755 + SiS964 (DDR333) | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> {{yes|AC97}} | <!--USB--> | <!--Ethernet--> {{yes|RTL8169}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket 939 (2005)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Asus A8N-LA GeForce 6150 LE | <!--Chipset-->Geforce 6150 (MCP51) + nForce 430 (PC-3200) | <!--ACPI--> | <!--IDE-->{{yes|two ATA 133}} | <!--SATA-->{{maybe|four 3.0GB/s SATAII ports}} | <!--Gfx-->built in or PCI-E x16 | <!--Audio-->Realtek ALC883 HD Audio | <!--USB-->6 USB2.0 | <!--Ethernet-->Realtek RTL 8201CL | <!--Opinion--> |- | <!--Name-->Asus A8N-SLI Premium | <!--Chipset-->NVidia | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->{{Yes|PCIe slot}} | <!--Audio-->{{Yes|AC97}} | <!--USB-->{{Maybe}} | <!--Ethernet-->{{Yes|nForce LAN but not Marvell}} | <!--Opinion-->Works well |- | <!--Name-->DFI nF4 Ultra-D LanParty - Diamond Flower International sold to BenQ group 2010 | <!--Chipset-->nF4 | <!--ACPI--> | <!--IDE-->2 ports | <!--SATA-->4 ports SATA 2 | <!--Gfx-->2 PCIe x16 slots | <!--Audio-->AC97 with ALC850 codec | <!--USB--> | <!--Ethernet-->Dual Gigabit Ethernet, PCIe by Vitesse VSC8201 PHY nee Cicada 8201, PCI by Marvel 88E8001 | <!--Opinion-->2006 64bit - Four 184-pin DDR Dual-Channel Slots - 1 pci on Ultra, 2 pci on sli, |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus A8V E SE | <!--Chipset-->VIA K8T890 +VT8237R CHIPSET ATX AMD Motherboard with Athlon 64 X2 / Athlon 64 FX / Athlon 64 | <!--ACPI-->{{N/A}} | <!--IDE-->{{Yes}} | <!--SATA-->{{N/A}} | <!--Gfx-->{{N/A}} | <!--Audio-->{{Maybe}} AC97 driver using Realtek ALC850 codec | <!--USB-->{{Yes}} USB 2.0 only | <!--Ethernet-->{{No}} Marvell 88E8053 | <!--Opinion-->Good base but needs additional PCI cards added for better support |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->ASUS A8V Deluxe (2004) | <!--Chipset-->VIA K8T800 Pro (DDR400) | <!--ACPI--> | <!--IDE-->Promise 20378 2 ports | <!--SATA-->2 SATA2 | <!--Gfx--> | <!--Audio-->{{no|VIA VT8233A 8235 8237 AC97}} | <!--USB--> | <!--Ethernet-->{{no|Marvell 88E8001 Gigabit}} | <!--Opinion-->needs extra PCI cards |- |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Test Distro--> | <!--Comments--> |- | <!--Name-->AsRock 939Dual-SATA2 | <!--Chipset-->Ali Uli M1695 PCIe with M1567 AGP | <!--ACPI--> | <!--IDE-->2 ports | <!--SATA-->1 Sata with JMicron JMB360 chip | <!--Gfx-->1 pci-e and 1 agp | <!--Audio-->AC97 with ALC850 codec | <!--USB--> | <!--Ethernet-->Realtek RTL8201CL PHY ULi 10/100 | <!--Opinion-->64bit pci-e and agp combo on board - 4 ddr slots - |} =====Socket AM2 (2006/8) and AM2+ (2007-2010) ===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA-M61PME-S2 (rev. 2.x) | <!--Chipset-->NVIDIA® GeForce 6100 / nForce 430 chipset | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->{{maybe|VESA 2d for vga}} | <!--Audio-->{{yes|HDAudio Realtek ALC662 Audio Codec}} | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus M2N61-AR mini itx | <!--Chipset-->NVIDIA nForce 430 | <!--ACPI--> | <!--IDE-->1 | <!--SATA-->2 | <!--Gfx-->GeForce 6150SE via vga or 1 pci-e slot | <!--Audio-->HD Audio with codec | <!--USB-->Nvidia | <!--Ethernet-->Nvidia | <!--Opinion-->2006 32bit - 1 pci - 2 ddr2 dimm slots non-eec - |- | <!--Name-->asus m2n68-am se2 | <!--Chipset-->nvidia 630a 630/a MCP68SE | <!--ACPI--> | <!--IDE-->1 ports | <!--SATA-->2 ports MCP61 chipset is SATA over IDE, not SATA over AHCI and reports subsystem as 0x1 IDE, not 0x6 SATA | <!--Gfx-->{{Yes|nvidia 7025 2d and 3d thru vga}} | <!--Audio-->{{Yes|hd audio with realtek alc662 codec}} | <!--USB-->{{Yes| }} | <!--Ethernet-->{{Yes|nForce chipset RTL 8201CP}} | <!--Opinion-->2007 64bit Phenom IIX2, Athlon 64 LE X2, Sempron, and Phenom FX processors - ddr2 667Mhz ram max 4Gb - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA-MA770-UD3 (rev. 1.0) | <!--Chipset-->AMD 770 with SB700 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes| }} | <!--Gfx-->pci-e | <!--Audio-->{{yes|ALC888 codec }} | <!--USB-->{{yes|USB2}} | <!--Ethernet-->{{yes|rtl8169 8111C later 8111D}} | <!--Opinion-->Good support for AM2+ / AM2 with 4 ddr2 ram - 4 x PCI Express x1, 2 x PCI slots - firewire T.I. TSB43AB23 chip no support - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus M3A32-MVP Deluxe | <!--Chipset-->AMD 790FX RD790 + SB600 | <!--ACPI--> | <!--IDE--> | <!--SATA-->{{No|Marvell 88SE6121 SATA II}} | <!--Gfx-->pci-e 1.1 support | <!--Audio-->{{No|HD Audio ADI® AD1988}} | <!--USB--> | <!--Ethernet-->{{No|Marvell 88E8056}} | <!--Opinion--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->ASROCK N68-S N68C-S | <!--Chipset-->AMD based nForce 630a | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA-->{{yes|slimline DVD drive works}} | <!--Gfx-->{{maybe|GF 7025 use vesa}} | <!--Audio-->{{yes|HDAudio for VIA 1708S VT1705}} | <!--USB-->{{Maybe|echi usb 2.0}} | <!--Ethernet-->{{no|RTL8201EL / 8201CL - nforce}} | <!--Opinion-->2008 unbuffered 1066Mhz ddr2 ram - N68C-S may need noacpi added to grub boot line to disable pci temporarily to run as it cannot get to [PCI] Everything OK - |- | <!--Name-->Asus M2N68-AM Plus | <!--Chipset-->Athlon 64, Sempron, Athlon 64 X2, Athlon 64 FX with nvidia 630a | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->no vga, pci-e slot only | <!--Audio-->{{yes|HD Audio with ALC662 codec}} | <!--USB--> | <!--Ethernet-->{{no|RTL8211CL Gigabit LAN}} | <!--Opinion-->adding "noacpi noapic noioapic" to the GRUB options - Dual channel DDR2 1066, 800, 667 MHz - |- | <!--Name-->Gigabyte GA-M68M-S2 (1.0) S2P (2.3) S2L GA-M68SM-S2 (1.x) | <!--Chipset-->nForce 630a chipset | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->NVIDIA® GeForce 7025, vga (s2 and s2p), dvi (s2l) | <!--Audio-->ALC883 (S2), ALC888B (S2P), ALC662 (S2L), | <!--USB--> | <!--Ethernet-->RTL 8201CL (S2), 8211CL (S2P), 8211BL (S2L), | <!--Opinion-->2008 64bit possible with AMD AM2+ CPU on AM2 motherboard, the system bus speed will downgrade from HT3.0(5200MHz) to HT1.0(2000 MT/s) spec |- | <!--Name-->ASUS M2N68-VM | <!--Chipset-->nForce 630a (MCP68PVNT) | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->Nvidia GeForce ® 7050PV hdmi, dvi and vga | <!--Audio-->HD audio VIA 1708B codec | <!--USB--> | <!--Ethernet-->RTL 8211C | <!--Opinion-->2008 64bit - ddr2 800Mhz |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket AM3 White socket (2010/11)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Gigabyte GA-MA74GM-S2 GA-MA74GM-S2H | <!--Chipset-->740g with sb710 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes|bios IDE}} | <!--Gfx-->Radeon 2100 and pci-e slot | <!--Audio-->ALC888 (r1.x),ALC888b (r2.0), ALC888B (rev4.x) | <!--USB-->USB2 | <!--Ethernet-->rtl8169 Realtek 8111C later 8111D | <!--Opinion-->2010 64bit - 2 x 1.8V DDR2 DIMM sockets max 8 GB - Micro ATX Form Factor 24.4cm x 23.4cm - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->[http://www.vesalia.de/e_aresone2011.htm Aresone 2011] | <!--Chipset-->760g | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{Yes}} | <!--Gfx-->{{Maybe|no Radeon HD3000 driver yet<br>vesa driver works<br>and add PCIe card}} | <!--Audio-->{{Yes|HD Audio}} | <!--USB-->{{Yes|USB2.0}} | <!--Ethernet-->{{yes}} | <!--Opinion-->Good support - 4 DDR3 memory sockets - |- | <!--Name-->Foxconn A76ML-K 3.0 | <!--Chipset-->AMD 760g rev3.0 | <!--ACPI--> | <!--IDE-->{{Yes|1 }} | <!--SATA-->{{Yes|4 in IDE mode }} | <!--Gfx-->HD3000 with pci-e slot | <!--Audio-->HDAudio with ALC662-GR codec | <!--USB-->USB2 | <!--Ethernet-->rtl8169 rtl8111E | <!--Opinion-->2011 64bit - 2 ddr3 slots - 2 pci slots - |- | <!--Name-->GA-MA770T-UD3P (rev. 1.0 to 1.4) | <!--Chipset-->amd 770 with sb710 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{yes|4 sata}} | <!--Gfx-->pci-e | <!--Audio-->{{yes|HDAudio with Realtek ALC888 codec}} | <!--USB-->{{yes| }} | <!--Ethernet-->{{yes|rtl8168 rtl8111c/d}} | <!--Opinion-->2011 64 - 4 ddr3 dimm slots - |- | <!--Name-->Gigabyte GA-MA770-UD3 (rev. 2.0 2.1) | <!--Chipset-->AMD 770 with SB700 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes| }} | <!--Gfx-->pci-e | <!--Audio-->{{yes|ALC888 codec }} | <!--USB-->{{yes|USB2}} | <!--Ethernet-->{{yes|rtl8169 8111C later 8111D}} | <!--Opinion-->Good support for AM3 with 4 ddr2 ram - 4 x PCI Express x1, 2 x PCI slots - firewire T.I. TSB43AB23 chip no support - |- | <!--Name-->Asus M4A785TD-M PRO | <!--Chipset-->785G and SB710 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{Maybe|ide legacy}} | <!--Gfx-->{{Maybe|ATI Radeon HD 4200 - use vesa}} or pci-e 2.0 slot | <!--Audio-->{{Yes|HD Audio}} | <!--USB-->{{Yes| }} | <!--Ethernet-->{{Yes| }} | <!--Opinion-->Good support with 1366 ddr3 ram - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->ASUS M4A88T-I Deluxe ITX | <!--Chipset-->AMD 880G with AMD SB710 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->Three SATA 3Gbps | <!--Gfx-->Radeon HD 4350 GPU with HDMI and DVI or One 16x PCI-Express 2.0 | <!--Audio-->HDAudio with Realtek ALC889 | <!--USB-->6 x USB 2, 2 x USB 3 | <!--Ethernet-->{{No|Realtek RTL8112L}} | <!--Opinion-->2014 64bit - 2 SODIMM DDR3 slots max 8GB |- | <!--Name-->Asus M4A88T-M Version E5907 E5826 | <!--Chipset-->AMD 880G SB710 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->Radeon 4250 | <!--Audio-->HD Audio with VIA VT 1708S codec | <!--USB--> | <!--Ethernet-->Realtek rtl8169 8111E | <!--Opinion-->2010 64bit - |- | <!--Name-->GigaByte 890GPA-UD3H | <!--Chipset-->AMD 890GX together with SB850 | <!--ACPI--> | <!--IDE--> | <!--SATA-->Yes | <!--Gfx-->use pci-e nvidia | <!--Audio-->Maybe - ALC892 rev. 1.0, ALC892 rev 2.1, ALC889 rev. 3.1 | <!--USB-->Yes | <!--Ethernet-->Yes | <!--Opinion-->works well overall |- | <!--Name-->Gigabyte GA-890FXA-UD7 | <!--Chipset-->AMD 890FX with SB850 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes|IDE }} | <!--Gfx--> | <!--Audio-->ALC889 (rev 2.x) | <!--USB-->{{Yes|AMD USB2 but limited with NEC D720200F1 USB3}} | <!--Ethernet-->2 x Realtek 8111D | <!--Opinion-->2012 64bit - XL-ATX Form Factor 32.5cm x 24.4cm - 4 ddr3 slots - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI 890GXM-G65 | <!--Chipset-->890GX + SB750 | <!--ACPI--> | <!--IDE--> | <!--SATA-->{{Maybe|legacy}} | <!--Gfx-->{{Maybe|ATI 4290 built-in (vesa)}} | <!--Audio-->{{Maybe|ALC889 DD GR}} HD Audio crackles | <!--USB-->{{Yes}} | <!--Ethernet-->{{Yes|RTL 8169}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->ASRock N68-VS3 FX | <!--Chipset-->NVIDIA® GeForce 7025 / nForce 630a | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 Sata2 | <!--Gfx-->Integrated NVIDIA® GeForce 7025 | <!--Audio-->HD Audio with VIA® VT1705 Codec | <!--USB-->USB2 | <!--Ethernet-->Realtek PHY RTL8201EL | <!--Opinion-->2010 64bit - 2 x DDR3 DIMM slots - |- | <!--Name-->MSI GF615M-P35 MS-7597 | <!--Chipset-->NVIDIA® nForce 430 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->GeForce 6150SE | <!--Audio-->{{Maybe|HD Audio with Realtek® ALC888S}} | <!--USB-->{{No|freezes}} | <!--Ethernet-->{{No|Realtek 8211CL}} | <!--Opinion-->2010 64bit |- | <!--Name-->Gigabyte GA-M68MT-S2 | <!--Chipset--> nForce 630a | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->NVIDIA® GeForce 7025 vga | <!--Audio-->ALC888B (1.3), ACL887 (3.1), | <!--USB--> | <!--Ethernet-->RTL8211CL (all) | <!--Opinion-->2010 64bit possible, AMD AM3 CPU on this motherboard, the system bus speed will downgrade from HT3.0 (5200MT/s) to HT1.0 (2000 MT/s) spec |- | <!--Name-->Gigabyte GA-M68MT-S2P | <!--Chipset--> nForce 630a | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->NVIDIA® GeForce 7025 vga | <!--Audio-->ALC888B (1.x 2.x), ALC889 (3.0), ALC888B/889 (3.1), | <!--USB--> | <!--Ethernet-->RTL8211CL (all) | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus M4N78 PRO | <!--Chipset-->NVIDIA GeForce 8300 | <!--ACPI--> | <!--IDE-->1 xUltraDMA 133/100 | <!--SATA-->6 xSATA 3 Gbit/s ports | <!--Gfx-->Integrated NVIDIA® GeForce® 8 series GPU with 1 PCIe 2.0 slot | <!--Audio-->HD Audio with VIA1708S 8 -Channel codec | <!--USB-->12 USB 2.0 ports (8 ports at mid-board, 4 ports at back panel) | <!--Ethernet-->NVIDIA Gigabit | <!--Opinion-->4 x DIMM, Max. 16 GB, DDR2 1200(O.C.)/1066*/800/667 ECC,Non-ECC,Un-buffered Memory - ATX Form Factor 12 inch x 9.6 inch ( 30.5 cm x 24.4 cm ) - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |} =====Socket AM3+ Black socket (2012/15)===== *095W FX-6300 FD6300WMHKBOX (bulldozer SSE4.1 AVX) 970 mobos with FX-8320E 8core Black Editions FD832EWMHKBOX FX-8370E (Vishera/Piledriver) *125W FX-6310 (bulldozer) 970 mobos with FX-8320 FX-8350 FX-8370 (Vishera/Piledriver) *220W 990FX mobos with FX-9000 FX-9370 FX-9590 {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->ASUS M5A78L-M LX3 | <!--Chipset-->AMD 760G with SB710 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{Yes|bios IDE mode}} | <!--Gfx-->HD3000 with pci-e slot | <!--Audio-->HDAudio with ALC887, V? ALC892 codecs | <!--USB-->USB2 | <!--Ethernet-->{{No|Qualcomm Atheros 8161/8171 add realtek 8111? pci-e card}} | <!--Opinion-->2012 64bit - uATX Form Factor 9.6 inch x 7.4 inch ( 24.4 cm x 18.8 cm ) - 2 x DIMM, Max. 16GB, DDR3 - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA-78LMT-S2P | <!--Chipset-->AMD 760G and SB710 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{yes|6 SATA2 ports}} | <!--Gfx-->GT240 and a nv7900gs, both pci-e | <!--Audio-->{{Maybe|ALC889 (r3.1), ALC??? (rev. 4.0), ALC887 (r5.x)}} | <!--USB-->4 USB2 | <!--Ethernet-->{{Maybe|Realtek 8111E (r3.1), Atheros (rev4.0), Atheros (r5.x) }} | <!--Opinion-->2012 offers very poor control over its EFI vs. BIOS booting partition features |- | <!--Name-->Gigabyte GA-78LMT-USB3 (r3.0), (r4.1 Blue board), (r5.0 dark board), (rev6 dark mobo) | <!--Chipset-->AMD 760G and SB710 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes|Bios IDE mode for SATA2 on early ones}} | <!--Gfx-->AMD HD3000, pci-e GT240 and a nv7900gs | <!--Audio-->{{Maybe|ALC??? (r3.0), ALC887 (r4.1), VIA VT2021 (r5.0), Realtek® ALC892 codec (rev6) }} | <!--USB-->{{yes|AMD USB2 but not VIA® VL805 USB3}} | <!--Ethernet-->Realtek GbE | <!--Opinion-->2013 64bit - Micro ATX Form Factor 24.4cm x 24.4cm - 4 x DDR3 DIMM sockets - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI 760GM | <!--Chipset-->ATI 760G plus SB710 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{yes| }} | <!--Gfx-->HD3000 Use Vesa | <!--Audio-->{{Maybe|P33 VT1705; P34, P21 and P23 (FX) MS7641 v3.0 ALC887, E51 ALC892}} | <!--USB-->{{yes| }} | <!--Ethernet-->{{Yes|Realtek}} | <!--Opinion-->P23 issues with audio ALC887 crackles thru earphones - |- | <!--Name-->Gigayte GA-MA770T-UD3P (rev. 3.1) | <!--Chipset-->amd 770 with sb710 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata | <!--Gfx-->pci-e slot | <!--Audio-->HDaudio with Realtek ALC888/892 codec | <!--USB--> | <!--Ethernet-->rtl8169 rtl8111d/e | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->ASRock 890FX Deluxe5 Extreme3 | <!--Chipset-->AMD 890FX + AMD SB850 or SB950 (Extreme3) | <!--ACPI--> | <!--IDE-->{{Yes}} | <!--SATA-->{{Yes}} | <!--Gfx-->{{N/A}} | <!--Audio-->{{Maybe|ALC892}} | <!--USB-->{{Yes}} | <!--Ethernet-->{{Yes|RTL8111E rtl8169}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus M5A97 R2.0 EVO | <!--Chipset-->AMD 970 and SB950 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->Asmedia SATA Controller | <!--Gfx-->n/a | <!--Audio-->HDAudio with Realtek ALC887 (LE), ALC887 (Regular), ALC892 (EVO) codec | <!--USB-->4 USB 2.0 and 2 Asmedia USB3.0 Controller | <!--Ethernet-->Realtek 8111F | <!--Opinion--> |- | <!--Name-->Gigabyte GA-970A-D3 | <!--Chipset-->AMD 970 with SB950 | <!--ACPI--> | <!--IDE-->{{Yes| }} | <!--SATA-->{{Yes|IDE mode}} | <!--Gfx-->pci-e | <!--Audio--> ALC??? (rev. 1.0/1.1), ALC887 (rev1.2), VIA VT2021 codec (rev 1.3 1.4 and rev3.0) | <!--USB-->{{yes|AMD USB2 but not Etron EJ168 chip (USB3)}} | <!--Ethernet-->Realtek GbE 8111E (all revisions), | <!--Opinion-->2015 64bit - ATX Form Factor 30.5cm x 22.4cm - 4 x 1.5V DDR3 DIMM sockets - |- | <!--Name-->MSI 970 Gaming | <!--Chipset-->970FX SB950 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->Realtek® ALC1150 Codec | <!--USB-->6 usb2 with 2 USB3 VIA VL806 Chipset | <!--Ethernet-->Killer E2205 Gigabit LAN | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus M5A99X EVO | <!--Chipset-->990X - RD980 with SB920 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->2 pci-e gen ? | <!--Audio-->HDAudio with ALC892 codec | <!--USB--> | <!--Ethernet-->rtl8169 realtek 8111e | <!--Opinion-->2012 64bit - |- | <!--Name-->Gigabyte GA-990XA-UD3 | <!--Chipset-->AMD 990 with SB950 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes| }} | <!--Gfx--> | <!--Audio-->ALC889 (rev 1.x, 3.0, 3.1), | <!--USB-->{{yes|AMD USB2 not 2 x Etron EJ168 chips for USB3}} | <!--Ethernet-->realtek rtl8169 8111e | <!--Opinion-->2012 64bit - ATX Form Factor; 30.5cm x 24.4cm - 4 ddr3 slots - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====AMD Fusion (2011/14)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | 1.2GHz single Bobcat Fusion C30 + Hudson M1 | ACPI | IDE | SATA | AMD 6250 | Audio | USB | Ethernet | <!--Opinion-->2011 64bit does not support AVX or SSE 4.1 - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2011 64bit does not support AVX or SSE 4.1 - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | Asus E35M1-M PRO uATX | 1.6GHz 18W AMD Fusion E-350 dual core + Hudson M1 | ACPI | {{N/A}} | SATA | AMD 6310 - no HD driver yet | ALC887 VD2 | USB | RTL8111E | 2011 64bit does not support AVX or SSE 4.1 - EFI bios - pci slot - |- | Asus E35M1-I Deluxe miniITX | 1.6GHz dual AMD Fusion E350 + Hudson M1 + DDR3 | ACPI | {{N/A}} | SATA | AMD 6310 - no HD driver yet | ALC892 | USB | Realtek 8111E | 2011 64bit does not support AVX or SSE 4.1 - no support for Atheros AR5008 on a Mini PCI-E - 1 pci slot - |- | ASRock E350M1 / USB3 (also version with USB3.0 added) | 1.6GHz dual AMD Fusion E350 + Hudson M1 | ACPI | {{N/A}} | SATA - 4 SATA3 | {{Maybe|AMD 6310 - use vesa with hdmi and dvi}} | {{Yes|Audio ALC892 playback but no HDMI output}} | USB - 4 USB2.0 and 2 USB3.0 | {{Yes|rtl8169 for Realtek rtl8111E}} | 2011 64bit does not support AVX or SSE 4.1 - 1 pci-e 2.0 x4 slot - f2 or del bios, f11 boot select - |- | <!--Name-->Gigabyte GA-E350N-USB3 mini-ITX | <!--Chipset--> Hudson M1 FCH | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 SATA3 | <!--Gfx--> plus HDMI, DVI | <!--Audio-->ALC892 | <!--USB-->2 NEC USB3.0 with 4 USB2.0 | <!--Ethernet-->rtl8169 for Realtek rtl8111E | <!--Opinion-->2011 64bit does not support AVX or SSE 4.1 - 1 pci slot - |- | <!--Name-->Gigabyte GA-E350N Win8 V1.0 | <!--Chipset-->Hudson M1 FCH A45 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 SATA3 | <!--Gfx-->{{maybe|Use VESA - AMD 6310 plus HDMI, DVI}} | <!--Audio-->{{yes|ALC887 playback through headphones but not thru hdmi}} | <!--USB-->{{maybe|4 USB2.0 needs more testing}} | <!--Ethernet-->{{yes|rtl8169 for Realtek 8111e}} | <!--Opinion-->2011 64bit does not support AVX or SSE 4.1 - works well but need to test with sata hard disk |- | <!--Name-->MSI E350IA-E45 | <!--Chipset-->e-350 + Hudson M1 + DDR3 | <!--ACPI-->no support | <!--IDE-->{{N/A}} | <!--SATA-->4 Sata3 ports | <!--Gfx-->AMD 6310 gpu | <!--Audio-->ALC HDA | <!--USB-->6 USB2.0 and 2 USB3.0 through NEC 720200 chipset | <!--Ethernet-->Realtek RTL8111E | <!--Opinion-->2011 64bit does not support AVX or SSE 4.1 - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->ASUS E45M1-M PRO | <!--Chipset-->E450 APU with Hudson M1 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->ALC887 | <!--USB--> | <!--Ethernet-->Realtek | <!--Opinion-->2011 64bit does not support AVX or SSE 4.1 - |- | <!--Name-->ASUS E45M1-I Deluxe | <!--Chipset-->E-450 together | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->ALC892 | <!--USB--> | <!--Ethernet-->Realtek 8111E | <!--Opinion-->2011 64bit does not support AVX or SSE 4.1 - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket FM1 (2011/13)===== On board Graphic on CPU - HD6410D, HD6530D, HD6550D, {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->ASUS F1A55-M LE | <!--Chipset--> with AMD A55 FCH (Hudson D2) | <!--ACPI--> | <!--IDE--> | <!--SATA-->6 x SATA 3Gbit/s port(s), blue Support Raid 0, 1, 10, JBOD | <!--Gfx-->PCI-e 2.0 slot or Integrated AMD Radeon™ HD 6000 in Llano APU | <!--Audio-->Realtek® ALC887 Audio CODEC | <!--USB-->6 USB2.0 ports | <!--Ethernet-->Realtek 8111E rtl8169 | <!--Opinion-->2012 2011 64bit does not support AVX or SSE 4.1 - A-Series/E2- Series APUs up to 4 cores - 2 x DIMM, Max. 32GB, DDR3 2250(O.C.)/1866/1600/1333/1066 MHz Non-ECC, Un-buffered Memory Dual Channel Memory Architecture - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket FM2 White Socket (2012/13)===== Onboard Gfx on CPU - HD6570, HD7480D, HD7540D, {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset-->A75 A85X | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2012 64bit does not support AVX or SSE 4.1 - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket FM2 Plus Black socket (2013/15)===== Onboard Gfx on CPU - HD6570, HD7480D, HD7540D, {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset-->A88X | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket AM1 FS1b socket (2014/1x)===== 5350 4 core Jaguar cores 2GHz with Integrated AMD Radeon R Series Graphics in the APU Kabini [Radeon HD 8400] Later Beema APU with 2/4 core Puma (slightly updated Jaguar) cores, GCN graphics and a compute capable Radeon core, along with a brand new AMD security processor and FT3 BGA packaging (probably best avoided for long term survival). {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->ASUS AM1I-A | <!--Chipset--> | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->HD Audio Realtek® ALC887-VD | <!--USB--> | <!--Ethernet-->Realtek 8111GR 8168 | <!--Opinion-->2011 64bit may support AVX or SSE 4.1 - |- | <!--Name-->MSI AM1I | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->HD Audio ALC887 | <!--USB--> | <!--Ethernet-->Realtek 8111G | <!--Opinion--> |- | <!--Name-->MSI AM1M | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->HD Audio ALC887 | <!--USB--> | <!--Ethernet-->Realtek 8111G | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->BGA FT3 AM1x |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket AM4 FM3 Summit Ridge Zen Zen+ (2016/22)===== Jim Keller’s group designed x86 Zen CPU - new and covering the same AM4 platform/socket for desktop Zen will also shift from Bulldozer’s Clustered Multithreading (CMT) to Simultaneous Multithreading (SMT, aka Intel’s Hyperthreading). CMT is the basis for Bulldozer’s unusual combination of multiple integer cores sharing a single FPU within a module, so the move to SMT is a more “traditional” design for improving resource usage Trusted Platform Module, or fTPM, that Windows 11 requires. Ryzen processors using a firmware TPM are causing stutters, even when doing mundane tasks. To enable TPM 2.0 on your AMD system please follow the steps below. <pre> Power on system and press DEL or F2 to get into the BIOS. Navigate to Advanced\CPU Configuration. Enable AMD fTPM switch. Press F10 to save changes. </pre> {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Asus ROG Crosshair VI Hero | <!--Chipset-->X370 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e 3.0 (1x16 or 2x8) | <!--Audio-->SupremeFX audio features an S1220 codec | <!--USB--> | <!--Ethernet-->Intel I211 | <!--Opinion-->Ryzen 7 1800X 1700X |- | <!--Name-->Biostar X370gtn Itx Am4 | <!--Chipset-->AMD X370 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio-->HDAudio with ALC892 | <!--USB--> | <!--Ethernet-->Realtek Dragon LAN RTL8118AS | <!--Opinion--> 2 ddr4 slots |- | <!--Name-->Gigabyte GA-AX370 K7 | <!--Chipset--> X370 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio-->HDAudio with 2 x Realtek® ALC1220 codec 0x10EC, 0x0295 | <!--USB--> | <!--Ethernet-->1 intel and 1 E2500 | <!--Opinion--> 4 ddr4 slots |- | <!--Name-->MSI Xpower Gaming Titanium | <!--Chipset--> X370 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio-->8-channel Realtek 1220 Codec 0x10EC, 0x0295 | <!--USB-->ASMedia® ASM2142 and amd cpu | <!--Ethernet-->1 x Intel® I211AT Gigabit LAN | <!--Opinion--> 2 ddr4 slots |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus Prime B350 Plus ATX | <!--Chipset-->B350 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> x PCIe 3.0/2.0 x16 (x16 mode) | <!--Audio-->Realtek® ALC887 8-Channel | <!--USB--> | <!--Ethernet-->Realtek® RTL8111H | <!--Opinion-->Ryzen 5 1600x 1600 1500X 1400 - 4 x DIMM Max 64GB, DDR4 up to 2666MHz ECC and non-ECC Memory - ATX 12 inch x 9.35 inch ( 30.5 cm x 23.7 cm ) - 2 pci |- | <!--Name-->Asus PRIME B350M-A/CSM Micro ATX | <!--Chipset-->AMD B350 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio-->HDaudio with | <!--USB--> | <!--Ethernet-->Realtek LAN | <!--Opinion-->Ryzen 3 1300x 1200 1100 |- | <!--Name-->AsRock Pro4 AB350 | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->2 PCIe 3.0 x16, 4 PCIe 2.0 x1 | <!--Audio-->Realtek ALC892 | <!--USB--> | <!--Ethernet-->Realtek | <!--Opinion-->2017 64bit - |- | <!--Name-->ASRock AB350 Gaming-ITX/ac | <!--Chipset--> B350 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio--> | <!--USB--> | <!--Ethernet-->Intel LAN | <!--Opinion--> |- | <!--Name-->MSI B350 Tomahawk Arctic Mortar | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->1 x PCIe 3.0 x16 (x16 mode) | <!--Audio-->Realtek ALC892 | <!--USB--> | <!--Ethernet-->Realtek RTL8111H | <!--Opinion-->white and grey colours - 2 pci-e and 2 pci slots - m.2 in middle - atx 12 in by 9.6 in and matx versions - |- | <!--Name-->Jginyue M-ATX B350M-TI | <!--Chipset-->B350 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Jginyue B350I-Plus ITX | <!--Chipset-->B350 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->ASRock A320M-ITX MINI ITX Rev1.0 Rev2 Rev2.1 | <!--Chipset-->A320 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2018 |- | <!--Name-->Asus PRIME A320M-C R2.0 rev1.1 A320M-K | <!--Chipset-->A320 A/B300 SFF | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->PCIe 3.0 | <!--Audio-->HD audio with Realtek ALC887 alc897 CODEC | <!--USB-->2 usb 3.1 gen 1 | <!--Ethernet-->Realtek 8111E | <!--Opinion-->2019 64bit - 3rd/2nd/1st Gen AMD Ryzen™ / 2nd and 1st Gen AMD Ryzen™ with Radeon™ Vega |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI A320M-A PRO MicroATX | <!--Chipset-->AMD A320 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->pci-e 3.0 | <!--Audio-->HDAudio Realtek® ALC892 | <!--USB-->USB3 | <!--Ethernet-->Realtek® 8111H | <!--Opinion-->2019 64bit - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus ROG X399 Zenith Extreme | <!--Chipset-->AMD X399 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio--> supremefx s1220 | <!--USB--> | <!--Ethernet-->intel | <!--Opinion-->Threadripper 1950X 1920X 1900X TR4 skt |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->AsRock Fatality X470 Gaming K4 mATX | <!--Chipset-->X470 | <!--ACPI--> | <!--IDE--> | <!--SATA-->nvme | <!--Gfx-->pci-e rebar possible | <!--Audio--> | <!--USB--> | <!--Ethernet-->intel | <!--Opinion--> |- | <!--Name-->Asrock Fatal1ty X470 Gaming-ITXac AMD AM4 | <!--Chipset-->AMD X470 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet-->intel | <!--Comments--> |- | <!--Name-->ASUS ROG STRIX X470-I GAMING AM4 ITX Motherboard | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus B450-I Gaming | <!--Chipset-->AMD B450 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->high VRM temps - raven ridge 14nm+ like 2200G 2400G |- | <!--Name-->AsRock B450 Gaming K4 | <!--Chipset-->B450 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> alc892 | <!--USB--> | <!--Ethernet--> | <!--Opinion--> 4 ddr4 slots - low VRM thermals 3900x 3950x |- | <!--Name-->Gigabyte B450 I Aorus Pro Wifi | <!--Chipset-->AMD B450 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->1 nvme pcie3 with 4 sata | <!--Gfx-->pcie | <!--Audio-->HDAudio with Realtek® ALC1220-VB codec | <!--USB--> | <!--Ethernet-->Intel LAN | <!--Opinion-->very high vrm temps |- | <!--Name-->Jginyue B450i Gaming ITX | <!--Chipset-->B450 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata3 - none nvme | <!--Gfx-->pcie3 | <!--Audio-->HDAudio | <!--USB--> | <!--Ethernet-->1G | <!--Opinion-->2021 64 2nd 3rd AMD - 2 ddr4 dimm slots |- | <!--Name-->MSI b450 tomahawk max | <!--Chipset--> b450 | <!--ACPI--> | <!--IDE-->{{n/A}} | <!--SATA--> | <!--Gfx-->PCIe 3.0 | <!--Audio-->HD audio with Realtek® ALC892 Codec | <!--USB--> | <!--Ethernet-->Realtek 8111H | <!--Opinion--> |- | <!--Name-->MSI B450 Pro Carbon | <!--Chipset-->B450 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> ALC codec | <!--USB--> | <!--Ethernet-->Intel LAN | <!--Opinion--> |- | <!--Name-->MSI B450-A PRO | <!--Chipset-->B450 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->ALC892 | <!--USB--> | <!--Ethernet-->rtl8169 8111h | <!--Opinion--> |- | <!--Name-->MSI B450I GAMING Plus AC ITX | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2019 - 2nd and 3rd gen AMD - 2 ddr4 slots - |- | <!--Name-->MSI B450 GAMING PLUS MAX | <!--Chipset-->B450 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->HDAudio with Realtek® ALC892/ALC897 Codec | <!--USB-->USB3 | <!--Ethernet-->rtl8169 8111H | <!--Opinion--> |- | <!--Name-->MAXSUN AMD Challenger B450M M-ATX (aka Soyo) | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->ASRock X570 PHANTOM GAMING-ITX/TB3 Mini ITX AM4 | <!--Chipset-->X570 | <!--ACPI--> | <!--IDE--> | <!--SATA-->nvme | <!--Gfx-->PCIe 4.0 | <!--Audio--> ALC1200 | <!--USB--> | <!--Ethernet-->Intel LAN | <!--Comments--> |- | <!--Name-->Asus ROG Crosshair VIII Dark Hero | <!--Chipset-->AMD X570 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> SupremeFX7.1 codec | <!--USB--> | <!--Ethernet-->Intel® I211-AT and Realtek® RTL8125-CG 2.5G LAN | <!--Opinion--> |- | <!--Name-->Asus ROG Strix X570-I Gaming Mini ITX AM4 Motherboard | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI MPG X570 Gaming Plus | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> alc1220 codec | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus ROG Strix B550-i AM4 ITX Motherboard | <!--Chipset--> | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2022 - |- | <!--Name-->Jginyue Jingyue B550i Gaming itx | <!--Chipset-->B550 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->3 with 1 nvme | <!--Gfx-->1 pci-e 4 | <!--Audio-->HDAudio alc | <!--USB--> | <!--Ethernet-->1G | <!--Comments-->2022 64bit max of Ryzen 5500 (c t), 5600, 5600g (6c12t) - 2 ddr4 |- | <!--Name-->Asrock B550 PHANTOM GAMING ITX/AX | <!--Chipset-->AMD B550 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> pci-e | <!--Audio-->HDAudio with alc1220 codec | <!--USB-->USB3 | <!--Ethernet-->{{no|intel 2.5G}} | <!--Comments--> |- | <!--Name-->AsRock B550M-ITX/ac | <!--Chipset-->B550 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->HDAudio with Realtek ALC887 ALC897 Audio Codec | <!--USB--> | <!--Ethernet-->Realtek Gigabit LAN | <!--Opinion-->2022 - 2 ddr4 slots |- | <!--Name-->AsRock ASRock B550M-HDV | <!--Chipset-->B550 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->nvme and sata3 | <!--Gfx-->pci-e 4.0 | <!--Audio-->HDAudio with Realtek ALC887 or ALC897 Audio Codec unknown | <!--USB-->usb3 | <!--Ethernet-->{{yes|rtl8169 Realtek rtl8111h Gigabit LAN}} | <!--Opinion-->2022 - 2 ddr4 slots - 1 pcie x1 slot - |- | <!--Name-->Asus ROG STRIX B550-A GAMING | <!--Chipset-->B550 | <!--ACPI--> | <!--IDE--> | <!--SATA-->PCIe Gen4 x4 & SATA3 | <!--Gfx-->pci-e 4 | <!--Audio--> supremefx S1220A | <!--USB--> | <!--Ethernet-->{{No|Intel® I225-V 2.5Gb}} | <!--Opinion--> |- | <!--Name-->Gigabyte AMD B550I AORUS PRO AX Mini-ITX rev 1.0 | <!--Chipset-->AMD B550 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->2 nvme pci-e3 with 4 sata3 | <!--Gfx-->pci-e | <!--Audio-->Realtek® ALC1220-VB codec | <!--USB--> | <!--Ethernet-->{{no|Realtek® 2.5GbE LAN}} | <!--Opinion-->2021 2 x DDR4 DIMM sockets 1Rx8/2Rx8/1Rx16 - |- | <!--Name-->Gigabyte B550 AORUS ELITE AX V2 ATX | <!--Chipset-->B550 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->PCI-e 4.0 DP and hdmi | <!--Audio-->HDAudio ALC1200 | <!--USB-->USB3 USB 3.2 Gen1 Type-C | <!--Ethernet-->{{No|2.5GbE LAN}} | <!--Opinion-->2022 64bit- finer tuning than A520's - AMD Ryzen 5000 Series/ 3rd Gen Ryzen and 3rd Gen Ryzen with Radeon Graphics CPU - Dual Channel ECC/ Non-ECC Unbuffered DDR4, 4 DIMMs - |- | <!--Name-->Gigabyte B550M DS3H mATX | <!--Chipset--> B550 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->2 NVMe | <!--Gfx-->PCI-e 4.0 | <!--Audio-->HDaudio ALC887 | <!--USB-->USB3 | <!--Ethernet-->realtek rtl8118 | <!--Opinion-->2021 64bit - 4 ddr4 dimms - |- | <!--Name-->MSI MPG B550 GAMING PLUS ATX | <!--Chipset--> B550 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->PCI-e 4.0 | <!--Audio-->HDAudio ALC892 | <!--USB-->USB 3 | <!--Ethernet-->rtl8169 Realtek 8111H | <!--Opinion-->2022 64bit - 3rd Gen AMD Ryzen Processors - 4 dimm ddr4 - |- | <!--Name-->MSI MAG B550 TOMAHAWK ATX | <!--Chipset--> B550 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe 1 x M.2, Socket 3, M Key (up to Type 22110) and 1 x M.2, Socket 3, M Key (Type 2242/2260/2280) | <!--Gfx-->PCI-e 4.0 with dp and hdmi | <!--Audio-->HDaudio ALC1200 | <!--USB-->USB3 1 x USB 3.1 Type-C and 1 x USB 3.1 Type-A | <!--Ethernet-->Realtek RTL8125B and Realtek RTL8111H | <!--Opinion-->2022 64bit - 4 Dimm slots - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Jginyue A520M-H mATX | <!--Chipset-->A520 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> old bios with random issues with APU ryzens - |- | <!--Name-->Gigabyte A520M S2H mATX | <!--Chipset-->AMD A520 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->HDAudio | <!--USB--> | <!--Ethernet-->Realtek 1GbE | <!--Opinion-->2022 64bit Zen3 65W and up - 2 ddr4 - |- | <!--Name-->Gigabyte A520I AC mITX mini-itx | <!--Chipset-->AMD A520 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio-->HDAudio | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2022 64bit Zen3 65W and up 5600G (6c12t) or 5700G (8c16t) - 2 ddr4 dimm slots - |- | <!--Name-->MSI A520M-A PRO mATX | <!--Chipset-->A520 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe 1 x M.2, Socket 3, M Key (Type 2242/2260/2280) | <!--Gfx-->PCI-e 3.0 | <!--Audio-->HDAudio ALC892 | <!--USB-->USB3 | <!--Ethernet-->rtl8169 rtl8111H | <!--Opinion-->2022 64bit - 2 ddr4 dimm slots - 3rd Gen AMD Ryzen Desktop and AMD Ryzen 4000 G-Series CPU |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |} ===== (Socket AM5 LGA1718 Zen4 Zen5 Zen6 2022/27)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Asrock Steel Legend | <!--Chipset-->x670e | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->PCI-e rnda2 | <!--Audio-->HD audio | <!--USB-->USB3 | <!--Ethernet--> | <!--Opinion-->2022 64bit - ddr5 ecc (10 chip) and non-ecc (8 chips) 64Gb @ 6000Mhz or 128GB @ 4800Mhz - |- | <!--Name-->Asrock TaiChi | <!--Chipset-->x670e | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->PCI-e rnda2 | <!--Audio-->HD Audio | <!--USB-->USB4 with Thunderbolt 4 equivalent | <!--Ethernet-->{{No|Realtek killer E3000 2.5GbE}} | <!--Opinion-->2022 64bit - ddr5 ecc (10 chip) and non-ecc (8 chips) |- | <!--Name-->Asus ROG Crosshair Hero | <!--Chipset-->x670e | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe rnda2 | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2022 64bit |- | <!--Name--> | <!--Chipset-->x670e | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->rnda3 | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2022 64bit 7950x3d 120W, 7900 7800 7600 90W |- | <!--Name--> | <!--Chipset-->x670e | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->rnda3 | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2022 64bit |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus B650E-I | <!--Chipset-->B650 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->pci-e 5 | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2023 - better sound with an actual AMP, PCIe 5, USB-C display outs - |- | <!--Name--> | <!--Chipset-->x650 B650 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->x650 B650 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->x650 B650 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MAXSUN AMD Challenger B650M WIFI M-ATX (aka Soyo) | <!--Chipset-->B650 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI b650i mini itx | <!--Chipset-->B650 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->NVMe | <!--Gfx-->pci-e 4 | <!--Audio--> | <!--USB--> | <!--Ethernet-->Realtek | <!--Opinion-->2023 - front panel connectors at the back of the board - dead rear nvme slot and a drained CMOS battery as the CMOS button being pressed during shipping - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset-->A620M Zen4 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->A620M | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->A620M | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->A620M | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> Zen5 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> Zen6 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> || <!--Chipset--> || <!--ACPI--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Opinion-->2026 FP8 Zen 6 Medusa Point 4bigC, 4 econC, 2lpC, 8coreGPU - |- | <!--Name--> || <!--Chipset--> || <!--ACPI--> || <!--IDE--> || <!--SATA--> || <!--Gfx--> || <!--Audio--> || <!--USB--> || <!--Ethernet--> || <!--Opinion-->2026 FP10 Zen 6 Medusa Point 4bigC, 4 econC, 2lpC, 8coreGPU - |- |} ===== (Zen7 AM6 2027/3x)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} ===== (Zen AM 203x/3x)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} ====Intel Sockets==== [[#top|...to the top]] =====Socket 370 (2000/2)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Intel D815EEA | <!--Chipset-->866Mhz P3 and i815 chipset | <!--ACPI--> | <!--IDE-->{{Yes}} | <!--SATA-->{{N/A}} | <!--Gfx-->{{Yes|Nvidia AGPx8 6200LE added}} | <!--Audio-->{{N/A}} | <!--USB-->{{Yes|2 USB1.1}} | <!--Ethernet-->{{N/A}} | <!--Opinion-->Tested AspireOS 1.7, simple basic board with useful 5 PCI slots |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |} =====Socket 478 (2002/4)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->[http://translate.google.co.uk/translate?hl=en&sl=zh-CN&u=http://detail.zol.com.cn/motherboard/index46381.shtml&prev=/search%3Fq%3Dc.865pe.l%2Bmotherboard%26client%3Dfirefox-a%26hs%3DsZB%26rls%3Dorg.mozilla:en-US:official Colorful Technology C.865PE-L Silver Fighter Warrior V2.3] | <!--Chipset-->865PE | <!--ACPI-->{{dunno| }} | <!--IDE-->{{Yes|tested with CDROM}} | <!--SATA-->{{dunno| }} | <!--Gfx-->{{Maybe|AGP slot}} | <!--Audio-->{{Yes|ALC650 AC97}} | <!--USB-->{{Yes|USB 1.1 and 2.0}} | <!--Ethernet-->{{Yes|RTL 8100 8139}} | <!--Opinion-->Still testing with NB (Nightly Build) May 2013 |- | <!--Name-->Intel 845 | <!--Chipset-->865P | <!--ACPI--> | <!--IDE-->{{Yes}} | <!--SATA--> | <!--Gfx-->{{No|intel 800}} | <!--Audio-->{{No|AC97 AD1985}} | <!--USB-->{{Yes|USB1.1 and USB2.0}} | <!--Ethernet-->{{No|e1000}} | <!--Opinion-->Tested ICAROS 1.3 |- | <!--Name-->Intel 845 | <!--Chipset-->865GC | <!--ACPI--> | <!--IDE-->{{Yes}} | <!--SATA--> | <!--Gfx-->{{No|intel 865 Extreme Graphics 2}} | <!--Audio-->{{No|AC97 AD1985}} | <!--USB-->{{Yes|USB1.1 and USB2.0}} | <!--Ethernet-->{{No|e1000}} | <!--Opinion-->Tested ICAROS 1.3 |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket LGA775 s775 (2005/8)===== an industry standard DDR2 module could in theory contain fallback JEDEC, intel XMP and AMD EPP configuration data Intel PC CL5 ram modules but an "AMD" CL5 ram module the BIOS cannot read the AMD EPP info on the SPD (Serial Presence Detect) but can recognize the CL5 timing info in the JEDEC data table. PC BIOS auto configures for the AMD ram module and boots normally. an AMD PC CL6 ram modules but an "INTEL" CL6 ram module the BIOS cannot read the INTEL XMP info on the SPD but can recognize the CL6 timing info in JEDEC data table. PC BIOS auto configures for the AMD ram module and boots normally. an INTEL PC needs CL6 ram modules but have an "AMD" CL4 ram module. INTEL BIOS cannot read the AMD EPP info on the SPD but can recognize the CL4 timing info in JEDEC data table. PC BIOS recognizes module timings as incompatible an refuses to boot. entirely separate issue if the RAM module timing specs are incompatible.(i.e. CL4 RAM in a "CL6 only" PC) {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Abit AG8 | <!--Chipset-->P915 + ICH6R | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 ports SATA1 | <!--Gfx-->1 PCIe x16 Slot | <!--Audio-->Realtek ALC658 AC97 | <!--USB-->4 USB2.0 | <!--Ethernet-->Realtek 8110S-32 | <!--Opinion-->2004 32bit - Firewire TI 4200R7T no |- | <!--Name-->MSI 915 Neo2 | <!--Chipset-->P915 + ICH6R | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 ports SATA1 | <!--Gfx-->1 PCIe x16 Slot | <!--Audio-->CMI 9880L HD Audio | <!--USB-->4 USB2.0 | <!--Ethernet-->{{no|Broadcomm BCM5751 PCIe}} | <!--Opinion-->Firewire VIA VT6306 no |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus P5GC P5GC-MX | <!--Chipset-->P945GC Lakeport-GC + ICH7R northbridge | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 SATA1 3.0 Gbit/s ports | <!--Gfx-->1 PCIe 1.1 slot | <!--Audio-->HD Audio with ALC662 codec | <!--USB-->{{yes|2 usb2.0}} | <!--Ethernet-->{{no|atheros L2}} | <!--Opinion-->2005 32bit - 3 pci slots - 4 x 240-pin DIMM Sockets max. 4GB DDR2 667/533 non-ECC - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Foxconn PC45CM-SA 45CM-S | <!--Chipset-->945GC with ICH7 | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 sata2 ports | <!--Gfx-->{{Yes|pcie 1.0 slot with gma950 integrated}} | <!--Audio-->{{Yes|HD audio with aLC883 codec playback}} | <!--USB-->{{Yes|}} | <!--Ethernet-->{{Yes|realtek 8139 8100sc}} | <!--Opinion-->2 dimm slots 667mhz max 4gb - can be found in Advent desktops - 2 pci-e and 2 pci - core 2 duo only e6xxx - Micro ATX (9.6” x 8.8”) - |- | <!--Name-->Gigabyte GA-81945GM MFY-RH | <!--Chipset-->Intel® 945GM Express with ICH7M-DH | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->{{Yes|GMA950 VGA15 and PCI-e 1.0 slot}} | <!--Audio-->{{Yes|HD Audio with ALC880 codec playback only rear port}} | <!--USB-->{{Yes|4 usb 2.0}} | <!--Ethernet-->{{No|Intel PRO1000PL 82573L Gigabit Ethernet}} | <!--Opinion-->2006 MoDT term “Mobile on DeskTop.”, low TDP CPUs to work on desktop form-factor motherboards. mATX Micro ATX 24.4cm x 24.4cm - 2 DDR2 dimm 1.8v slots with 4Gb max - will not boot if PCI2 slot occupied - |- | <!--Name-->Gigabyte GA-945 GCM S2C | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->{{yes|ALC662 (1.x)}} | <!--USB--> | <!--Ethernet-->{{yes|8101E Rtl 8169 (1.x)}} | <!--Opinion--> |- | <!--Name-->Gigabyte GA945-GCM S2L | <!--Chipset-->945GC with ICH7 | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 SATA1 ports | <!--Gfx-->PCi-E slot | <!--Audio-->{{Maybe|Intel HD Audio with ALC662 codec 2/4/5.1-channel (1.x)}} | <!--USB-->{{Yes|4 USB2.0}} | <!--Ethernet-->{{Yes|Realtek 8111c 8169 (1.x)}} | <!--Opinion-->2 x 1.8V DDR2 DIMM 4GB DDR2 memory max - 2 PCI-e and 2 PCI - Micro ATX form factor; 24.4cm x 19.3cm - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI 945P Neo-F rev 1.0 | <!--Chipset-->P945 + ICH7 | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 SATA1 ports | <!--Gfx-->PCie 1.0 slot | <!--Audio-->ALC662 HDA | <!--USB-->4 USB2.0 | <!--Ethernet-->8110SC (rtl8169) | <!--Opinion--> |- | <!--Name-->MSI 945P Neo2-F rev 1.2 | <!--Chipset-->P945 + ICH7 | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 SATA1 ports | <!--Gfx-->PCie 1.0 slot | <!--Audio-->ALC850 AC97 | <!--USB-->4 USB2.0 | <!--Ethernet-->8110SC (rtl8169) | <!--Opinion--> |- | <!--Name-->Gigabyte GA-P31-DS3L | <!--Chipset-->P31 with ICH7 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCI Express x16 | <!--Audio-->HD Audio with ALC888 codec | <!--USB-->4 USB 2.0 | <!--Ethernet-->Realtek 8111B | <!--Opinion-->DDR2 800Mhz up to 4Gb 4 x 240 pin - 3 PCI - ATX 12.0" x 8.3" - |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus P5KPL-AM /PS | <!--Chipset-->G31 with ICH7 | <!--ACPI--> | <!--IDE--> | <!--SATA-->4 xSATA 3 Gbit/s ports | <!--Gfx-->PCIe 1.1 with integrated Intel® GMA 3100 | <!--Audio-->HD Audio with VIA VT1708B with ALC662 codec | <!--USB--> | <!--Ethernet-->Realtek RTL8102EL 100/10 LAN with Realtek RTL8111C Gigabit LAN | <!--Opinion-->2 x 2 GB DDR2 Non-ECC,Un-buffered DIMMs with 2 PCI - Intel Graphics Media Accelerator - |- | <!--Name-->Asus P5KPL/EPU | <!--Chipset-->G31 with ICH7 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->Pci-e 1.0 slot | <!--Audio-->{{Yes|HD audio with ALC887 codec}} | <!--USB--> | <!--Ethernet-->{{Yes|RTL8169 Realtek 8111C}} | <!--Opinion-->Tested - 4 240-pin DIMM, Max. 4 GB - 4 pci-e and 3 pci - ATX Form Factor 12 inch x 8.2 inch ( 30.5 cm x 20.8 cm ) - |- | <!--Name-->Gigabyte GA-G31M ES2L | <!--Chipset-->G31 plus ICH7 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->{{Yes|Intel GMA 3100 2d}} | <!--Audio-->{{Maybe|ALC883 (1.x), ALC883/888B (2.x)}} | <!--USB--> | <!--Ethernet-->{{Maybe|RTL8111C (1.x), Atheros 8131 (2.x)}} | <!--Opinion-->reduces DRAM capacity to 4GB |- | <!--Name-->ASRock G31M-S r1.0 G31M-GS | <!--Chipset-->G31 + ICH7 | <!--ACPI--> | <!--IDE--> | <!--SATA-->{{maybe|4 sata2}} | <!--Gfx-->{{maybe|GMA 3100 2d not 3d}} | <!--Audio-->{{yes|ALC662}} | <!--USB-->{{yes|4 USB2.0}} | <!--Ethernet-->{{partial|rtl8169 RTL8111DL 8169 (for -GS) RTL8102EL (for -S)}} | <!--Opinion-->2007 64bit Core2 - 2 DDR2 800 max 8Gig AMI bios MicroATX - |- | <!--Name-->ASRock G31M-S r2.0 | <!--Chipset-->G31 + ICH7 | <!--ACPI--> | <!--IDE--> | <!--SATA-->{{maybe|4 sata2}} | <!--Gfx-->{{maybe|GMA 3100 2d not 3d}} | <!--Audio-->{{yes|ALC662}} | <!--USB-->{{yes|4 USB2.0}} | <!--Ethernet-->{{yes|RTL 8111DL 8169}} | <!--Opinion-->2008 64bit core2 - 2 DDR2 800 max 8Gig MicroATX |- | <!--Name-->[http://www.intel.com/cd/channel/reseller/apac/eng/products/desktop/bdb/dg31pr/feature/index.htm Intel DG31PR] | <!--Chipset-->iG31 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->{{maybe|3100 but can use PCIe 1.1 slot}} | <!--Audio-->{{yes|ALC888 playback}} | <!--USB--> | <!--Ethernet-->{{yes|RTL8111B Rtl 8169}} | <!--Opinion-->good support |- | <!--Name--> | <!--Chipset-->Intel G33 Express Chipset with ich9 southbridge | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->Intel 3100 powervr tile based | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2008 64bit - embedded on Core 2 Quad, Core 2 Duo, Pentium Dual-Core CPUS with Integrated GPU Intel GMA 3100 - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->ASUS P5G41T-M LX | <!--Chipset-->G41 + ICH8 + DDR3 | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA-->{{maybe}} | <!--Gfx-->{{yes|X4500 some 2d only)}} | <!--Audio-->ALC887 | <!--USB-->3 USB2.0 | <!--Ethernet-->{{no|Atheros L1c AR8131}} | <!--Opinion-->reduces maximum supported memory ddr3 from 16 to 8GB 2 dimm slots non-EEC - demotes the PCIe controller mode from revision 2.0 (5.0GT/s) to revision 1.1 (2.5GT/s |- | <!--Name-->Gigabyte GA-G41MT S2 | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->VT1708S (1.3), ALC887-VD2 (1.4), ALC887 (2.1), | <!--USB--> | <!--Ethernet-->Atheros AR8151 l1c (1.x 2.x), | <!--Opinion--> |- | <!--Name-->Gigabyte GA-G41MT S2PT | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->ALC887 (1.0), VIA (2.0), ALC887 (2.1) | <!--USB--> | <!--Ethernet-->RTL8111E (1.x), Atheros AR8151 l1c (2.1), | <!--Opinion--> |- | <!--Name-->Gigabyte GA-G41MT D3 | <!--Chipset-->G41 + ICH7 | <!--ACPI--> | <!--IDE-->1 Port | <!--SATA-->4 Ports | <!--Gfx-->{{yes|GMA X4500 2d only and pci-e 1.1 slot}} | <!--Audio-->{{yes|ALC888B}} | <!--USB-->4 ports + headers | <!--Ethernet-->{{yes|RTL8111 D/E}} | <!--Opinion--> |- | <!--Name-->Gigabyte GA-P41T D3P | <!--Chipset-->G41 + ICH7 with Intel Core 2 Duo (E6xxx) CPU | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4ports | <!--Gfx-->GMA X4500 2d | <!--Audio-->ALC888 889/892 | <!--USB-->4 ports | <!--Ethernet-->RTL 8111C or D/E | <!--Opinion--> |- | <!--Name-->Intel DG41AN Classic | <!--Chipset-->iG41 + | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 ports | <!--Gfx-->X4500 2d | <!--Audio-->ALC888S ALC888VC | <!--USB-->4 ports | <!--Ethernet-->8111E | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->AsRock P5B-DE | <!--Chipset-->P965 + ICH8 | <!--ACPI--> | <!--IDE--> | <!--SATA-->{{Maybe|works ide legacy}} |<!--Gfx-->{{Yes|with PCI-E 1.1 slot}} | <!--Audio-->{{Yes|HD Audio via VT1708S}} | <!--USB-->{{Yes}} | <!--Ethernet-->{{Yes|RTL8169}} | <!--Opinion-->2006 works well |- | <!--Name-->Asus P5B SE | <!--Chipset-->965 intel | <!--ACPI--> | <!--IDE-->{{Yes| }} | <!--SATA-->{{Yes| }} | <!--Gfx-->{{N/A}} | <!--Audio-->{{Yes|HD Audio ALC662 codec}} | <!--USB-->{{Yes}} | <!--Ethernet-->{{No| }} | <!--Opinion-->works well except ethernet |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus P5W DH Deluxe P5WDG2 WS PRO | <!--Chipset-->975X | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->2 ports | <!--Gfx-->2 PCIe x16 slots | <!--Audio-->ALC882 AND LATER ADI 1988B | <!--USB-->2 USB2.0 | <!--Ethernet-->{{No|Marvell 88E8052 88E8053}} | <!--Opinion-->Firewire TI TSB43AB22A no |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Abit IP35 | <!--Chipset-->P35 Express + ICH9R | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->6 ports | <!--Gfx--> | <!--Audio-->ALC888 HDA | <!--USB-->4 USB2.0 | <!--Ethernet-->two RTL8110SC | <!--Opinion-->Firewire Texas TSB43 AB22A no |- | <!--Name-->MSI P35 Neo F FL MS-7630 rev 1 | <!--Chipset-->Intel P35 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->pci-e 1.1 support | <!--Audio-->HD Audio ALC888 | <!--USB--> | <!--Ethernet-->Realtek | <!--Opinion-->Base model of this range of P35 mobos |- | <!--Name-->GA-P35-DS3 | <!--Chipset-->P35 and ICH9 | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->4 ports | <!--Gfx--> | <!--Audio-->HDAudio with Realtek ALC889A codec | <!--USB--> | <!--Ethernet-->rtl8169 Realtek 8111B | <!--Opinion-->2008 - 4 x 1.8V DDR2 DIMM sockets max 8 GB - |- | <!--Name-->GA-EP35-DS3 (rev. 2.1) | <!--Chipset-->Intel® P35 + ICH9 Chipset | <!--ACPI--> | <!--IDE-->{{unk|}} | <!--SATA-->{{unk|4 }} | <!--Gfx-->pci-e | <!--Audio-->{{unk|Realtek ALC889A codec }} | <!--USB-->{{yes | }} | <!--Ethernet-->{{yes|rtl8169 Realtek 8111B}} | <!--Opinion-->good |- | <!--Name-->Abit IX38 Quad GT | <!--Chipset-->X38 / ICH9R Chipset | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->6 ports | <!--Gfx-->PCI-E 2.0 slot | <!--Audio--> HD Audio ALC888 | <!--USB-->4 USB2.0 | <!--Ethernet-->Realtek RTL 8110SC 8169SC | <!--Opinion-->Firewire Texas TSB 43AB22A no |- | <!--Name-->Gigabyte X38-DQ6 | <!--Chipset-->X38 / ICH9R Chipset | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->6 ports | <!--Gfx-->PCI-E 2.0 slot | <!--Audio-->ALC889A HDA | <!--USB-->4 USB2.0 | <!--Ethernet-->twin 8111B 8169 | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Gigabyte GA-EP45 DS3 (2008) | <!--Chipset-->P45 + ICH9 or ICH10 | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->6 x SATA 3Gbit/s (SATAII0, SATAII1, SATAII2, SATAII3, SATAII4, SATAII5) | <!--Gfx-->two PCI-E v2.0 x16 slots support splitting its 16 PCIe 2.0 lanes across two cards at x8 transfers | <!--Audio-->HD Audio with ALC888 or ALC889A codec | <!--USB-->6 USB2.0 | <!--Ethernet-->2 x Realtek 8111C chips (10/100 /1000 Mbit) | <!--Opinion-->4 x 1.8V DDR2 DIMM sockets non-EEC |- | <!--Name-->MSI P45 Platinum (2008) | <!--Chipset-->P45 + ICH9 | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->6 sata2 ports | <!--Gfx-->two PCI-E x16 v2.0 slots | <!--Audio-->ALC888 HD Audio | <!--USB-->6 USB2.0 | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->G45 + | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->adds Intel’s GMA X4500HD graphics engine to P45 Express features | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->G43 + | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->GMA X4500 2d | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->removes HD video acceleration from the G45’s features |- | <!--Name-->Asus P5E Deluxe | <!--Chipset--> X48 with ICH9 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->HD Audio with ADI 1988B codec | <!--USB--> | <!--Ethernet-->Marvell 88E8001 | <!--Opinion--> |- | <!--Name-->GigaByte GA-X48 DQ6 | <!--Chipset-->X48 plus ICH9R | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->8 ports | <!--Gfx-->two PCI-E x16 v2.0 slots | <!--Audio-->ALC889A | <!--USB-->8 USB2.0 | <!--Ethernet-->RTL 8111B 8169 | <!--Opinion-->Firewire TSB43AB23 no - ICH9 pairs with Intel’s 3-series (X38, P35, etc.) chipsets, in addition to the X48 Express, but excluding the G35 Express |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Gigabyte EP43-DS3L and Gigabyte GA-EP43-UD3L | <!--Chipset-->P43 with ICH10 | <!--ACPI--> | <!--IDE-->1 port | <!--SATA-->6 x SATA 3Gbit/s connectors | <!--Gfx-->1 x PCI Express x16 slot PCI Express 2.0 standard | <!--Audio-->HD Audio with ALC888 codec | <!--USB--> | <!--Ethernet-->realtek 8111C | <!--Opinion-->4 x 1.8V DDR2 DIMM sockets - 4 pcie x1 - 2 pci - ATX Form Factor; 30.5cm x 21.0cm |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Gigabyte 73-pvm-s2h rev.1.0 | <!--Chipset-->NVIDIA GeForce 7100 nForce 630i | <!--ACPI--> | <!--IDE-->{{Yes|1 port}} | <!--SATA-->{{yes|3 ports SATA2}} | <!--Gfx-->{{Maybe|Vesa 2d GeForce 7100 (vga /hdmi/dvi), 1 PCIe x16 Slot }} | <!--Audio-->{{Yes|Realtek ALC889A MCP73}} | <!--USB-->{{Yes|7 USB2.0}} | <!--Ethernet-->{{no|RTL 8211B MCP73}} | <!--Opinion-->Firewire Not, tested with Icaros Desktop 2.0.3 MCP73 is a single chip solution in three different versions |- | <!--Name-->Nvidia 7150 630i | <!--Chipset-->intel based nForce 630i (MCP73) | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA-->{{maybe|ide legacy}} | <!--GFX-->GF 7150 | <!--Audio-->{{yes|HD AUDIO ALC883}} | <!--USB-->{{yes|ohci echi}} | <!--Ethernet-->{{no|RTL8201C}} | <!--Opinion-->being tested |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->pci-e 2.0 x16 | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> the MCP73PV or the GeForce 7050/nForce 630i |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->the MCP73S or the GeForce7025/nForce 630i |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->the MCP73V or the GeForce 7025/nForce 610i |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Atom SOC (2008/2x)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->D945CLF | <!--Chipset-->N230 single core | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA--> | <!--Gfx-->{{yes|GMA945}} | <!--Audio-->{{yes|ALC662}} Skt 441 | <!--USB-->{{yes|uhci and ehci}} | <!--Ethernet-->{{yes|rtl8169}} | <!--Opinion-->works very well |- | <!--Name-->[http://www.clusteruk.com iMica D945GCKF2 mobo] | <!--Chipset-->Intel Atom N330 Dual Core | <!--ACPI-->wip | <!--IDE-->{{yes|IDE}} | <!--SATA-->{{maybe}} | <!--Gfx-->{{yes|gma}} | <!--Audio-->{{yes|HD AUDIO}} | <!--USB-->{{yes|uhci ehci}} | <!--Ethernet-->{{yes|rtl8169}} | <!--Opinion--> |- | <!--Name-->D945GSEJT + Morex T1610 | <!--Chipset-->Atom 230 with 945GSE | <!--ACPI--> | <!--IDE-->{{yes}} | <!--SATA-->{{maybe}} | <!--Gfx-->{{yes|GMA900 vga but issues with DVI output}} | <!--Audio-->{{yes|HDAudio with ALC662 codec}} | <!--USB-->{{yes| }} | <!--Ethernet-->{{yes|RTL8169 8111DL}} | <!--Opinion-->small size, runs off 12V |- | <!--Name-->ASUS AT3N7A-I | <!--Chipset-->Atom N330 Nvidia ION | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{maybe|3 ports legacy IDE}} | <!--Gfx-->{{yes|nouveau cube cube 2 45 quake 3 }} | <!--Audio-->{{yes|HD Audio with VIA 1708S codec playback}} | <!--USB-->{{yes}} | <!--Ethernet-->{{yes|RTL8169 device}} | <!--Opinion--><ref>http://www.youtube.com/watch?v=EAiJpvu73iw</ref> good but can freeze randomly at times |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->D410PT 45nm pinetrail | <!--Chipset-->D410 and NM10 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{maybe|ide legacy}} | <!--Gfx-->{{maybe|GMA3150}} | <!--Audio-->{{yes|ALC262 or ALC66x odd clicks}} | <!--USB-->{{yes}} | <!--Ethernet-->{{yes|RTL8111DL}} | <!--Opinion-->some support |- | <!--Name-->45nm pinetrail | <!--Chipset-->D510 and NM10 + GMA3150 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->GMA3150 | <!--Audio-->ALC888B or ALC66x | <!--USB-->{{yes}} | <!--Ethernet-->RTL8111DL | <!--Opinion-->some support |- | <!--Name-->Gigabyte GA-D525TUD (rev. 1.0 1.2 1.5) | <!--Chipset-->D525 NM10 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->gma 3150 | <!--Audio-->HDAudio ALC887 | <!--USB--> | <!--Ethernet-->rtl8169 rtl8111f | <!--Opinion-->2012 64 - 2 ddr3 dimm slots max 8g - Mini-ITX Form Factor; 17.0cm x 17.0cm - |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- |} =====Socket 1366 (2009/10)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Asus P6T DELUXE | <!--Chipset-->x58 + ICH10 and Intel 1st gen. (Nehalem/Lynnfield) Core i7 (8xx) CPU | <!--ACPI--> | <!--IDE-->{{yes|1 port}} | <!--SATA-->4 ports | <!--Gfx-->2 PCIe x16 (r2.0) slots | <!--Audio-->ADI AD2000B HD Audio | <!--USB-->{{yes|4 USB2.0}} | <!--Ethernet-->{{no|Marvell 88E8056 Gigabit}} | <!--Opinion-->Firewire VIA VT6308 no |- | <!--Name-->gigabyte ex58 ds | <!--Chipset--> x58 + ICH10 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet-->Realtek 8111D rtl8169 | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket 1156 (2010)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->Acer Aspire M3910 | <!--Chipset-->i3 | <!--ACPI--> | <!--IDE--> | <!--SATA-->{{unk| }} | <!--Gfx-->{{maybe|VESA intel HD}} | <!--Audio-->{{unk|HDAudio with Realtek ALC}} | <!--USB-->{{yes| }} | <!--Ethernet-->{{unk| Realtek}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA-H55M-S2H | <!--Chipset-->H55 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->PCIe slot | <!--Audio-->{{Yes|ALCxxx playback}} ALC888B (Rev1.x) | <!--USB-->{{Yes| }} | <!--Ethernet-->{{Yes|RTL8111D}} (Rev 1.x) | <!--Opinion-->Tested but no support for WLAN Realtek 8188su |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI H55M-E33 v1.0 | <!--Chipset-->E7636 M7636 H55 chipset so older i3/i5/i7 system | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->{{yes|HD Audio ALC889}} | <!--USB--> | <!--Ethernet-->{{Yes|PCI-E Realtek 8111DL}} | <!--Opinion-->Works well |- | <!--Name-->Asus P7P55D | <!--Chipset-->P55 | <!--ACPI--> | <!--IDE-->{{unk| }} | <!--SATA-->{{unk| }} | <!--Gfx-->pci-e | <!--Audio-->{{maybe | via codec}} | <!--USB-->{{unk| }} | <!--Ethernet-->{{maybe |rtl8169 Realtek RTL8111B/C RTL8112L }} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket LGA 1155 H2 (2010/13)===== {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->ASUS P8H61-I LX R2.0 | <!--Chipset-->H61 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata | <!--Gfx-->1 pci-e slot | <!--Audio-->{{unk|HDAudio via7018s codec}} | <!--USB-->USB3 | <!--Ethernet-->{{yes|rtl8169 8111f}} | <!--Opinion-->2013 64bit up to intel ivybridge cpus - 2 ddr3 dimm slots - |- | <!--Name-->Asus P8H61-I/RM/SI mini-itx | <!--Chipset--> | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->2 sata | <!--Gfx-->pci-e 2 | <!--Audio-->{{unk|HDAudio via7018s codec}} | <!--USB--> | <!--Ethernet-->{{yes|rtl8169 8111f}} | <!--Opinion-->2013 64bit up to i3-2010 - OEM board from an RM machine but not ivybridge as the Asus BIOS isn't compatible with these, 0909 hacked one might work - |- | <!--Name-->asus p8h61-i lx r2.0/rm/si mini itx | <!--Chipset-->h61 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e 2.0 | <!--Audio-->HDaudio with VIA codec | <!--USB--> | <!--Ethernet-->rtl8169 rtl8111e | <!--Opinion-->2012 sandy and ivy - oem from rm machine 2 x 240-Pin DDR3 DIMM sockets max DDR3 1333MHz - |- | <!--Name-->‎Bewinner 63q9c7omvs V301 ITX | <!--Chipset-->H61 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata with nvme | <!--Gfx-->pci-e 4 | <!--Audio-->HDAudio | <!--USB--> | <!--Ethernet-->{{no|Realtek 8106E 100M Network Card}} | <!--Opinion-->2022 64 |- | <!--Name-->Biostar H61 H61MHV2 H61MHV3 Ver. 7.0 | <!--Chipset-->H61 with Intel Pentium G 2xxx series CPU | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e | <!--Audio-->Realtek ALC662 later ALC897 | <!--USB-->4 usb2 | <!--Ethernet-->rtl8169 Realtek RTL8111H | <!--Opinion-->2014 - 2 ddr3 dimm slots - |- | <!--Name-->Gigabyte GA-H61M-D2-B3 | <!--Chipset-->H61 + Sandybridge | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 ports sata2 | <!--Gfx--> | <!--Audio-->ALC889 | <!--USB-->2 ports | <!--Ethernet-->Realtek RTL8111E | <!--Opinion--> |- | <!--Name-->Gigabyte GA-H61MA-D3V | <!--Chipset-->H61 + | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 ports sata2 | <!--Gfx--> | <!--Audio-->Maybe HDAudio with Realtek ALC887 (Rev 2.0) ALC887 (Rev2.1) | <!--USB-->2 USB 2.0/1.1 ports | <!--Ethernet-->Realtek RTL8111E | <!--Opinion--> |- | <!--Name-->Gigabyte GA-H61N-D2V | <!--Chipset-->H61 + | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata2 and maybe 4 sata3 | <!--Gfx-->pci-e 2.0 slot wit 1 x DVI-I port | <!--Audio-->{{unk|HDAudio with Realtek ALC887 (Rev 1.0)}} | <!--USB-->2 USB 2.0/1.1 ports | <!--Ethernet-->Realtek RTL8111E | <!--Opinion-->2013 64bit- 2 x 1.5V DDR3 DIMM sockets up to 16 GB - |- | <!--Name-->GA-H61M-S2PV | <!--Chipset-->H61 with 2400k 2500k 2600k 2700k | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx-->pci-e 2.0 slot | <!--Audio-->ALC887 (rev 1.0 2.0 2.1 2.2 2.3) | <!--USB-->4 USB 2.0 | <!--Ethernet-->Rtl8111E (1.0), 8151 (2.0) no, Rtl8111F (2.1 2.2 2.3) | <!--Opinion-->Micro ATX Form Factor; 24.4cm x 20cm with 2 pci-e and 2 pci - |- | <!--Name-->Intel Classic Series DH61CR Desktop | <!--Chipset-->H61 + | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 ports | <!--Gfx--> | <!--Audio-->Intel HD with ALC892 | <!--USB-->4 ports | <!--Ethernet-->{{no|Intel 82579V}} | <!--Opinion--> |- | <!--Name-->MSI H61M-P20 (G3) MS-7788 *retail MSI board *OEM Advent, etc | <!--Chipset-->H61 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{yes|four SATAII ports}} | <!--Gfx-->1 PCI Express gen3 (retail) gen2 (oem) x16 slot | <!--Audio-->{{yes|HDAudio ALC887 codec}} | <!--USB-->{{yes|}} | <!--Ethernet-->{{yes|Realtek 8105E 100M Network Card}} | <!--Opinion-->2012 64bit - 2 ddr3 slots - 22.6cm(L) x 17.3cm(W) M-ATX Form Factor - BIOS - [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1149&rowstart=140&pid=6009#post_6007 works well], |- | <!--Name-->MSI H61I-E35 (B3) MS-7677 Ver.1.2 | <!--Chipset-->H61 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata2 3gbps | <!--Gfx-->{{maybe|VESA 2d for hdmi and 1 pcie 2.0 x1 slot}} | <!--Audio-->{{yes|https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1149&rowstart=140&pid=5861#post_5861 works}} | <!--USB-->USB3 and USB2 | <!--Ethernet-->{{yes|rtl8169 rtl8111e}} | <!--Opinion-->2012 64bit - 2 ddr3 slots - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus P8H67-M | <!--Chipset-->H67 + | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->2 sata3 - 4 sata2 | <!--Gfx--> | <!--Audio-->Intel HD with ALC887 | <!--USB-->6 USB2.0 | <!--Ethernet-->Realtek® 8111E | <!--Opinion--> |- | <!--Name-->Asus P8P67 | <!--Chipset-->P67 with sandybridge and ivybridge cpus | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->{{unk|HDAudio with ALC codec}} | <!--USB--> | <!--Ethernet-->{{unk|rtl8169 realtek rtl8111}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus P8Z68-V LX | <!--Chipset-->Z68 + Intel 2nd generation (Sandy Bridge) CPU and possibly ivybridge | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{yes|2 sata3 - 4 sata2}} | <!--Gfx-->pci-e slot | <!--Audio-->{{yes|HDAudio Intel HD with ALC887 codec}} | <!--USB-->{{yes|2 USB3.0 - 4 USB2.0}} | <!--Ethernet-->{{yes|rtl8169 Realtek® 8111E}} | <!--Opinion-->2011 64bit SSE 4.1 and AVX - EFI bios - 4 ddr3 dimm slots - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte Z68AP-D3 (B3) | <!--Chipset-->Z68 + Ivybridge | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->2 sata3 - 4 sata2 | <!--Gfx--> | <!--Audio-->Intel HD with ALC889 | <!--USB-->2 USB3.0 - 4 USB2.0 | <!--Ethernet-->Realtek® 8111E | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus B75M-A | <!--Chipset-->B75 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes| }} | <!--Gfx-->pci-e | <!--Audio-->{{maybe|HDAudio with Realtek ® ALC887-VD codec}} | <!--USB-->{{maybe| }} | <!--Ethernet-->{{yes|rtl8169 Realtek ® 8111F-VB-CG }} | <!--Opinion-->2013 64bit - 2 ddr3 slots - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->H77 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA-H77-D3H 1.0 1.1 | <!--Chipset-->H77 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata 3.0 | <!--Gfx-->pci-e | <!--Audio-->{{No|HDAudio VIA VT2021 codec}} | <!--USB--> | <!--Ethernet-->{{No|Atheros GbE LAN chip}} | <!--Opinion-->2013 64bit i5 3550 7 3770 - 4 DDR3 slots - 2 full pci-e 2 pci slots - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Gigabyte GA Z77 D3H with i3 3225 dual | <!--Chipset--> | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e | <!--Audio-->{{No|HDAudio VIA VT2021 codec}} | <!--USB--> | <!--Ethernet-->{{No|Atheros GbE LAN chip}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket LGA 1150 H3 (2013/2016)===== [[#top|...to the top]] {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->[https://theretroweb.com/motherboards/s/asus-b85m-e-rev-1-02 Asus B85M-E] | <!--Chipset-->B85 | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes| }} | <!--Gfx-->pci-e | <!--Audio-->{{maybe|HDAudio with Realtek ® ALC887-VD2 codec}} | <!--USB-->{{maybe| }} | <!--Ethernet-->{{yes|rtl8169 Realtek 8111F}} | <!--Opinion-->2014 64bit - 4 ddr3 slots - |- | <!--Name-->Gigabyte GA-H87N-WIFI mITX | <!--Chipset-->H87 and Intel 4th generation (Haswell) Core i5 (4xxx) CPU | <!--ACPI--> | <!--IDE-->{{yes| }} | <!--SATA-->{{yes| }} | <!--Gfx-->pci-e | <!--Audio-->Intel HD with ALC892 | <!--USB-->{{maybe| }} | <!--Ethernet-->{{no|Intel Atheros}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->ASUS H81I-PLUS Mini ITX | <!--Chipset-->H81 with intel 4590t 4690t | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata3 6gbps | <!--Gfx-->pci-e 3.0 x4 slot and with HD4400 HDMI vga mode works but other grub options no display just black screen - analogue DVI and vga untested | <!--Audio-->{{yes|HDAudio 6.34 with ALC8878 codec playback only}} | <!--USB-->{{yes|USB3 and USB2}} | <!--Ethernet-->{{yes|rtl8169 rtl8111g}} | <!--Opinion-->2014 64bit - 2 ddr3 dimm slots max 16gb - f2 or DEL bios and f8 boot select - does not like unconnected gfx card in pci-e slot - deadwood 2026-09 DO3 build - |- | <!--Name-->Asus H81M-C H81M-P-SI | <!--Chipset-->H81 with 4th generation (Haswell) Core i7 (4xxx) CPU | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{yes|2x3g 2x6g}} | <!--Gfx-->pci-e slot | <!--Audio-->hdaudio alc887 vd | <!--USB-->{{maybe| }} | <!--Ethernet-->realtek 8111gr | <!--Opinion-->2013 skt 1150 - 2 ddr3 max 16g - mini atx - |- | <!--Name-->Asus H81T | <!--Chipset-->H81 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->2 sata | <!--Gfx-->HD4000 igpu only | <!--Audio-->HDAudio ALC887-VD | <!--USB-->Intel USB3 | <!--Ethernet-->rtl8169 realtek 8111G | <!--Opinion-->2013 64bit intel 4th gen mini itx - external dc brick with 19v rare barrel pin 7.4MM x 5.0MM - 2 ddr3 laptop sodimm slots - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA-H81M-S2V | <!--Chipset-->H81 | <!--ACPI--> | <!--IDE-->{{N/A|}} | <!--SATA--> | <!--Gfx-->pci-e | <!--Audio-->HDAudio ALC887 | <!--USB-->USB3 | <!--Ethernet-->Realtek® GbE LAN chip | <!--Opinion-->2014 64bit up to i7 4790K - 2 DDR3 slots - |- | <!--Name-->Gigabyte GA-H81M-D3V (rev. 1.0) | <!--Chipset-->H81 | <!--ACPI--> | <!--IDE-->{{N/A| }} | <!--SATA-->{{yes|2 sata2 2 sata3 }} | <!--Gfx-->pci-e | <!--Audio-->{{unk| HDAudio Realtek® ALC887 codec}} | <!--USB-->{{unk|intel and VIA® VL805}} | <!--Ethernet-->{{unk|rtl8169 Realtek }} | <!--Opinion--> |- | <!--Name-->MSI H81M-E34 (MS-7817) | <!--Chipset-->H81 | <!--ACPI--> | <!--IDE--> | <!--SATA-->{{yes| }} | <!--Gfx-->PCIe 2.0 x16 | <!--Audio-->HDAudio with ALC887 codec | <!--USB-->USB3 | <!--Ethernet-->{{yes|rtl8169 RTL8111G}} | <!--Opinion-->2013 64bit - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus Z87-K | <!--Chipset-->Z87 with 4th generation (Haswell) Core i7 4c8t i5 4c4t CPU | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e | <!--Audio-->Intel HD with ALC | <!--USB--> | <!--Ethernet-->Realtek lan | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA-Z87X-UD3H | <!--Chipset-->Z87 Express | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e | <!--Audio-->Intel HD with Realtek® ALC898 codec | <!--USB--> | <!--Ethernet-->{{no|intel}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA H97M D3H r1.0 r1.1 with i3 4360 or 4370 dual | <!--Chipset--> | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e | <!--Audio-->Intel HD with ALC892 | <!--USB--> | <!--Ethernet-->Realtek lan | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus Z97 A with i7 4790K | <!--Chipset--> | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e slot for GTX 750, 960, 970 and 980 | <!--Audio-->Intel HD with ALC | <!--USB--> | <!--Ethernet-->{{no|intel lan ethernet}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA Z97X UD3H rev1.0 1.1 1.2 | <!--Chipset-->Z97 with i5 4690K | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio-->HDaudio with ALC1150 | <!--USB--> | <!--Ethernet-->{{no|intel lan}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI GAMING 5 Z97 | <!--Chipset-->Z97 with 4th generation (Haswell) Core i7 4c8t CPU | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->ASUS Q87M-E | <!--Chipset-->Q87 lynx point | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA--> | <!--Gfx-->pci-e slot | <!--Audio-->ALC887VD codec | <!--USB-->{{maybe| }} | <!--Ethernet-->{{no|intel}} | <!--Opinion-->2014 64bit - 4 DDR3 slots - |- | <!--Name--> | <!--Chipset-->H99 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket LGA2011V2 s2011-2 (2012/15)===== [[#top|...to the top]] {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset-->x79 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2013 Xeon e5-???? W TDP, e5-2667V2 W TDP, e5-????V2 W TDP, Sandybridge and Ivybridge V2 |- | <!--Name-->Asus | <!--Chipset-->X79 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket LGA2011V3 s2011-3 (2015/18)===== [[#top|...to the top]] {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset-->x99 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2016 Xeon e5-1620v3 130W TDP, e5-1650V3 (i7-5930K) 140W TDP, e5-2640V3 90W TDP, Haswell-EP |- | <!--Name-->Asus | <!--Chipset-->X99 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->most cheap Ryzens are better nowadays |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Huananzhi X99-CD4 | <!--Chipset-->Intel C612 and X99 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata 3 connectors and 1 m.2 nvme slot | <!--Gfx-->pcie slot | <!--Audio-->HDaudio with ALC897 codec | <!--USB-->{{No|USB3}} | <!--Ethernet-->{{maybe|rtl8169}} | <!--Opinion-->2024 quality might not be great outside of a simple setup - 2 ddr4 dimms - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Keyiyou X99 XD4 | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Machinist MR9A Pro | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2023 |- | <!--Name-->Machinist MR9A Pro | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2023 |- | <!--Name-->Mogul | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Qiyida X99 H9S | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2023 |- | <!--Name-->Soyo | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket LGA 1151 Socket H4 (2015/2018)===== [[#top|...to the top]] {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->Skylake CPUs have TPM 2.0 embedded |- | <!--Name-->Asus H110 Plus H110M-A/DP | <!--Chipset--> with 6th Gen Core and 7th with bios update | <!--ACPI--> | <!--IDE--> | <!--SATA-->Sunrise Point-H SATA [AHCI mode] [8086 a102] | <!--Gfx-->{{No|Skylake Integrated HD Graphics use PIC-E slot}} | <!--Audio-->Intel HD Audio with Realtek ALC887 Audio CODEC | <!--USB-->Sunrise Point-H USB 3.0 xHCI [8086: a12f] no usb2.0 fallback | <!--Ethernet-->{{Yes|Realtek 8111GR or 8111H RTL8111 8168 8411}} | <!--Opinion-->ATX with 3 pci-e and 2 DDR4 slots - uatx version smaller - turn off TLSF as it was causing AHI driver to corrupt. Turned off ACPI for errors but works fine once booted - |- | <!--Name-->ASUS H110M-R M-ATX | <!--Chipset-->H110 6th Gen Skylake Core™ i7 Core™ 6950X i7-6970HQ i7-6700K 4c8t hyperthreading, i5/Core™ i5-6600K 4c4t i3/Pentium® / Celeron® | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 x SATA 6Gb/s | <!--Gfx-->pci-e | <!--Audio-->HDAudio with Realtek® ALC887 codec | <!--USB-->Intel USB3 | <!--Ethernet-->Realtek® RTL8111H | <!--Opinion-->2016 64bit - 2 DDR4 DIMMS Max 32GB 2133MHz - 1 full pci-e and 2 pci-e 1 - |- | <!--Name-->Asus H110T | <!--Chipset-->H110 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->2 sata | <!--Gfx-->intel igpu only | <!--Audio-->HDaudio | <!--USB--> | <!--Ethernet-->Dual Intel/Realtek GbE languard | <!--Opinion-->2016 - mini itx 12v / 19v laptop type rare barrel pin 7.4MM x 5.0MM - 2 sodimm ddr4 slots - no pci-e slot - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte GA-H110M-S2H MATX Rev1.0 | <!--Chipset-->H110 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata | <!--Gfx-->pci-e 3.0 | <!--Audio-->Realtek® ALC887 codec | <!--USB-->2 (USB 3.1 Gen 1) ports with 4 us2 | <!--Ethernet-->Realtek® GbE LAN | <!--Opinion--> 2 ddr4 slots |- | <!--Name-->Gigabyte ga-h110n | <!--Chipset-->H110 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->{{Yes| sata}} | <!--Gfx-->{{maybe|Vesa 2d for Intel or PCI-e slot}} | <!--Audio-->{{Maybe|HDaudio for ALC887 codec}} | <!--USB-->{{Maybe| }} | <!--Ethernet-->{{yes|RTL8169}} | <!--Opinion-->2016 mini-itx 6th gen |- | <!--Name-->Msi H110M-PRO-VH | <!--Chipset--> | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 x SATA 6Gb/s | <!--Gfx-->pci-e 3.0 | <!--Audio--> Realtek® ALC887 Codec | <!--USB--> | <!--Ethernet-->rtl8169 rtl8111h | <!--Opinion--> 6th gen intel - 2 ddr4 slots |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus H170 Pro Gaming | <!--Chipset-->H170 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sata | <!--Gfx-->pci-e | <!--Audio-->HDAudio | <!--USB-->Asmedia USB3.1/3.0 | <!--Ethernet-->{{no|intel lan}} | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->MSI Z170A TOMAHAWK | <!--Chipset-->Z170 | <!--ACPI--> | <!--IDE-->{{N/A}} | <!--SATA-->4 sara, 1 x 2280 Key M(PCIe Gen3 x4/SATA), 1 x 2230 Key E(Wi-Fi) | <!--Gfx-->pci-e | <!--Audio-->HDAudio | <!--USB--> | <!--Ethernet-->{{no|intel lan}} | <!--Opinion-->2016 64bit up to i7 7700k - 2 DDR4 - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->GIGABYTE GA-B250M-DS3H HD3P D3H D2V | <!--Chipset-->B250 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2018 coffee lake intel 8th gen |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus | <!--Chipset--> with Kaby Lake X Intel 7th Gen | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> up to 16 pcie lanes |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus | <!--Chipset--> Z390 with Kaby Lake X | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> up to 16 pcie lanes |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> Q370M | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> H370M | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> B360M | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Asus Rampage | <!--Chipset-->x299 with i9 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> - up to 24 to 44 pcie lanes |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name-->Gigabyte | <!--Chipset-->X299 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |} =====Socket LGA 1200 (2020/2022)===== [[#top|...to the top]] {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->MSI H510M-A PRO (MS-7D22) | <!--Chipset--> with 10th gen Comet Lake X | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2021 64bit - up to 16 pcie lanes rebar possible |- | <!--Name-->Asus PRIME H410M-E Asrock H470M-HDV/M.2 | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus | <!--Chipset--> with 11th gen Rocket Lake X | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> up to 16 pcie lanes |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |} =====Socket LGA 1700 (2023/ )===== [[#top|...to the top]] {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset-->Alder Lake / 14th gen Raptor Lake | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2021 2022 64bit - QoS work to 2 level cpus, P down to E cores - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset-->Meteor Lake ultra 5 7 1xxH series 1 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2023 2024 64bit 10nm - 3 level cpus, Low Power Island (SOC tile) to E onto P cores - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> 15th gen Arrow Lake | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset-->Lunar lake ultra 5 7 2xxV series 2 | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2025 64bit 7nm - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->Nova Lake | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2026 64bit - |- | <!--Name--> | <!--Chipset-->Panther Lake | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2026 64bit - either 44, 484, or 448 tiled cores 18A process - core ultra x9 288h, x7 358H, - |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- |} =====Socket LGA 1954 (2027/ )===== [[#top|...to the top]] {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name--> | <!--Chipset-->Nova Lake-S | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset-->Serpent Lake, Titan Lake, and Razer Lake | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion-->2027 |- |} =====Socket LGA (203x/203x)===== [[#top|...to the top]] {| class="wikitable sortable" width="90%" ! width="10%" |Name ! width="5%" |Chipset ! width="5%" |ACPI ! width="5%" |IDE ! width="5%" |SATA ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |USB ! width="10%" |Ethernet ! width="30%" |Opinion |- | <!--Name-->MSI | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- style="background:lightgrey; {{text default color}}; text-align:center; font-weight:bold;" | Name || Chipset || ACPI || IDE || SATA || Gfx || Audio || USB || Ethernet || Opinion |- | <!--Name-->Asus | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |- | <!--Name--> | <!--Chipset--> | <!--ACPI--> | <!--IDE--> | <!--SATA--> | <!--Gfx--> | <!--Audio--> | <!--USB--> | <!--Ethernet--> | <!--Opinion--> |} ===Chromebooks=== For most (EOL) cromebooks, the recommended UEFI path forward is to: *put the device into Developer Mode *disable firmware write protection *flash MrChromebox's UEFI Full ROM firmware *install ChromeOS Flex, Linux, etc See [https://mrchromebox.tech/#home MrChrome], [https://mrchromebox.tech MrChrome] and the [https://www.reddit.com/r/chrultrabook/ chrultrabook subreddit] for more info ChromeOS has several different boot modes, which are important to understand in the context of modifying your device to run an alternate OS: *Normal/Verified Boot Mode Can only boot Google-signed ChromeOS images Full verification of firmware and OS kernel No root access to the system, no ability to run Linux or boot other OSes Automatically enters Recovery Mode if any step of Verified Boot fails Default / out-of-the-box setting for all ChromeOS devices *Recovery Mode User presented with Recovery Mode boot screen (white screen with 'ChromeOS is missing or damaged') Boots only USB/SD with signed Google recovery image Automatically entered when Verified Boot Mode fails Can be manually invoked: On Chromebooks, via keystroke: [ESC+Refresh+Power] On Chromeboxes, by pressing a physical recovery button at power-on On Convertibles/Tablets, by holding the Power, Vol+, and Vol- buttons for 10s and then release Allows for transition from Verified Boot Mode to Developer Mode On Chromebooks/Chromeboxes, via keystroke: [CTRL+D] On Convertibles/Tablets, via button press: Vol+/Vol- simultaneously Booting recovery media on USB/SD will repartition/reformat internal storage and reload ChromeOS Note: The ChromeOS recovery process does not reset the firmware boot flags (GBB Flags), so if those are changed from the default, they will still need to be reset for factory default post-recovery. *Developer Mode "Jailbreak" mode built-in to every ChromeOS device Loosened security restrictions, allows root/shell access, ability to run Linux via crouton Verified Boot (signature checking) disabled by default, but can be re-enabled Enabled via [CTRL+D] on the Recovery Mode boot screen Boots to the developer mode boot screen (white screen with 'OS verification is off' text), The user can select via keystroke <pre> ChromeOS (in developer mode) on internal storage ( [CTRL+D] ) ChromeOS/ChromiumOS on USB ( [CTRL+U] ) Legacy Boot Mode ( [CTRL+L] ) </pre> Boot screen displays the ChromeOS device/board name in the hardware ID string (eg, PANTHER F5U-C92, which is useful to know in the context of device recovery, firmware support, or in determining what steps are required to install a given alternate OS on the device. *Legacy Boot Mode Unsupported method for booting alternate OSes (Linux, Windows) via the SeaBIOS RW_LEGACY firmware Accessed via [CTRL+L] on the developer mode boot screen Requires explicit enabling in Developer Mode via command line: sudo crossystem dev_boot_legacy=1 Most ChromeOS devices require a RW_LEGACY firmware update first Boots to the (black) SeaBIOS splash screen; if multiple boot devices are available, prompt shows the boot menu Note: If you hear two beeps after pressing [CTRL+L], then either your device doesn't have a valid Legacy Boot Mode / RW_LEGACY firmware installed, or legacy boot capability has not been been enabled via crossystem. https://www.howtogeek.com/278953/how-to-install-windows-on-a-chromebook/ Chromebooks don’t officially support other OSs. You normally can’t even install as Chromebooks ship with a special type of BIOS designed for Chrome OS. But there are ways to install, if you’re willing to get your hands dirty and potentially ruin everything [https://mrchromebox.tech/#devices Firmware Compatibility] [https://wiki.galliumos.org/Hardware_Compatibility Here is the list of hardware that the GalliumOS supports and information on getting Gallium OS on to those devices] Development on GalliumOS has been discontinued, and for most users, GalliumOS is not the best option for running Linux due to lack of hardware support or a kernel that's out of date and lacking important security fixes. Meet Eupnea and Depthboot, the successors to Galliumos and Breath [https://eupnea-linux.github.io This is the bleeding edge] Most older Chromebooks need the write-protect screw removed in order to install MrChromebox's firmware that allows you to install other operating systems. Most newer Chromebooks don't work in the same way as there is no write-protect screw on them. Very rough guide to '''total''' (i.e. all cores / threads) processor performance (AROS usually uses only the [https://gmplib.org/gmpbench one core]) [[#top|...to the top]] <pre> 060000 AMD Ryzen 9 7900X (AM5 170W), 056000 AMD Ryzen 9 5950X, 055000 AMD Ryzen 9 5900X3D, 053000 AMD Ryzen 9 5900X (AM4 105W), AMD Ryzen 9 3950X (105W), 044000 AMD Ryzen 7 5800X3D, 042000 AMD Ryzen 9 6900HX, AMD Ryzen 5 5600X3D (AM4 95W), AMD Ryzen 7 PRO 5750GE (AM4 35W), 039000 AMD Ryzen 9 5900HS, Intel Core i7-12700T, AMD Ryzen 7 7735HS (8c16t 45W), AMD 8840U, 038000 AMD Ryzen 7 5800H (FP6 45W), AMD Ryzen 7 6800U, Intel Core i5-12490F, Intel Core i5-12500E, 037000 AMD Ryzen 7 5800HS (FP6 35W), AMD Ryzen 5 8500G 8600GE (AM5 6c12t 35W), AMD Ryzen Z2 (8c16t), 036500 AMD Ryzen 7 5700G (AM4 8c16t 65W), AMD Ryzen 9 6900HS, Intel Core i7-12800H, 036200 AMD Ryzen 7 5700GE (AM4 8c16t 35W), AMD Ryzen Z1 Extreme (top TDP), AMD Ryzen 5 8600G (AM5 65W), 036000 AMD Ryzen 5 3600X (Am4 95W), AMD Ryzen 5 5500 (AM4 65W), AMD Ryzen 5 5600 (65W), 035000 AMD Ryzen 5 6600H, Intel Core i5-12400F, 031000 AMD Ryzen™ 9 8945HS, Ryzen™ 7 8845HS, AMD Ryzen 7 7840U, 030000 AMD Ryzen 7 4800U, AMD Ryzen 4800H, Intel Core i5-11400F, Intel Zeon E5-2697A V4, 029500 AMD Ryzen 5 4500 (AM4 65W), AMD Ryzen 5 3600 (65W), Apple M3 Pro 12c, AMD Ryzen 5 5600G, 028500 AMD Ryzen 5 PRO 5675U, AMD Ryzen 7 1700 (AM4 65W), AMD Ryzen 7 2700 (65W), Ryzen 3 7540U, 028000 AMD Ryzen 5 PRO 5650U, 5 5560U (FP6 25W 6c12t Zen3), Intel Core i5-13500H, AMD Ryzen 7 4800HS, 027700 AMD Ryzen 9 PRO 7940HS (FP8 65W), AMD 8745HS, AMD Ryzen H255 AI, AMD Ryzen 3 7545U, 027500 AMD Ryzen 3 7736U, AMD Ryzen 5 7640U, 027400 AMD Ryzen 5 8540U, AMD Ryzen 5 PRO 5650GE (AM4 6c12t 35W), AMD Ryzen 5 PRO 4650G (AM4 45W), 027300 AMD Ryzen 7 PRO 4750GE, AMD Ryzen 5 5600H, AMD Ryzen 7 5825U (FP6 8c16t 15W), 027200 AMD Ryzen 5 6600U, AMD Ryzen 7 2700X, AMD Ryzen 5 5600GE (AM4 35W), AMD Ryzen Z1, 027100 AMD Ryzen 7 7730U (FP6 15W 8c16t), AMD Ryzen 7 5800U (FP6 25W 8c16t), Ryzen 9 4900H, 027000 AMD Ryzen 7 PRO 4750U (8c16t), Ryzen 5 7430U (FP6 6c12t), Ryzen 5 PRO 6650U, Intel 10500H, 026500 AMD Ryzen 7 PRO 7840HS (FP7 65W), AMD Ryzen 7 8840HS, AMD Ryzen Z2 Extreme, 025000 AMD Ryzen 5 4600HS (FP6 35W 6c12t), Apple M1 Pro, AMD Ryzen 5 5625U (FP6 15W 6c12t), 024500 AMD Ryzen 5 5600U (FP6 25W hot 6c12t Zen3), AMD Ryzen 5 2600 (65W), Ryzen 5 7530U, 024000 AMD Ryzen 5 4600G (AM4 65W), AMD Ryzen 5 PRO 4650GE (AM4 35W), AMD Ryzen 7 PRO 1700X (AM4 95W), 023700 AMD Ryzen 3 PRO 5350GE (AM4 35W), AMD Ryzen 5 3500X (AM4 95W), Intel Core i7-9700, 023500 AMD Ryzen 5 1600X (95W), AMD Ryzen 3 5300GE (AM4 4c8t 35W), AMD Ryzen 7 5700U (FP6 25W 8c16t Zen2), 023200 AMD Ryzen 3 7330U (FP6 15W 4c8t), AMD Ryzen 7 4700U (FP6 25W 8c8t), AMD Ryzen 5 4400G, 023000 Intel Core i7-1255U, Intel Core i7 13700H, Ryzen 7640HS, 022000 AMD Ryzen Z2 Go (4c8t), AMD Ryzen 5 5500U (FP6 25W 6c12t Zen2), Snapdragon 8 Elite, 020500 AMD Ryzen 3 4300G (AM4 65W), AMD Ryzen 3 5450U 5425U, AMD Ryzen 5 PRO 4650U (6c12t), 019500 Intel Core i5-1135G7, AMD Ryzen 5 5500H, AMD Ryzen 5 4600U (FP6 25W 6c), AMD Ryzen 5 2600 (65W), 019250 Intel Core i5-1145G7, 019000 AMD Ryzen 5 3400G (AM4 65W), AMD Ryzen 5 2500X, AMD Ryzen 5 7520U, AMD Ryzen V3C18I (? 15W), 017750 AMD Ryzen 5 3400GE (AM4 35W), Intel Core i5-8400, AMD Ryzen 5 1500X (AM4 65W), Xbox One Series X, 017500 Intel Core i7-6700K, Intel i5-10400, AMD Ryzen 5 4500U (FP6 25W 6c6t), AMD Ryzen 3 5400U, 017000 AMD Ryzen 3 PRO 4350GE (AM4 35W), AMD Ryzen 3 5300U (FP6 25W 4c8t), Intel Core i5-11300H, 016500 AMD Ryzen 7 3750H, AMD Ryzen Embedded V1756B (FP5 45W), AMD Ryzen 3 PRO 4200GE, SD G3 Gen3, 016250 Intel Core i5-1035G7, intel core i5 7600 (4c4t 65W), 016000 AMD Ryzen 5 2400G (AM4 65W), AMD Ryzen 5 3550H, Ryzen 5 PRO 3350GE (4c 8t), Intel Core i5-8500T, 015500 AMD Ryzen Embedded R2544, Apple A19 Pro, Intel i7-4790K, 015000 AMD Ryzen 3 7320U, Ryzen 7 3700U, Ryzen 3200G (AM4 65W), Intel Core i7-8550U, Intel Core i5-1035G1, 014000 AMD Ryzen 5 2400GE (AM4 35W), Intel Core i7-6700T, AMD Ryzen 5 3550U, 013500 AMD Ryzen 5 3500U (FP5 15W 4c8t), AMD Ryzen 3 4300U, AMD Athlon Gold 4150GE, AMD Ryzen 5 3450U, 013250 AMD Ryzen 3 3200GE (AM4 45W), AMD Ryzen 3 1300X (65W), AMD Ryzen 3 2200G, Xbox One Series S, 013000 AMD Ryzen Embedded V1605B (FP5 25W), AMD Ryzen 2700U, AMD Ryzen R2514, Apple A18, 012500 AMD Ryzen 5 2500U (FP5 25W 4c8t), Intel Core i3-8300T, Intel Xeon X5680, Intel i3-1115G4 (2c4t), 012300 Intel Core i7-8565U, Intel Core i5-8350U, Intel Core i7-8700, Allwinner A733 (2 A76, 6 A55), 012200 ARM Cortex-X3 Prime Snapdragon SD8G2 Gen2 4nm 64-bit Kryo CPU, i5-8250U (4c8t), 012000 AMD Ryzen 3 2200GE, AMD Ryzen 3 1200 (65W), AMD Ryzen 5 3500C, 011500 AMD Ryzen 3 3300U, Intel Core i3-8100T, Intel Core i5-8265U, Intel i5-10210U, CORE i5-10310U, 010500 AMD Ryzen 3 2300U (FP5 25W 4c4t), Allwinner A527 (8 A55), Intel i5 4690K, 010300 Intel Core i7-3630QM, Intel Core i5-6600T, Intel Core i5-4670K, 010200 Intel Core i5-6440HQ, Intel Core i7-3610QM, Snapdragon SD865, 010000 AMD FX-8320E (AM3+ 125W 8c8t), Intel Core i5-7500T, Intel Core i5-4690, Intel i5 4690T, 009000 Spectrum Unisoc Tiger T7280 (T620), Cortex-X2, MediaTek Dimensity 1300 (4 A78, 4 A55), 008700 AMD FX-6130 (AM3+ 90W 6c6t), Intel Core i5-7400T, Intel Core i5-4590T, 008500 Intel Core i5-6500T, AMD Athlon 300GE (AM4, 35W), AMD Athlon Gold 7220U, 008000 AMD Ryzen R1606G (FP5 15W), AMD FX-6300 (AM3 65W 6c6t), Intel Core i5-2500K, 007500 AMD Ryzen 3 3200U, AMD Ryzen 3 3250U, Intel Alderlake ULX N100 / N95, 007200 AMD Ryzen 3 2200U (FP5 25W 2c4t), Intel Core i3-7100T, Intel Twinlakes N150 N200, Xbox(TM) One S, 007100 AMD Ryzen R1505G (FP5, 15W), RK3576 4 A72, 4 A53, Snapdragon XR2 Gen 1, Intel i7-6600U and 7600U, 006600 Qualcomm Snapdragon 888 5G, AMD Athlon 300U (FP5 2c4t 15W), Intel Core i7-7500U, AMD V1202B, 006500 Intel Core i7-6500U, AMD Athlon Gold 3150U, Intel Celeron N5105 (FCBGA1338 15W), SD 685, 006300 Intel Core i3-8130U (15W), Intel Celeron N5095 (FCBGA1338 15W), Intel Core i3-6100T, 006100 Intel Core i5-6300U, Intel Core i5-7200U (2c4t), Intel i7-5500U, Intel Core i7-6600U (2c4t), 006000 Intel Core i5-6200U (2c4t), Intel Core i3-7130U, Intel i7-4500U, Qualcomm Snapdragon 888 4G, 005950 Intel Core i5-4570T, Intel Core i5-5257U, Rockchip RK3588 (4 A76, 4 A55), Snapdragon 7325, 005900 Intel Xeon X5550, Intel Core i5-4300M, MediaTek Dimensity 1200 (4 A78, 4 A55), Unisoc 7255 (T616), 005800 Intel Celeron J4125 J4105 (FCBGA1090 15W), Intel Core i5-3470T, AMD A8-6600K APU, AMD 3015E (2c4t), 005600 Intel Core i5-3360M, Intel Core i7-3520M, Intel Core i5-4210M, Intel Pentium G4600T, 005400 MediaTek Dimensity 900 (2 A78, 6 A55), AMD Athlon Silver 7120U, Snapdragon 860, 005300 AMD PRO A12-9800B 7th Gen APU (FP4 15W), AMD FX-4300 4c4t, AMD Ryzen R1305G, 005250 Intel Core i5-3230M, AMD FX-7600P, Intel Pentium G4400, Unisoc T7200 (Unisoc T606 2 A76, 6 A55), 005200 AMD PRO A10-8770E, AMD A10-9700E, AMD PRO A10-9700B (FP4 15W), Intel Core i3-4130T, BCM2712 Pi5, 005100 AMD RX-427BB (FP3 15W), AMD A10-9620P, AMD A12-9720P, Intel Core i3-8145U, AMD A12-9830B, 005050 AMD A8-5500 (FM2 65W), AMD A10 PRO-7800B APU, Intel Pentium Silver N5000, Intel Core i7-5500U, 005000 Intel Core i5-5300U, Intel Core i5-3320M (2c4t), Intel Core i5-5350U, Unisoc T618 (2 A73 6 A53), 004900 Intel Core i5-4300U, Intel Core i5-5200U, Intel Core i3-4100M, Snapdragon 662 (SM6115), 004860 Intel Core i7-2620M, Intel Core i7-2640M, AMD Athlon Silver 3050U 3050e, Intel i3-7020U, 004650 Intel Core i5-2520M (2c4t), Intel Core i5-3210M, AMD A10-9600P (FP4 4c 15W), Pentium 4415U, 004625 Intel Core i3-7100U (FCBGA1356 15W), ARM A76 RK3588S, AMD A10-6800B APU, 004600 AMD PRO A8-9600B, AMD PRO A12-8830B, AMD PRO A10-8730B, AMD A12-9700P, Intel Core i3-6100U, 004200 AMD A10-8700P A8-8600P, Intel Core i5-4200U, Intel Core i5-2540M, Intel i3-6006U, Intel i3-4150T, 004000 Intel Core i5-2430M, AMD PRO A8-8600B, AMD 3020e, Mediatek MT6797 Helio X20, 003850 Intel Core i5-2410M (2c4t), Intel Core i3-2120 (LGA1155 65W), Mediatek MT8786, 003800 AMD A10-4600M APU, AMD A10 PRO-7350B APU, AMD A10-5750M APU, Rockchip RK3399, 003600 AMD A8-6500T APU, AMD A8-7410 APU, AMD PRO A6-8550B, AMD A8-5550M (4c4t), 003500 AMD GX-424CC SOC (FT3b 25W 4c4t), ARM A75 Unisoc Tiger T610 (Spreadtrum) (8c 5W), intel i5-5250u, 003400 AMD A10-7300 APU, AMD A6-7310 APU, AMD A8-6410, AMD A10-5745M APU, Intel Core i3-4000M, 003350 Intel Pentium G2020, Intel Core i3-3120M (G2 2c4t), AMD R-464L APU, Intel® Core m5-6Y57 (2c4t), 003300 AMD GX-420CA SOC (FT3 BGA769 25W), AMD A6-9500E, Intel Celeron N4200, AMD A6-5200 ( 25W 2c2t), 003200 AMD A6-6310 APU, AMD A6-6400B APU, AMD A6-8570E, AMD A8-4500M APU, AMD A6-7400K APU, 003000 AMD A8-7150B, AMD A9-9410, A9-9420, A9-9425, AMD A6-8500B (FP4 15W), AMD A8-7100, Intel 5010u, 002900 AMD PRO A6-8530B, AMD A6-8500P, AMD A8-3500M APU, Intel Core i3-2120T, Intel i5-4250u, 002700 AMD Embedded GX-420GI (FP4 15W), AMD PRO A6-9500B, AMD GX-415GA, AMD A4-6210 APU, Intel i3-5005U, 002600 AMD A6-9225, AMD A8-4555M APU, AMD A4-5000 APU (FT3 15W), AMD A6-9220, AMD A6-3420M APU, 002450 Intel Celeron 2950M, Intel Pentium N3700, Intel Core i3-2350M, Allwinner A523 (8 A55), BCM2711 Pi4, 002400 Intel Celeron N3150, Intel Core i3-2330M, Intel Xeon W3505, AMD A6-9210, Allwinner H618 (4 A53), 002300 Intel Celeron N3350, AMD A4-9120, AMD A4-9125, Intel Core i3-2310M, Intel Celeron 3865U, 002200 AMD A9-9420e, AMD A6-5350M APU, AMD E2-6110 APU, AMD E2-9000e, Celeron N4500, Intel N3710, 002000 AMD GX-412HC, AMD A4-4300M APU, AMD A6 PRO-7050B APU, AMD A6-4400M APU, AMD A6-7000, 001925 Intel Core2 Duo E6700, Intel Pentium Extreme Edition 965, Intel Core i3-370M, Celeron N4020, 001750 Intel Core i3-2365M 2375M, AMD A4-9120C, Intel Core2 Duo T8300, Qualcomm MSM8939, 001600 AMD GX-222GC (BGA769 FT3b 15W), AMD A4-9120e, AMD Embedded GX-215JJ, AMD A4-4355M APU, 001550 Intel Core2 Duo SL9400 T7600 T6600, AMD E2-3200, AMD A6-9220e, Mediatek MT8783, AMD E2-3800, 001520 Intel Celeron N4000, 001500 AMD GX-218GL SOC, AMD A6-4455M, AMD A4-5150M APU, ARM A55 RK3566 (4c 3W), Intel Core2 Duo T8100, 001400 AMD GX-217GA SOC, ARM Cortex-A53 4c4t H700, AMD A4-3300M APU, Allwinner A133P A64 (4 A53), 001300 AMD Turion 64 X2 Mobile TL-64 TL-62, Intel Core2 Duo T7300, Intel Core2 Duo T5600, AMD RX-216TD, 001250 AMD GX-412TC SOC, AMD A4-3320M APU, AMD Athlon 64 X2 QL-66, Intel Core2 Duo T7200, BCM2837 Pi3, 001200 AMD Athlon 64 X2 2c TK-57, AMD Turion 64 X2 Mobile TL-60 RM-74, AMD E1-2500, AMD E2-7015, 001150 Intel Core2 Duo T5550, Intel Core2 Duo L7500, AMD E2-3000M APU, ARM A35 RK3266, AMD E2-7110, 001100 Intel Core2 Duo T5300, AMD Athlon 64 X2 3800, Intel Core2 Duo E4300, Mediatek MT8127, 001050 AMD E1-6010 APU, Intel Pentium T4300, Intel Celeron N2840, 001050 AMD Athlon 64 FX-57, AMD Athlon 64 X2 Dual-Core TK-55, AMD Turion 64 X2 Mobile TL-52 001000 Intel Core2 Duo T5500, Intel Core2 Duo L7300, Intel Core2 Duo SU9400, Intel Celeron 3215U, 000950 AMD G-T56N, AMD Athlon 64 3100+, AMD E2-2000 APU, QorIQ T1042 quad-core, 000950 AMD Turion 64 X2 Mobile TL-50, AMD E1-2200 APU, Intel Celeron U3400, 000925 AMD TurionX2 Dual Core Mobile RM-72, AMD Sempron 140 000920 Intel Celeron SU2300, Intel Core2 Duo T5200, AMD Turion 64 X2 Mobile TL-56 000890 AMD E2-1800 APU, AMD Turion 64 X2 Mobile TL-58 000880 AMD G-T56E, AMD G-T48E, 000860 AMD E-450 APU, AMD E-350 APU, AMD Athlon LE-1620 000820 AMD A4-1250 APU, AMD Athlon LE-1600, 000810 AMD E1-2100 APU, Intel Core Duo T2500, 000810 Intel Atom D510, Intel Core2 Duo U7500, 000800 AMD Geode NX 2400+, AMD Turion 64 Mobile ML-42, AMD Athlon II Neo K325, 000760 AMD V140, AMD E1-1200 APU, AMD Athlon 64 3300+, 000730 Intel Core Duo T2400, AMD Turion 64 Mobile MK-38, AMD Sempron 3600+, 000700 Intel Core2 Duo U7600 U7700, AMD Sempron LE-1200, AMD V120 000680 AMD GX-212JC SOC, AMD E-300 APU, AMD A4-1200 APU, BCM2386 Pi2B, 000670 AMD Turion 64 Mobile MK-36 ML-37 ML-40, Mobile AMD Sempron 3800+ 000640 Intel Atom N2600, Intel Atom N570, Mobile AMD Athlon 64 3200+ 000640 Intel Core Duo T2300, Intel Core Duo T2050, 000630 VIA Eden X2 U4200, AMD Sempron LE-1100, AMD Sempron 3100+ 3600+, 000620 AMD C-70 C70 APU, Intel Atom 330, AMD G-T40N, AMD Athlon Neo MV-40, 000610 Intel Core2 Duo U7300, AMD Athlon II Neo K125 K145, 000600 Intel Atom N550, Intel Pentium 4, AMD Athlon 64 2800+, 000580 AMD C-60 C60, AMD G-T40E, AMD Sempron LE-1250 000530 AMD C-50 C50, Intel Celeron M 723, AMD Sempron 210U, 000490 AMD GX-210JA SOC, PowerPC 970 G5 IBM's 970 server CPU (2c), QorIQ T1022 000470 Mobile AMD Sempron 3500+, Mobile AMD Athlon XP-M 2200+, 000460 AMD Athlon XP 2500+, AMD Sempron 3500+, Mobile Intel Pentium 4, 000440 Intel Atom D425, Intel Atom N470, POWER 4 PPC, 000410 Intel Pentium M, Intel Celeron M, AMD Sempron 2300+ 000400 Intel Atom N450, AMD Sempron 2400+, 000340 Intel Atom D410, AMD G-T52R, AMD C-30, AMD Sempron 2200+ 000330 Intel Atom N455, Intel Atom N280, Intel Atom N270 (1c1t 2W), Intel P3, 000320 Freescale NXP QorIQ P1022 000310 PowerPC G4 7447 1Ghz (1c1t 15W), PPC440 core, 000230 PowerPC PPC G3/PPC 750, 000160 Pentium II, Motorola 68060 000080 Intel 80486, Motorola 68030, 000040 Intel 80386, 000030 Motorola 68020 000008 Motorola 68000 </pre> === Recommended hardware (32-bit) === [[#top|...to the top]] Recommended hardware is hardware that has been tested with latest release of AROS and is relatively easy to purchase second hand (ie. ebay). This hardware also comes with commitment that compatibility will be maintained with each future release. If in future decision will be made to drop any of the recommended hardware from the list (for example due to it no longer being available for purchase), such hardware will move to list of legacy supported systems and will have an indicated end of life date so that users have time to switch to other hardware. {| class="wikitable sortable" width="100%" | <!--OK-->{{Yes|'''Works well'''}} || <!--Not working-->{{No|'''Does not work'''}} || <!--Not applicable-->{{N/A|'''N/A not applicable'''}} |- |} ==== Virtual Hardware ==== {| class="wikitable" width="100%" ! width="20%" |Name ! width="5%" |Storage ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |Ethernet ! width="5%" |Wireless ! width="10%" |Additional hardware ! width="45%" |Comments |- | VirtualBox 7.x (Other/Unknown template) || {{Yes|IDE<br/>SATA(AHCI)}} || {{Yes|VMWARESVGA}} || {{Yes|HDAudio}} || {{Yes|PCNET32<br/>E1000}} || NOT APPLICABLE || NOT APPLICABLE || <!--Comments--> |- | VMware 16+ (Other32 template) || {{Yes|IDE<br/>SATA(AHCI)}} || {{Yes|VMWARESVGA}} || {{Yes|SB128}} || {{Yes|PCNET32}} || NOT APPLICABLE || NOT APPLICABLE || <!--Comments--> |- | QEMU 8.x ("pc" and "q35" machines) || {{Yes|IDE<br/>SATA(AHCI)}} || {{Yes|VESA}} || {{Yes|SB128}} || {{Yes|PCNET32}} || NOT APPLICABLE || NOT APPLICABLE || <!--Comments--> |- |} ==== Laptops ==== {| class="wikitable" width="100%" ! width="20%" |Name ! width="5%" |Storage ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |Ethernet ! width="5%" |Wireless ! width="10%" |Additional hardware ! width="45%" |Comments |- | ACER Aspire One ZG5 || {{Yes|IDE<br/>SATA(IDE)}} || {{Yes|GMA}} || {{Yes|HDAudio}} || {{Yes|RTL8169}} || {{Yes|ATHEROS}} || NOT APPLICABLE || <!--Comments--> |- | Dell Latitude D520 || {{Yes|IDE}} || {{Yes|GMA}} || {{Yes|HDAudio}} || {{Yes|BCM4400}} || {{No|}} || {{Yes|Atheros AR5BXB63}} || * select Intel Core 2 64-bit version, not Celeron 32-bit version <br/> * replace WiFi card to get wireless working |- |} ==== Desktop Systems ==== {| class="wikitable" width="100%" ! width="20%" |Name ! width="5%" |Storage ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |Ethernet ! width="5%" |Wireless ! width="10%" |Additional hardware ! width="45%" |Comments |- | Fujitsu Futro S720 || {{Yes|SATA(AHCI)}} || {{Yes|VESA}} || {{Yes|HDAudio}} || {{Yes|RTL8169}} || NOT APPLICABLE || NOT APPLICABLE || * no 2D/3D acceleration<br/> * use USB ports at back |- |} ==== Motherboards ==== {| class="wikitable" width="100%" ! width="20%" |Name ! width="5%" |Storage ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |Ethernet ! width="5%" |Wireless ! width="10%" |Additional hardware ! width="45%" |Comments |- | ASUS P8Z68V LX || {{Yes|SATA(AHCI)}} || {{Yes|VESA}} || {{Yes|HDAudio}}|| {{Yes|RTL8169}} || NOT APPLICABLE || {{Yes|GeForce 8xxx/9xxx}} || * add external PCIe video card for better performance |- | Gigabyte GA-MA770T UD3/UD3P || {{Yes|IDE<br/>SATA(AHCI)}} || NOT APPLICABLE || {{Yes|HDAudio}}|| {{Yes|RTL8169}} || NOT APPLICABLE || {{Yes|GeForce 8xxx/9xxx}} || * requires external PCIe video card |- | ASUS M2N68-AM SE2 || {{Yes|IDE}} || {{Yes|NVIDIA}} || {{Yes|HDAudio}}|| {{Yes|NVNET}} || NOT APPLICABLE || {{Yes|GeForce 8xxx/9xxx}} || * connecting a disk via SATA connector is not supported at this time <br/> * add external PCIe video card for better performance |- | Gigabyte GA-H55M-S2H || {{Yes|IDE<br/>SATA(AHCI)}} || {{Yes|VESA}} || {{Yes|HDAudio}}|| {{Yes|RTL8169}} || NOT APPLICABLE || {{Yes|GeForce 8xxx/9xxx}} || * add external PCIe video card for better performance |- |} ==== Legacy supported hardware ==== {| class="wikitable" width="100%" ! width="20%" |Name ! width="5%" |Storage ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |Ethernet ! width="5%" |Wireless ! width="10%" |Additional hardware ! width="10%" |EOL ! width="35%" |Comments |- | iMica || {{Yes|IDE}} || {{Yes|GMA}} || {{Yes|HDAudio}}|| {{Yes|RTL8169}} || NOT APPLICABLE || NOT APPLICABLE || 2026-12-31 || |- | Gigabyte GA-MA770 UD3 || {{Yes|IDE<br/>SATA(IDE)}} || NOT APPLICABLE || {{Yes|HDAudio}}|| {{Yes|RTL8169}} || NOT APPLICABLE || {{Yes|GeForce 8xxx/9xxx}} || 2026-12-31 || * requires external PCIe video card |- |} === Recommended hardware (64-bit) === [[#top|...to the top]] Recommended hardware is hardware that has been tested with latest release of AROS and is relatively easy to purchase second hand (ie. ebay). This hardware also comes with commitment that compatibility will be maintained with each future release. ==== Virtual Hardware ==== {| class="wikitable" width="100%" ! width="20%" |Name ! width="5%" |Storage ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |Ethernet ! width="5%" |Wireless ! width="10%" |Additional hardware ! width="45%" |Comments |- | VirtualBox 7.x (Other/Unknown (64-bit) template) || {{Yes|IDE<br/>SATA(AHCI)}} || {{Yes|VMWARESVGA}} || {{Yes|HDAudio}} || {{Yes|PCNET32<br/>E1000}} || NOT APPLICABLE || NOT APPLICABLE || * No accelerated 3D support |- | VMware 16+ (Other64 template) || {{Yes|IDE<br/>SATA(AHCI)}} || {{Yes|VMWARESVGA}} || {{Yes|SB128}} || {{Yes|E1000}} || NOT APPLICABLE || NOT APPLICABLE || * No accelerated 3D support |- | QEMU 8.x ("pc" and "q35" machines) || {{Yes|IDE<br/>SATA(AHCI)}} || {{Yes|VMWARESVGA}} || {{Yes|SB128}} || {{Yes|PCNET32}} || NOT APPLICABLE || NOT APPLICABLE || * No accelerated 3D support |- |} ==== Motherboards ==== AROS 64-bit will work on most of [https://en.wikipedia.org/wiki/LGA_1155 LGA 1155] and [https://en.wikipedia.org/wiki/LGA_1150 LGA 1150] boards. It will also work with newer hardware - see complete HCL list above. Boards below are '''certified'''. If you can't get the exact board, try a variant of that board with the same chipset. {| class="wikitable" width="100%" ! width="20%" |Name ! width="5%" |Storage ! width="5%" |Gfx ! width="5%" |Audio ! width="5%" |Ethernet ! width="5%" |Wireless ! width="10%" |Additional hardware ! width="45%" |Comments |- | ASUS P8Z68V LX<br>ASUS P8Z68-M PRO || {{Yes|SATA(AHCI)}} || {{Yes|VESA}} || {{Yes|HDAudio}}|| {{Yes|RTL8169}} || NOT APPLICABLE || {{Yes|GeForce GTX 7xx/9xx}} || * add external PCIe video card for better performance |- | ASUS H81M-K || {{Yes|SATA(AHCI)}} || {{Yes|VESA}} || {{Yes|HDAudio}}|| {{Yes|RTL8169}} |NOT APPLICABLE|| {{Yes|GeForce GTX 7xx/9xx}} |* add external PCIe video card for better performance |- | Gigabyte GA-H81M-S2V || {{Yes|SATA(AHCI)}} || {{Yes|VESA}} || {{Yes|HDAudio}}|| {{Yes|RTL8169}} |NOT APPLICABLE|| {{Yes|GeForce GTX 7xx/9xx}} |* add external PCIe video card for better performance |} ==References== [[#top|...to the top]] {{reflist}} {{BookCat}} egq96v6wd0ehmhzonuv68wu5f9yzp1o Aros/User/Applications 0 237399 4671962 4671805 2026-09-23T12:46:43Z Jeff1138 301139 4671962 wikitext text/x-wiki ==Introduction== [[#Graphical Image Editing Art]] [[#Office Application]] [[#Audio]] [[#Misc Application]] [[#Games & Emulation]] [[#Application Guides]] [[#top|...to the top]] [[#top|...to the top]] Most apps can be opened on the Workbench (aka publicscreen pubscreen) which is the default display option but can offer a custom one set to your configurations (aka custom screen mode promotion). These custom ones tend to stack so the possible use of A-M/A-N method of switching between full screens and the ability to pull down screens as well If you are interested in creating or porting new software, see [http://en.wikibooks.org/wiki/Aros/Developer/Docs here] {| class="wikitable sortable" |- !width:30%;|Internet Applications !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1 (68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Web Online Browser [], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=network/browser Amelinium], Odyssey 2.0, [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1175&highlight=odyssey&rowstart=100 Odyssey 3.0], [], |<!--Amiga OS-->[https://juen.in/ Amelinium], [https://blog.alb42.de/programs/amifox/ amifox] with [https://github.com/alb42/wrp wrp server], IBrowse*, [https://github.com/zapek/Voyager Voyager], [https://github.com/amigazen/aweb3/ AWeb 3.6 src], [https://github.com/matjam/aweb AWeb Src], [http://aminet.net/package/comm/www/NetSurf-m68k-sources Netsurf], [], |<!--AmigaOS4-->[ Odyssey OWB], [ Timberwolf (Firefox port 2011)], [http://amigaworld.net/modules/newbb/viewtopic.php?forum=32&topic_id=32847 OWB-mui], [http://strohmayer.org/owb/ OWB-Reaction], IBrowse*, [http://os4depot.net/index.php?function=showfile&file=network/browser/aweb.lha AWeb], Voyager, [http://www.os4depot.net/index.php?function=browse&cat=network/browser Netsurf], |<!--MorphOS-->Wayfarer, [http://fabportnawak.free.fr/owb/ Odyssey OWB], [ Netsurf], IBrowse*, AWeb, [], |- |<!--Sub Menu-->YouTube, Dailymotion website downloading videos audio [https://github.com/yt-dlp/yt-dlp yt-dlp], [https://clipgrab.org/ clipgrab], |<!--AROS-->[], [https://blog.alb42.de/amitube/ Amitube], |<!--Amiga OS-->[https://blog.alb42.de/amitube/ Amitube], [ smtube], |<!--AmigaOS4-->[https://blog.alb42.de/amitube/ Amitube], getVideo, Tubexx, [https://github.com/walkero-gr/aiostreams aiostreams], |<!--MorphOS-->[ ytsearch], [https://blog.alb42.de/amitube/ Amitube], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 getVideo], Tubexx |- |<!--Sub Menu-->Old style E-mailing SMTP POP3 IMAP based |<!--AROS-->Emailinium, [http://archives.arosworld.org/index.php?function=browse&cat=network/email SimpleMail], [http://sourceforge.net/projects/simplemail/files/ src], [https://github.com/jens-maus/yam YAM] |<!--Amiga OS-->Emailinium, [http://sourceforge.net/projects/simplemail/files/ SimpleMail], [https://github.com/jens-maus/yam YAM] |<!--AmigaOS4-->SimpleMail, YAM, |<!--MorphOS--> SimpleMail, YAM |- |<!--Sub Menu-->IRC, ICB, |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/chat WookieChat], [https://sourceforge.net/projects/wookiechat/ Wookiechat src], [http://archives.arosworld.org/index.php?function=browse&cat=network/chat AiRcOS], Jabberwocky, |<!--Amiga OS-->[https://github.com/charabaruk/WookieChat Wookiechat], AmIRC |<!--AmigaOS4-->Wookiechat |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=5 Wookiechat], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 AmIRC], |- |<!--Sub Menu-->Instant Messaging IM like [https://github.com/BlitterStudio/amidon Hollywood lang based Mastodon client], BlueSky AT protocol, Facebook(TM), Twitter X (TM), Bitlbee IRC Gateway and others |<!--AROS-->[https://github.com/kaffeine1/telegram-amiga telegram-amiga], [http://archives.arosworld.org/index.php?function=browse&cat=network/chat jabberwocky], |<!--Amiga OS-->[http://amitwitter.sourceforge.net/ AmiTwitter], CLIMM, SabreMSN, [https://sourceforge.net/projects/ajabberwocky/ jabberwocky], |<!--AmigaOS4-->[http://amitwitter.sourceforge.net/ AmiTwitter], SabreMSN, |<!--MorphOS-->[http://amitwitter.sourceforge.net/ AmiTwitter], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 PolyglotNG], SabreMSN, |- |<!--Sub Menu-->Torrents |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/p2p ArTorr], |<!--Amiga OS--> |<!--AmigaOS4-->CTorrent, Transmission |<!--MorphOS-->MLDonkey, Beehive, [http://morphos.lukysoft.cz/en/vypis.php?kat=5 Transmission], CTorrent, |- |<!--Sub Menu-->FTP |<!--AROS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], MarranoFTP, [https://aminet.net/package/comm/tcp/wput-0.3.4c.i386-aros wput i386 c src] |<!--Amiga OS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], [http://aminet.net/package/comm/tcp/AmiFTP AmiFTP], AmiTradeCenter, ncFTP, [https://aminet.net/package/comm/tcp/sana2-tftpclient sana2 tftpclient c src] |<!--AmigaOS4-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], |<!--MorphOS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 Pftp], [http://aminet.net/package/comm/tcp/AmiFTP-1.935-OS4 AmiFTP], |- |<!--Sub Menu-->WYSIWYG Web Site Editor |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Internet Radio Streaming Audio [http://www.gnu.org/software/gnump3d/ gnump3d], [http://www.icecast.org/ Icecast2] Server (Broadcast) and Client (Listen), [ mpd], [http://darkice.sourceforge.net/ DarkIce], [http://www.dyne.org/software/muse/ Muse], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=audio/misc], Mplayer (Icecast Client only), |<!--Amiga OS-->[https://github.com/sandlbn/TuneFinder TuneFinder C Src], [https://github.com/sandlbn/TuneFinderMUI TuneFinderMUI], [http://amigazeux.net/anr/ AmiNetRadio], [https://github.com/boingball/MintAMP MintAMP], [], |<!--AmigaOS4-->[http://www.tunenet.co.uk/ Tunenet], |<!--MorphOS-->Mplayer, AmiNetRadio, |- |<!--Sub Menu-->VoIP (Voice over IP) with SIP Client (Session Initiation Protocol) or Asterisk IAX2 Clients Softphone (skype like) |<!--AROS--> |<!--Amiga OS-->AmiPhone with Speak Freely, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Weather Forecast |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ WeatherBar], [http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench AWeather], [] |<!--Amiga OS-->[http://amigazeux.net/wetter/ Wetter], [https://github.com/emartisoft/AmiWeatherForecasts AmiWeatherForecasts src], |<!--AmigaOS4-->[http://os4depot.net/?function=showfile&file=utility/workbench/flipclock.lha FlipClock], |<!--MorphOS-->[http://amigazeux.net/wetter/ Wetter], |- |<!--Sub Menu-->Street Road Maps Route Planning GPS Tracking |<!--AROS-->[https://blog.alb42.de/programs/muimapparium/ MuiMapparium] [https://build.alb42.de/ Build of MuiMapp versions], |<!--Amiga OS-->AmiAtlas*, UKRoutePlus*, [http://blog.alb42.de/ AmOSM], |<!--AmigaOS4--> |<!--MorphOS-->[http://blog.alb42.de/programs/mapparium/ Mapparium], |- |<!--Sub Menu-->Clock and Date setting from the internet by network time protocol (NTP) [https://www.timeanddate.com/worldclock/ World Clock], [http://www.time.gov/ old standard NIST], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/misc ntpsync], [https://archives.arosworld.org/?function=showfile&file=utility/workbench/amitimekeeper.i386-aros.lha amitimekeeper with c src], [PiNTP], [], |<!--Amiga OS-->ntpsync, [http://aminet.net/package/util/cdity/AmiTimeKeeper amitimekeeper], [http://aminet.net/comm/misc/netclock netclock], [https://aminet.net/package/comm/net/sntp sntp], [http://aminet.net/package/util/time/ScreenTime ScreenTime], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Newsgroups |<!--AROS--> |<!--Amiga OS-->[http://newscoaster.sourceforge.net/ Newscoaster], [https://github.com/jens-maus/newsrog NewsRog], [ WorldNews], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->RSS |<!--AROS--> |<!--Amiga OS-->[https://github.com/Team-Boingo/AmiRSS AmiRSS src] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->AI |<!--AROS--> |<!--Amiga OS-->[https://github.com/murinsel/AmigaAI Claude], [https://github.com/geekychris/amiga_mcp AI on host machine], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->BBS |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. ==Graphical Image Editing Art== {| class="wikitable sortable" |- !width:30%;|Image Editing !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Pixel Raster Artwork [https://github.com/LibreSprite/LibreSprite LibreSprite based on GPL aseprite], [https://github.com/abetusk/hsvhero hsvhero], [], |<!--AROS-->[https://sourceforge.net/projects/zunetools/files/ZunePaint/ ZunePaint], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit LunaPaint], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit GrafX2], [ LodePaint needs OpenGL], |<!--Amiga OS-->[http://www.amigaforever.com/classic/download.html PPaint], GrafX2, [https://github.com/grovdata/Amiga_Sources/blob/master/software.md DeluxePaint], [http://www.amiforce.de/perfectpaint/perfectpaint.php PerfectPaint], Zoetrope, Brilliance2*, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=graphics/edit LodePaint], GrafX2, |<!--MorphOS-->Sketch, Pixel*, GrafX2, [http://morphos.lukysoft.cz/en/vypis.php?kat=3 LunaPaint] |- |<!--Sub Menu-->Image viewing |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ ZuneView], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer LookHere], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer LoView], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer PicShow] , [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album], |<!--Amiga OS-->PicShow, PicView, Photoalbum, |<!--AmigaOS4-->WarpView, PicShow, flPhoto, Thumbs, [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 ShowGirls], [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album] |- |<!--Sub Menu-->Photography retouching / Image Manipulation like Photoshop(tm) |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit RNOEffects], |<!--Amiga OS-->[ Tecsoft Video Paint aka TVPaint], Photogenics*, ArtEffect*, ImageFX*, XiPaint, fxPaint, ImageMasterRT, Opalpaint, |<!--AmigaOS4-->WarpView, flPhoto, [http://www.os4depot.net/index.php?function=browse&cat=graphics/edit Photocrop] |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 ShowGirls], ImageFX*, |- |<!--Sub Menu-->Manage RAW picture folder galleries like Darktable, RAWtherapy, etc |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Graphic Format Converter - ICC profile support sRGB, Adobe RGB, XYZ and linear RGB |<!--AROS--> |<!--Amiga OS-->GraphicsConverter, ImageStudio, [http://www.coplabs.org/artpro.html ArtPro] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Thumbnail Generator [], |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ ZuneView], [http://archives.arosworld.org/index.php?function=browse&cat=utility/shell Thumbnail Generator] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Icon Editor |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/iconedit Archives], [http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench Icon Toolbox], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=graphics/iconedit IconEditor] |<!--MorphOS--> |- |<!--Sub Menu-->2D Pixel Art Animation |<!--AROS-->Lunapaint |<!--Amiga OS-->PPaint, AnimatED, Scala*, GoldDisk MovieSetter*, Walt Disney's Animation Studio*, ProDAD*, [https://github.com/historicalsource/DeluxePaint DeluxePaint src], Brilliance |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 Titler] |- |<!--Sub Menu-->2D SVG based MovieSetter type |<!--AROS--> |<!--Amiga OS-->MovieSetter*, Fantavision* |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Morphing |<!--AROS-->[ GLMorph] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->2D Cad (qcad->LibreCAD, etc.) |<!--AROS--> |<!--Amiga OS-->Xcad, MaxonCAD |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Cad like FreeCad, BRL-CAD, OpenSCAD, AvoCADo, etc. using dxf, obj (vertices), blend, |<!--AROS--> |<!--Amiga OS-->XCad3d*, DynaCADD*, [https://aminet.net/package/gfx/3d/Cycas178_EN Cycas]*, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Model Rendering of glft (json) gbl (png jpg), usdz (USD files with materials, textures, and animations), FBX Filmbox is a proprietary Autodesk format, |<!--AROS-->POV-Ray |<!--Amiga OS-->[http://www.discreetfx.com./amigaproducts.html CINEMA 4D]*, POV-Ray, Lightwave3D*, Real3D*, Caligari24*, Reflections/Monzoom*, [https://github.com/privatosan/RayStorm Raystorm src], Tornado 3D, [https://github.com/AlphaPixel/Eric-Graham-1987-Juggler-Raytracer-1.0 Eric-Graham-1987-Juggler-Raytracer-1.0] |<!--AmigaOS4-->Blender, POV-Ray, Yafray |<!--MorphOS-->Blender, POV-Ray, Yafray |- |<!--Sub Menu-->3D Format Converter [], [], |<!--AROS-->[https://archives.arosworld.org/?function=showfile&file=graphics/convert/ 3doc.i386-aros], [], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=showfile&file=graphics/convert/ivcon.lha IVCon] |<!--MorphOS--> |- |<!--Sub Menu-->Screen grabbing display |<!--AROS-->[ Screengrabber], [http://archives.arosworld.org/index.php?function=browse&cat=utility/misc snapit], [http://archives.arosworld.org/index.php?function=browse&cat=video/record screen recorder], [] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Grab graphics music from apps [https://github.com/Malvineous/ripper6 ripper6], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Office Application== {| class="wikitable sortable" |- !width:30%;|Office !width:10%;|AROS (x86) !width:10%;|[http://en.wikipedia.org/wiki/Amiga_software Commodore-Amiga OS 3.1] (68k) !width:10%;|[http://en.wikipedia.org/wiki/AmigaOS_4 Hyperion OS4] (PPC) !width:10%;|[http://en.wikipedia.org/wiki/MorphOS MorphOS] (PPC) |- |<!--Sub Menu-->Office Suite |<!--AROS--> |<!--Amiga OS-->[ Softwood Final Office], [ Wordworth Office], [ Digita Office], [ The Works!], [ Europress Mini Office], [], [ Papyrus Office Demo], |<!--AmigaOS4--> |<!--MorphOS-->[ Papyrus Office], |- |<!--Sub Menu-->Word-processing |<!--AROS-->[https://finalwriter.godaddysites.com/ Final Writer 7*], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1995&rowstart=20&pid=12668#post_12668 Slovo], [https://github.com/sodero/MUI-Vim/releases MUI-Vim], [https://archives.arosworld.org/index.php?function=browse&cat=office/wordprocessing Cinnamon Writer], [], |<!--AmigaOS-->[ Softwood FinalCopy II*], Haage AmigaWriter*, Digita WordWorth*, Softwood FinalWriter*, Micro-Systems Excellence 3*, Arnor Protext, Rashumon, [ InterWord], [ KindWords], [WordPerfect], [ New Horizons Flow], [ CygnusEd Pro], [ Micro-systems Scribble], |<!--AmigaOS4-->AbiWord, [ CinnamonWriter], |<!--MorphOS-->[ Cinnamon Writer], [http://www.meta-morphos.org/viewtopic.php?topic=1246&forum=53 scriba], [http://morphos.lukysoft.cz/en/index.php Papyrus Office], |- |<!--Sub Menu-->Spreadsheets |<!--AROS-->[https://blog.alb42.de/programs/leu/ Leu], [https://archives.arosworld.org/index.php?function=browse&cat=office/spreadsheet ], |<!--AmigaOS-->[https://aminet.net/package/biz/spread/ignition-src Ignition Src 1.3], [MaxiPlan 500 Plus], [OXXI Plan/IT v2.0 Speadsheet], [ Superplan], [ Creative Developments TurboCalc], [ ProCalc], [ InterSpread], [Digita DGCalc], [ Gold Disk Advantage], [ Micro-systems Analyze!] |<!--AmigaOS4-->Gnumeric, [https://ignition-amiga.sourceforge.net/ Ignition], |<!--MorphOS-->[ ignition], [http://morphos.lukysoft.cz/en/vypis.php Papyrus Office], |- |<!--Sub Menu-->Presentations |<!--AROS-->[http://www.hollywoood-mal.com/ Hollywood]*, |<!--Amiga OS-->[http://www.hollywoood-mal.com/ Hollywood]*, [https://github.com/evaneykelen/mediapoint-amiga MediaPoint C and asm], PointRider, Scala*, |<!--Amiga OS4-->[http://www.hollywoood-mal.com/ Hollywood]*, PointRider |<!--MorphOS-->[http://www.hollywoood-mal.com/ Hollywood]*, PointRider |- |<!--Sub Menu-->Databases |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=office/database BeeBase], |<!--Amiga OS-->Precision Superbase 4 Pro*, Arnor Prodata*, [https://sourceforge.net/projects/beebase/ BeeBase], Datastore, FinalData*, AmigaBase, Fiasco, Twist2*, [Digita DGBase], [], |<!--AmigaOS4-->BeeBase, SQLite, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=6 BeeBase], |- |<!--Sub Menu-->PDF Viewing and editing digital signatures |<!--AROS-->[https://github.com/tomaszstaniak/aros-foliopdf aros-foliopdf version of mupdf], [http://sourceforge.net/projects/arospdf/ ArosPDF via splash], [https://github.com/wattoc/AROS-vpdf vpdf], |<!--Amiga OS-->APDF |<!--AmigaOS4-->AmiPDF |<!--MorphOS-->APDF, vPDF, |- |<!--Sub Menu-->Note Taking markdown support like Obsidian like, joplin, OneNote, EverNotes, xournalpp, etc |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Study and analyse, collect, organize, annotate, cite, and share |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->PIM Personal Information Manager - Day Diary Planner Calendar App Filofax like |<!--AROS-->[ ], [ ], [ ], |<!--Amiga OS-->Digita Organiser*, On The Ball, Everyday Organiser, [ Contact Manager], |<!--AmigaOS4-->AOrganiser, |<!--MorphOS-->[http://polymere.free.fr/orga_en.html PolyOrga], |- |<!--Sub Menu-->Accounting |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=office/misc ETB], LoanCalc, [ ], [ ], [ ], |[ Digita Home Accounts2], Accountant, Small Business Accounts, Account Master, [ Amigabok], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Project Management Research |<!--AROS--> |<!--Amiga OS-->SuperGantt, SuperPlan, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Desktop |<!--AROS-->Wanderer, Scalos, Workbook, DOpus5, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->[https://github.com/zapek/Ambient Ambient Src] |- |<!--Sub Menu-->System Wide Search |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=utility/filetool Finder], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System Wide Dictionary - multilingual [http://sourceforge.net/projects/babiloo/ Babiloo], [http://code.google.com/p/stardict-3/ StarDict], |<!--AROS-->[ ], |<!--AmigaOS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System wide Thesaurus - multi lingual |<!--AROS-->[ ], |Kuma K-Roget*, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Sticky Desktop Notes (post it type) |<!--AROS-->[http://aminet.net/package/util/wb/amimemos.i386-aros AmiMemos], [https://aminet.net/package/util/wb/amimemos.src-aros AmiMemos Src], [], |<!--Amiga OS-->[http://aminet.net/package/util/wb/StickIt-2.00 StickIt v2], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->DTP Desktop Publishing |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit RNOPublisher], |<!--Amiga OS-->[http://pagestream.org/ Pagestream]*, Professional Pro Page*, Saxon Publisher, Pagesetter, PenPal, |<!--AmigaOS4-->[http://pagestream.org/ Pagestream]* |<!--MorphOS-->[http://pagestream.org/ Pagestream]* |- |<!--Sub Menu-->Printing |<!--AROS-->Postscript 3 laser printers, [https://github.com/bohunamiga/MintPRINT MintPRINT AirPrint IPP], [ Ghostscript], [], |<!--Amiga OS-->[https://github.com/boingball/MintPRINT MintPRINT IPP], [https://github.com/Andiweli/AmiAirprint AmiAirprint], [http://www.irseesoft.de/tp_what.htm TurboPrint]*, [ GutenPrint], [https://aminet.net/package/comm/tcp/NetPrinter NetPrinter LPR], [], [], |<!--AmigaOS4-->(some native drivers), |<!--MorphOS-->early TurboPrint included, [https://aminet.net/package/comm/tcp/NetPrinter NetPrinter LPR], |- |<!--Sub Menu-->Scanning |<!--AROS-->[ SCANdal], [], |<!--Amiga OS-->FxScan*, ScanQuix*, [https://github.com/boingball/MintSCAN MintSCAN], |<!--AmigaOS4-->SCANdal (Sane) |<!--MorphOS-->SCANdal |- |<!--Sub Menu-->OCR |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/convert gOCR] |<!--AmigaOS--> |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos-files.net/categories/office/text Tesseract] |- |<!--Sub Menu-->Text Editing |<!--AROS-->Jano Editor (already installed as Editor), [http://archives.arosworld.org/index.php?function=browse&cat=development/edit EdiSyn], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit Annotate], [https://archives.arosworld.org/index.php?function=browse&cat=development/edit Vim], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit FrexxEd] [https://github.com/vidarh/FrexxEd src], [ NoWinEd], |<!--Amiga OS-->[https://aminet.net/package/text/edit/TurboText20 TurboText20 ttx], Annotate, MicroGoldED/CubicIDE*, CygnusED*, Protext*, NoWinED, |<!--AmigaOS4-->Notepad, Annotate, CygnusED*, NoWinED, |<!--MorphOS-->MorphOS ED, NoWinED, GoldED/CubicIDE*, CygnusED*, Annotate, |- |<!--Sub Menu-->Office Fonts [http://sourceforge.net/projects/fontforge/files/fontforge-source/ Font Designer] |<!--AROS-->[ ], [ ], |<!--Amiga OS-->TypeSmith*, SaxonScript (GetFont Adobe Type 1), |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Drawing Vector |<!--AROS-->[http://sourceforge.net/projects/amifig/ ZuneFIG previously AmiFIG], [https://github.com/serk118/designworks-aros designworks aros 64bit] |<!--Amiga OS-->Drawstudio*, ProVector*, ArtExpression*, Professional Draw*, AmiFIG, MetaView, [https://gitlab.com/amigasourcecodepreservation/designworks Design Works Src], [], |<!--AmigaOS4-->MindSpace, [http://www.os4depot.net/index.php?function=browse&cat=graphics/edit amifig], |<!--MorphOS-->SteamDraw, [http://aminet.net/package/gfx/edit/amifig amiFIG], |- |<!--Sub Menu-->video conferencing (jitsi) |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->source code hosting |<!--AROS-->Gitlab, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Remote Desktop (server) |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/VNC_Server ArosVNCServer], |<!--Amiga OS-->[http://s.guillard.free.fr/AmiVNC/AmiVNC.htm AmiVNC], [http://dspach.free.fr/amiga/avnc/index.html AVNC] |<!--AmigaOS4-->[http://s.guillard.free.fr/AmiVNC/AmiVNC.htm AmiVNC] |MorphVNC, vncserver |- |<!--Sub Menu-->Remote Desktop (client) login and connect to another machine |<!--AROS-->[https://sourceforge.net/projects/zunetools/files/VNC_Client/ ArosVNC], [http://archives.arosworld.org/index.php?function=browse&cat=network/misc rdesktop], |<!--Amiga OS-->[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://dspach.free.fr/amiga/vva/index.html VVA], [http://www.hd-zone.com/ RDesktop] |<!--AmigaOS4-->[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://www.hd-zone.com/ RDesktop] |[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://www.hd-zone.com/ RDesktop] |- |<!--Sub Menu-->notifications |<!--AROS--> |<!--Amiga OS-->Ranchero |<!--AmigaOS4-->Ringhio |<!--MorphOS-->MagicBeacon |- |<!--Sub Menu-->Biometric facial logins and fingerprint security features |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Audio== {| class="wikitable sortable" |- !width:30%;|Audio !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Playing playback Audio like MP3, [https://github.com/chrg127/gmplayer NSF], [https://github.com/kode54/lazyusf miniusf .usflib] [https://gitlab.com/kode54/psflib with pfslib], [], [], etc |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/play Mplayer], [ HarmonyPlayer hp], [http://www.a500.org/downloads/audio/index.xhtml playcdda] CDs, [ WildMidi Player], [https://bszili.morphos.me/ UADE mod player], [], [ RNOTunes], [ mp3Player], [], |<!--Amiga OS-->AmiNetRadio, AmigaAmp, playOGG, [https://codeberg.org/tygre/amimodradio amimodradio] |<!--AmigaOS4-->TuneNet, SimplePlay, AmigaAmp, TKPlayer |AmiNetRadio, Mplayer, Kaya, AmigaAmp |- |<!--Sub Menu-->Editing Audio |<!--AROS-->[ Audio Evolution 4] |<!--Amiga OS-->[https://sourceforge.net/projects/hd-rec/ HD-Rec Src], [http://www.sonicpulse.de/eng/news.html SoundFX], [ Samplitude], |<!--AmigaOS4-->[https://sourceforge.net/projects/hd-rec/ HD-Rec], AmiSoundED, [http://os4depot.net/?function=showfile&file=audio/record/audioevolution4.lha Audio Evolution 4] |[http://www.hd-rec.de/HD-Rec/index.php?site=home HD-Rec], |- |<!--Sub Menu-->Editing Tracker Music |<!--AROS-->[https://github.com/hitchhikr/protrekkr Protrekkr], [ Schism Tracker], [http://archives.arosworld.org/index.php?function=browse&cat=audio/tracker MilkyTracker], [http://www.hivelytracker.com/ HivelyTracker], [ Radium in AROS already], [http://www.a500.org/downloads/development/index.xhtml libMikMod], |<!--Amiga OS-->MilkyTracker, HivelyTracker, DigiBooster, Octamed SoundStudio, [https://github.com/elindstrom/soundtracker soundtracker], |<!--AmigaOS4-->MilkyTracker, HivelyTracker, GoatTracker |MilkyTracker, GoatTracker, DigiBooster, |- |<!--Sub Menu-->Editing Music [], [https://github.com/kmatheussen/camd CAMD] and/or staves and musical notes on manuscript [https://github.com/ratchov/midish midish] midi sequencer |<!--AROS-->[http://bnp.hansfaust.de/ Bars and Pipes], [], [], |<!--Amiga OS-->[http://bnp.hansfaust.de/ Bars'n'Pipes], MusicX* David "Talin" Joiner & Craig Weeks (for Notator-X), Deluxe Music Construction Set DMCS2*, [https://github.com/timoinutilis/midi-sequencer-amigaos Horny c Src] [https://github.com/kas1e/midi-sequencer-amigaos/tree/master/HornyGCC HornyGCC OS4 src] [https://github.com/capehill/midi-sequencer-amigaos Horny OS4 fork src] [https://www.amigans.net/modules/newbb/viewtopic.php?start=0&topic_id=8143&order=ASC&status=&mode=0 OS4 thread], HD-Rec, [https://aminet.net/package/mus/midi/dominatorV1_51 Dominator], [https://github.com/royaltm/Amiga-midiIn Amiga-midiIn], [ Aegis Sonix 2.0] |<!--AmigaOS4-->[https://sourceforge.net/p/hd-rec/code/HEAD/tree/ HD-Rec Src], Rockbeat, [http://bnp.hansfaust.de/download.html Bars'n'Pipes], [https://github.com/gooofy/freeaction Horny OS4 src fork], Audio Evolution 4, |<!--MorphOS-->Bars'n'Pipes, |- |<!--Sub Menu-->Sound Sampling |<!--AROS-->[ Advanced AHI Recorder all], [https://archives.arosworld.org/index.php?function=browse&cat=audio/record Audio Evolution 4], [http://www.imica.net/SitePortalPage.aspx?siteid=1&did=162 Quick Record], [https://archives.arosworld.org/index.php?function=browse&cat=audio/misc SOX to get AIFF 16bit files], [https://github.com/aros-development-team/AROS/tree/master/workbench/tools/AHIRecord AHIRecord], |<!--Amiga OS-->[https://aminet.net/package/mus/edit/AudioEvolution3_src Audio Evolution 3 c src], [ Samplitude]*, Audiomaster IV*, |<!--AmigaOS4-->[https://github.com/timoinutilis/phonolith-amigaos phonolith c src], HD-Rec, Audio Evolution 4, |<!--MorphOS-->[https://sourceforge.net/p/hd-rec/code/HEAD/tree/ HD-Rec Src], Audio Evolution 4, |- |<!--Sub Menu-->Audio Processing like easyeffects so having limiter, compressor, convolver, equalizer and auto volume and many other plugins |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Live Looping or Audio Misc - Groovebox like |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->CD/DVD burn |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=utility IsoTools], [https://code.google.com/p/amiga-fryingpan/ FryingPan], |<!--Amiga OS-->FryingPan, [ MakeCD], |<!--AmigaOS4-->FryingPan, AmiDVD, |<!--MorphOS-->[http://www.amiga.org/forums/printthread.php?t=58736 FryingPan], Jalopeano, |- |<!--Sub Menu-->CD/DVD audio rip |<!--AROS-->Lame, [http://www.imica.net/SitePortalPage.aspx?siteid=1&cfid=0&did=167 Quick CDrip], |<!--Amiga OS-->Lame, |<!--AmigaOS4-->Lame, |<!--MorphOS-->Lame, |- |<!--Sub Menu-->MP3 v1 and v2 Tagger |<!--AROS-->id3ren (v1), [http://archives.arosworld.org/index.php?function=browse&cat=audio/edit mp3info], |<!--Amiga OS--> |<!--AmigaOS4--> | |- |<!--Sub Menu-->Audio Convert |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=audio/misc Sox], [], |<!--Amiga OS-->[http://aminet.net/package/mus/misc/SoundBox SoundBox], [http://aminet.net/package/mus/misc/SoundBoxKey SoundBox Key], [http://aminet.net/package/mus/edit/SampleE SampleE], sox |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->DJ mixing jamming |<!--AROS--> |<!--Amiga OS-->[https://github.com/djh0ffman/PT1210 Hoffman PT1210 DJ tracker], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Radio Automation Software [http://www.rivendellaudio.org/ Rivendell], [http://code.campware.org/projects/livesupport/report/3 Campware LiveSupport], [http://www.sourcefabric.org/en/airtime/ SourceFabric AirTime], [http://www.ohloh.net/p/mediabox404 MediaBox404], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Speakers Audio Sonos Mains AC networked wired controlled *2005 ZP100 with ZP80 *2008 Zoneplayer ZP120 (multi-room wireless amp) ZP90 receiver only with CR100 controller, *2009 ZonePlayer S5, *2010 BR100 wireless Bridge (no support), *2011 Play:3 *2013 Bridge (no support), Play:1, *2016 Arc, Play:1, *Beam (Gen 2), Playbar, Ray, Era 100, Era 300, Roam, Move 2, *Sub (Gen 3), Sub Mini, Five, Amp S2 |<!--AROS-->SonosController |<!--Amiga OS-->SonosController |<!--AmigaOS4-->SonosController |<!--MorphOS-->SonosController |- |<!--Sub Menu-->Smart Speakers |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Video Creativity and Production== {| class="wikitable sortable" |- !width:30%;|Video !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Playing Video |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/play Mplayer], [ VAMP], [http://www.a500.org/downloads/video/index.xhtml CDXL player], [http://www.a500.org/downloads/video/index.xhtml IffAnimPlay], [], |<!--Amiga OS-->Frogger*, AMP2, MPlayer, RiVA*, MooViD*, |<!--AmigaOS4-->DvPlayer, MPlayer |<!--MorphOS-->MPlayer, Frogger, AMP2, VLC |- |<!--Sub Menu-->Streaming Video and game streaming like OBS studio, Parsec, [https://github.com/lizardbyte/sunshine sunshine], [https://github.com/moonlight-stream/moonlight-qt moonlight], etc |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Playing DVD |<!--AROS-->[http://a-mc.biz/ AMC]*, Mplayer |<!--Amiga OS-->AMP2, Frogger |<!--AmigaOS4-->[http://a-mc.biz/ AMC]*, DvPlayer*, AMP2, |<!--MorphOS-->Mplayer |- |<!--Sub Menu-->Screen Recording |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/record Screenrecorder], [ ], [ ], [ ], [ ], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->Screenrecorder, |- |<!--Sub Menu-->Create Edit Individual Video - Amiga like OSs have no pro NLE |<!--AROS-->[ Mencoder], [ Quick Videos], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit AVIbuild], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/misc FrameBuild], FFMPEG, |<!--Amiga OS-->[ MainConcept Mainactor Broadcast*], [http://en.wikipedia.org/wiki/Video_Toaster Video Toaster*] with [https://discreetfx.com/openvideotoaster.html some c src], MacroSystem MovieShop 4.3*, proDAD Adorage*, [ IOSpirit VHI studio]*, [Gold Disk ShowMaker], [], |<!--AmigaOS4-->FFMpeg/GUI |<!--MorphOS-->Blender, Mencoder, FFmpeg |- |<!--Sub Menu-->Subtitle editor |<!--AROS-->[https://aminet.net/package/text/edit/Slarti_Arosx86ABIv0 Slarti_Arosx86ABIv0], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->IP-based video production workflows with High Dynamic Range (HDR), 10-bit color collaborative NDI, |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Blogging like Lemmy or kbin |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR face recognition for Vtubers |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR chatting Live2D models with Cubism type editor or [https://github.com/AyagamiDev/ayagami ayagami] like with zipped moc3 with model metadata (model3, cdi3) <pre> Model data (cmo3) Basic motions (can3) Background image (png) Set of files for embedding (runtime folder) • Model data (moc3) • Motion data (motion3.json) • Model settings file (model3.json) • Physics settings file (physics3.json) • Display auxiliary file (cdi3.json) </pre> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR chatting chatters .VRML models - standardized 3D file format for VR avatars |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->V-tubers V-tubing like Vseeface with Openseeface tracker or Vpuppr (virtual puppet project) for online live 2d / 3d art models rigging rigged LIV |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Misc Application== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1 (68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->File Management |<!--AROS-->DOpus4, [https://github.com/BlitterStudio/dopus5 DOpus Magellan aka DOpus 5], [ Scalos], [ Diskmaster], |<!--Amiga OS-->DOpus2, DOpus 4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], ClassAction, FileMaster, [http://www.amiga.org/forums/showthread.php?t=4897 DirWork 2]*, [https://github.com/RudolphRiedel/DiskMaster2 DiskMaster2 src], |<!--AmigaOS4-->DOpus4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], Filer, AmiDisk |<!--MorphOS-->DOpus4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], |- |<!--Sub Menu-->File Verification / Repair |<!--AROS-->[https://arosarchives.os4depot.net/index.php?function=browse&cat=utility md5sum], [https://arosarchives.os4depot.net/index.php?function=browse&cat=utility/filetool asum], [http://archives.arosworld.org/index.php?function=browse&cat=utility/filetool workpar2] (PAR2), [http://zakalwe.fi/~shd/foss/cksfv/files/ compile cksfv from website], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->Par2, |- |Application Installer |<!--AROS-->[], [ InstallerNG], |<!--Amiga OS-->InstallerNG, Grunch, |<!--AmigaOS4-->Jack |<!--MorphOS-->Jack |- |<!--Sub Menu-->Compression archiver [https://github.com/FS-make-simple/paq9a paq9a], [], |<!--AROS-->XAD system is a toolkit designed for handling various file and disk archiver |<!--Amiga OS--> |<!--AmigaOS4-->[https://aminet.net/package/util/pack/decrunchmania_os4 Crunchmania CrM2 depacker], |<!--MorphOS--> |- |<!--Sub Menu-->Binary Hexadecimal Editor |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=development/edit Zaphod], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Filesystem Partition Editor formatter Disk Management |<!--AROS-->[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1440&highlight=partition&pid=8821#post_8821 QuickPart], [ HDToolBox] |<!--Amiga OS-->[https://github.com/stefanskotte/hdpart hdpart], [https://github.com/ChuckyGang/AmiPart AmiPart], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Filesystem Repair and backups |<!--AROS-->ArSFSDoctor, |<!--Amiga OS-->[https://aminet.net/package/disk/bakup/quarterback_src Quarterback Tools C and asm src], [ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System Disk check, integrity and history [https://github.com/smartmontools/smartmontools smart tools], [], |<!--AROS--> |<!--Amiga OS-->[], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Multiple File renaming |<!--AROS-->DOpus 4 or 5, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Anti Virus |<!--AROS--> |<!--Amiga OS-->VChecker, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Random Wallpaper Desktop changer [ DOpus5], [ Scalos], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Alarm Clock, Timer, Stopwatch, Countdown |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench DClock], [http://aminet.net/util/time/AlarmClockAROS.lha AlarmClock], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} ==Misc Application 2== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->C/C++ IDE Integrated Development |<!--AROS-->[https://sourceforge.net/projects/aidea/ AIDEa], [ Murks], [], |<!--Amiga OS-->[http://devplex.awardspace.biz/cubic/index.html Cubic IDE]*, [ StormC], [https://github.com/jens-maus/amide amide], [], |<!--AmigaOS4-->CodeBench , [https://gitlab.com/boemann/codecraft CodeCraft], |<!--MorphOS-->[http://devplex.awardspace.biz/cubic/index.html Cubic IDE]*, |- |<!--Sub Menu-->C/C++ Text Editors |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit FrexxEd], [https://github.com/vidarh/FrexxEd FrexxEd src], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit Annotate] with [https://www.onyxsoft.se/files/annotate_src.lha src], |<!--Amiga OS-->[ Protext], [ CED], [], |<!--AmigaOS4--> |<!--MorphOS-->[https://www.onyxsoft.se/annotate.html Annotate], |- |<!--Sub Menu-->Repository |<!--AROS-->[ Git] |<!--Amiga OS--> |<!--AmigaOS4-->Git |<!--MorphOS--> |- |<!--Sub Menu-->BASIC Computer Language |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=development/language Basic4SDL], [ Ace Basic], [ X-AMOS], [SDLBasic], [ Alvyn], |<!--Amiga OS-->[http://www.amiforce.de/main.php Amiblitz 3] with [https://github.com/AmiBlitz/AmiBlitz3 Asm src], [http://amos.condor.serverpro3.com/AmosProManual/contents/c1.html Amos Pro] with [https://github.com/AmiDARK/AmosProfessionalUnity-Official-Releases Asm src], [http://aminet.net/package/dev/basic/ace24dist ACE Basic], [https://github.com/gooofy/aqb aqb], [], |<!--AmigaOS4--> |<!--MorphOS-->sdlBasic |- |<!--Sub Menu-->Computer Languages Translation [https://tetracorp.github.io/guide/reverse-engineering-amiga.html], [https://amigasourcecodepreservation.gitlab.io/amiga-assembler-insider-guide/], [https://github.com/kermitfrog/Amiga-Re-Engineering Rust, Ghidra and FS-UAE], |<!--AROS--> |<!--Amiga OS-->[https://bitbucket.org/rhinoid/convert68000toc/src/main/ convert m68k seka asm-one to c], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Gui Creators |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=development/guitool MuiBuilder], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->[ MuiBuilder], |- |<!--Sub Menu-->Catalog .cd .ct Custom App Language Editors |<!--AROS-->FlexCat, [https://archives.arosworld.org/index.php?function=browse&cat=utility Flexcat GUI], [], |<!--Amiga OS-->[http://www.geit.de/deu_simplecat.html SimpleCat], FlexCat |<!--AmigaOS4-->[http://aminet.net/package/dev/misc/simplecat SimpleCat], FlexCat |<!--MorphOS-->[http://www.geit.de/deu_simplecat.html SimpleCat], FlexCat |- |<!--Sub Menu-->Cross Development |<!--AROS-->[], [], |<!--Amiga OS-->[https://github.com/geekychris/amiga_mcp amiga_mcp], [https://github.com/mbergmann-sh/AmigaED4-IDE AmigaED4-IDE], [https://lemonspawn.com/turbo-rascal-syntax-error-expected-but-begin/ Turbo Rascal], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. ==Misc Application 3== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->System |<!--AROS-->[ SysExplorer], [ SysMon], [ Scout], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Terminals Shells CLIs |<!--AROS-->[https://tomaszstaniak.com/aros-term/ aros-term], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->OSK On Screen Keyboard |<!--AROS-->[], |<!--Amiga OS-->[https://aminet.net/util/wb/OSK.lha OSK] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Screen Magnifier Magnifying Glass Magnification |<!--AROS-->[http://www.onyxsoft.se/files/zoomit.lha ZoomIT], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Comic Book CBR CBZ format reader viewer |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer comics], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer comicon], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Ebook Reader |<!--AROS-->[https://blog.alb42.de/programs/#legadon Legadon EPUB],[] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Ebook Converter |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Text to Speech tts [https://github.com/JonathanFly/bark-installer Bark], [], |<!--AROS-->[ Echo " " >SPEAK:A1 inbuilt], [http://archives.arosworld.org/index.php?function=browse&cat=audio/misc flite], |<!--Amiga OS-->[http://www.text2speech.com translator], [https://github.com/sidick/narrator.wyoming narrator.wyoming], [], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=search&tool=simple FLite] |<!--MorphOS-->[http://se.aminet.net/pub/aminet/mus/misc/ FLite] |- |<!--Sub Menu-->Speech Voice Recognition Dictation - [http://sourceforge.net/projects/cmusphinx/files/ CMU Sphinx], [http://julius.sourceforge.jp/en_index.php?q=en/index.html Julius], [http://www.isip.piconepress.com/projects/speech/index.html ISIP], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Speech Voice Changer [], [], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Screen Display Blanker screensaver |<!--AROS-->Blanker Commodity (built in), [https://archives.arosworld.org/index.php?function=browse&cat=graphics/screenblanker GarshneBlanker], [http://sourceforge.net/projects/gblanker/ GBlanker Src], [], |<!--Amiga OS-->MultiCX, |<!--AmigaOS4--> |<!--MorphOS-->ModernArt Blanker, |- |<!--Sub Menu-->Fortune Cookie Quotes Sayings |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/misc AFortune], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} ==Misc Application 4== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Fractals mandelbrot, etc |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=graphics/misc], |<!--Amiga OS-->ZoneXplorer, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Landscape Rendering |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=graphics/raytrace WCS World Construction Set], |<!--Amiga OS-->[ Vista Pro], [http://en.wikipedia.org/wiki/World_Construction_Set World Construction Set] |<!--AmigaOS4-->[ WCS World Construction Set], |<!--MorphOS-->[ WCS World Construction Set], |- |<!--Sub Menu-->Astronomy [https://sourceforge.net/projects/skychart/ skychart freepascal], [], [], |<!--AROS-->[ Digital Almanac (ABIv0 only)], |<!--Amiga OS-->[http://aminet.net/search?query=planetarium Aminet search], [http://aminet.net/misc/sci/DA3V56ISO.zip Digital Almanac], [https://aminet.net/package/misc/sci/da3sourceV58 Src c V58], [ Galileo renamed to Distant Suns]*, [], |<!--AmigaOS4-->[http://sourceforge.net/projects/digital-almanac/ Digital Almanac], Distant Suns*, [http://www.digitaluniverse.org.uk/ Digital Universe]*, |<!--MorphOS-->[http://www.aminet.net/misc/sci/da3.lha Digital Almanac], [http://www.aminet.net/package/misc/sci/da3-mos-src Src c V56], |- |<!--Sub Menu-->Astrology [https://sourceforge.net/projects/skylendar/ skylendar], [https://github.com/CruiserOne/Astrolog Astrolog], [https://www.astrolog.org/astrolog/astfile.htm Astrology alt site], [https://saravali.github.io/download.html Maitreya], [https://github.com/alamahant/Asteria Asteria], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Genealogy History Family Tree Ancestry Records (FreeBMD, FreeREG, and FreeCEN file formats or GEDCOM GenTree) |<!--AROS--> |<!--Amiga OS--> [ Origins], [ Your Family Tree], [ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Languages |<!--AROS--> |<!--Amiga OS-->Fun School, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Mathematics ([http://www-fourier.ujf-grenoble.fr/~parisse/install_en.html Xcas], etc.), |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/scientific mathX] |<!--Amiga OS-->Maple V, mathX, Fun School, GCSE Maths, [ ], [ ], [ ], |<!--AmigaOS4-->Yacas |<!--MorphOS-->Yacas |- |<!--Sub Menu-->Maths Graph Function Plotting |<!--AROS-->[https://blog.alb42.de/programs/#MUIPlot MUIPlot], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->App Utility Launcher Dock toolbar |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/docky BoingBar], [], |<!--Amiga OS-->[https://github.com/adkennan/DockBot Dockbot], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Printer [https://github.com/OrcaSlicer/OrcaSlicer OrcaSlicer] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->PCB design |<!--AROS--> |<!--Amiga OS-->[ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Digital Signage |<!--AROS-->Hollywood, Hollywood Designer |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->HAM radio, amateur radio, packet radio, [], [], [], [https://cemaxecuter.com/ Dragon OS], [https://github.com/km4ack/73Linux with 73 link update], [https://www.youtube.com/watch?v=YAL5KNePRSg video for], |<!--AROS--> |<!--Amiga OS-->[https://github.com/punktniklas/NiKom NiKom], [https://www.amigarealm.com/amiga/amicomms/comm4.htm Comm4], [https://www.amigarealm.com/archives/comms/aarug/ TNC Terminal Node Controller with packets over serial connections on Yaesu or Woxum handheld], [https://aminet.net/comm/misc AmiCom], [ with 7Plus file encoder/decoder], [ mksstv], [ RTTYam], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->modern smart home network like Home Assistant Automation Yellow, Green, Mosquitto, EMQX, |<!--AROS--> |<!--Amiga OS-->[https://github.com/evil4dmin/ami2ha HA], [https://github.com/sidick/midge mtqq.lib], [https://aminet.net/package/comm/tcp/AmiHomeassist-0.7 AmiHomeassist], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Teaching classroom learning training [https://github.com/moodle/moodle moodle], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. ==Games & Emulation== Some emulators/games require OpenGL to function and to adjust ahi prefs channels, frequency and unit0 and unit1 and [http://aros.sourceforge.net/documentation/users/shell/changetaskpri.php changetaskpri -1] Rom patching https://www.marcrobledo.com/RomPatcher.js/ https://www.romhacking.net/patch/ (ips, ups, bps, etc) and this other site supports the latter formats https://hack64.net/tools/patcher.php Free public domain roms for use with emulators can be found [http://www.pdroms.de/ here] as most of the rest are covered by copyright rules. If you like to read about old games see [http://retrogamingtimes.com/ here] and [http://www.armchairarcade.com/neo/ here] and a [http://www.vintagecomputing.com/ blog] about old computers. Possibly some of the [http://www.answers.com/topic/list-of-best-selling-computer-and-video-games best selling] of all time. [http://en.wikipedia.org/wiki/List_of_computer_system_emulators Wiki] with emulated systems list. [https://archive.gamehistory.org/ Archive of VGHF], [https://library.gamehistory.org/ Video Game History Foundation Library search] {| class="wikitable sortable" |- !width:10%;|Games [http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Emulation] !width:10%;|AROS(x86) !width:10%;|AmigaOS3(68k) !width:10%;|AmigaOS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Games Emulation Amstrad CPC |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [ Caprice32 (OpenGL & pure SDL)], [ Arnold], [https://retroshowcase.gr/cpcbox-master/], |<!--Amiga OS--> |<!--AmigaOS4-->[http://os4depot.net/index.php?function=browse&cat=emulation/computer] |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2], |- |<!--Sub Menu-->Games Emulation Apple2 and 2GS |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Arcade |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Mame], [ SI Emu (ABIv0 only)], |<!--Amiga OS-->Mame, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem xmame], amiarcadia, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2 Mame], |- |<!--Sub Menu-->Games Emulation Atari 2600 [], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Stella], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 5200 [https://github.com/wavemotion-dave/A5200DS A5200DS], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 7800 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 400 800 130XL [https://github.com/wavemotion-dave/A8DS A8DS], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Atari800], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari Lynx |<!--AROS-->[http://myfreefilehosting.com/f/6366e11bdf_1.93MB Handy (ABIv0 only)], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari Jaguar |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Bandai Wonderswan |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation BBC Micro and Acorn Electron [http://beehttps://bem-unix.bbcmicro.com/download.html BeebEm], [http://b-em.bbcmicro.com/ B-Em], [http://elkulator.acornelectron.co.uk/ Elkulator], [http://electrem.emuunlim.com/ ElectrEm], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Dragon 32 and Tandy CoCo [http://www.6809.org.uk/xroar/ xroar], [], |<!--AROS-->[], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Commodore C16 Plus4 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Commodore C64 |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Vice (ABIv0 only)], [], |<!--Amiga OS-->Frodo, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem viceplus], |<!--MorphOS-->Vice, |- |<!--Sub Menu-->Games Emulation Commodore Amiga |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Janus UAE], Emumiga, |<!--Amiga OS--> |<!--AmigaOS4-->[http://os4depot.net/index.php?function=browse&cat=emulation/computer UAE], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2 UAE], |- |<!--Sub Menu-->Games Emulation Japanese MSX MSX2 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Mattel Intelivision |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Mattel Colecovision and Adam |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Milton Bradley (MB) Vectrex [ Vectrex OpenGL], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation PICO8 Pico-8 fantasy video game console [https://github.com/egordorichev/pemsa-sdl/ pemsa-sdl], [https://github.com/jtothebell/fake-08 fake-08], [https://github.com/Epicpkmn11/fake-08/tree/wip fake-08 fork], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo Gameboy |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem vba no sound], [], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem vba] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo NES |<!--AROS-->[ EmiNES], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Fceu], [https://github.com/takahirox/nes-js?tab=readme-ov-file nes-js], [https://github.com/bfirsh/jsnes jsnes], [https://github.com/angelo-wf/NesJs NesJs], |<!--Amiga OS-->AmiNES, [http://www.dridus.com/~nyef/darcnes/ darcNES], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem amines] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo SNES |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Zsnes], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem warpsnes] |<!--MorphOS-->[http://fabportnawak.free.fr/snes/ Snes9x], |- |<!--Sub Menu-->Games Emulation Nintendo N64 *HLE and plugins [ mupen64], [https://github.com/ares-emulator/ares ares], [https://github.com/N64Recomp/N64Recomp N64Recomp], [https://github.com/rt64/rt64 rt64], [https://github.com/simple64/simple64 Simple64], *LLE [], |<!--AROS-->[http://code.google.com/p/mupen64plus/ Mupen64+], |<!--Amiga OS-->[http://code.google.com/p/mupen64plus/ Mupen64+], [http://aminet.net/package/misc/emu/tr-981125_src TR64], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Nintendo Gamecube Wii] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Nintendo Wii U] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://github.com/yuzu-emu Nintendo Switch] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation NEC PC Engine |<!--AROS-->[], [], [https://github.com/yhzmr442/jspce js-pce], |[http://www.hugo.fr.fm/ Hugo], [http://mednafen.sourceforge.net/ Mednafen], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem tgemu] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Master System (SMS) |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Dega], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem sms], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem osmose] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Genesis/Megadrive |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem gp no sound], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem DGen], |<!--Amiga OS-->[http://code.google.com/p/genplus-gx/ Genplus], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem genesisplus] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Saturn *HLE [https://mednafen.github.io/ mednafen], [http://yabause.org/ yabause], [], *LLE [], [], |<!--AROS-->? |<!--Amiga OS-->[http://yabause.org/ Yabause], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Dreamcast *HLE [https://github.com/flyinghead/flycast flycast], [https://code.google.com/archive/p/nulldc/downloads NullDC], *LLE [], [], |<!--AROS-->? |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair ZX80 and ZX81 |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair Spectrum |[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Fuse (crackly sound)], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer SimCoupe], [ FBZX slow], [https://jsspeccy.zxdemo.org/ jsspeccy], [http://torinak.com/qaop/games qaop], |<!--Amiga OS-->[http://www.lasernet.plus.com/ Asp], [http://www.zophar.net/sinclair.html Speculator], [http://www.worldofspectrum.org/x128/index.html X128], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/computer] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair QL |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [], |<!--Amiga OS-->[http://aminet.net/package/misc/emu/QDOS4amiga1 QDOS4amiga] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation SNK NeoGeo Pocket |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem gngeo], NeoPop, |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sony PlayStation |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem FPSE], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem FPSE] |<!--MorphOS--> |- |<!--Sub Menu-->[ Sony PS2] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Sony PS3] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://vita3k.org/ Sony Vita] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://github.com/shadps4-emu/shadPS4 PS4] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation [http://en.wikipedia.org/wiki/Tangerine_Computer_Systems Tangerine] Oric and Atmos |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Oricutron] |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem Oricutron] |<!--MorphOS-->[http://aminet.net/package/misc/emu/oricutron Oricutron] |- |<!--Sub Menu-->Games Emulation TI 99/4 99/4A [https://github.com/wavemotion-dave/DS994a DS994a], [], [https://js99er.net/#/ js99er], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], |<!--Amiga OS-->[http://aminet.net/package/misc/emu/TI4Amiga TI4Amiga], [http://aminet.net/package/misc/emu/TI4Amiga_src TI4Amiga src in c], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation HP 38G 40GS 48 49G/50G Graphing Calculators |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation TI 58 83 84 85 86 - 89 92 Graphing Calculators |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} {| class="wikitable sortable" |- !width:10%;|Games [https://www.rockpapershotgun.com/ General] !width:10%;|AROS(x86) !width:10%;|AmigaOS3(68k) !width:10%;|AmigaOS4(PPC) !width:10%;|MorphOS(PPC) |- style="background:lightgrey;{{text default color}}; text-align:center; font-weight:bold;" | Games [https://www.trackawesomelist.com/michelpereira/awesome-open-source-games/ Open Source and others] || AROS || Amiga OS || Amiga OS4 || Morphos |- |<!--Sub Menu-->Games Action like [https://github.com/opentomb/OpenTomb opentomb], [https://github.com/LostArtefacts/TRX TRX formerly Tomb1Main], [https://github.com/TombEngine TombEngine], [http://archives.arosworld.org/index.php?function=browse&cat=game/action Thrust], [https://github.com/fragglet/sdl-sopwith sdl sopwith], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/action], [https://archives.arosworld.org/index.php?function=browse&cat=game/action BOH], [], |<!--Amiga OS-->[https://github.com/BSzili/OpenLara/tree/amiga/src source of openlara SDL2], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Adventure like [http://dotg.sourceforge.net/ DMJ], [https://github.com/kromenak/gengine Gabriel Knight 3], [http://www.sarien.net/ Sierra Sarien], [https://github.com/klembot/twinejs twine js], [https://github.com/QSPFoundation/qspgui Quest Soft Player QSP], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/adventure dmagnetic], [https://archives.arosworld.org/?function=browse&cat=emulation/misc ScummVM], [https://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying frotz infocom], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Board like [https://github.com/aperture-software/colditz-escape escape from colditz], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/board], [http://amigan.1emu.net/releases Africa] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Cards |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/card], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=180&pid=12934#post_12934 Balatro], |<!--AmigaOS-->[http://home.arcor.de/amigasolitaire/e/welcome.html Reko], [https://github.com/samskivert/beschei-en beschei Src], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Misc [https://github.com/michelpereira/awesome-open-source-games Awesome open], [https://github.com/bobeff/open-source-games General Open Source], [https://github.com/SAT-R/sa2 Sonic Advance 2], [https://github.com/velorek1/cwordle Wordle type], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/misc], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games FPS like [https://aminet.net/package/game/shoot/D1X_Rebirth_AGA Descent D1X src], [https://github.com/DescentDevelopers/Descent3 Descent 3], [https://github.com/Fewnity/Counter-Strike-Nintendo-DS Counter-Strike-Nintendo-DS], [https://github.com/Aleph-One-Marathon/alephone Bungie Marathon 1994], [https://zdoom.org/downloads UzDoom opengl 3.3], [https://github.com/ZDoom/gzdoom gzdoom opengl 3+], [https://zdoom.org/downloads LZDoom opengl 2.1], [https://github.com/OpenXRay/xray-16 S.T.A.L.K.E.R Xray], |<!--AROS-->Doom, Quake, [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Quake 3 Arena (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Cube (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Assault Cube (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Cube 2 Sauerbraten (OpenGL)], [http://fodquake.net/test/ FodQuake QuakeWorld], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Duke Nukem 3D], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Darkplaces Nexuiz Xonotic], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Doom 3 SDL (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Hexenworld and Hexen 2], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Aliens vs Predator Gold 2000 avp (openGL)], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Odamex (openGL doom)], [https://archives.arosworld.org/?function=showfile&file=game/fps/ zgloom], [], [https://archives.arosworld.org/?function=showfile&file=game/fps/ ab3dhd], [], |<!--Amiga OS-->Doom, Quake, AB3D, Fears, Breathless, Gloom, |<!--AmigaOS4-->Doom, Quake, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12 Doom], Quake, Quake 3 Arena, |- |<!--Sub Menu-->Games MMORG like |<!--AROS-->[ Eternal Lands (OpenGL)], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Platform like |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/platform], [ Maze of Galious], [ Gish]*(openGL), [ Mega Mario], [https://archives.arosworld.org/?function=showfile&file=game/platform/ thextech SMBX], [http://www.gianas-return.de/ Giana's Return], [http://www.sqrxz.de/ Sqrxz], [www.sqrxz2.de/ Sqrxz 2], [http://www.sqrxz.de/sqrxz-3/ Sqrxz 3], [http://www.sqrxz.de/sqrxz-4/ Sqrxz 4], [http://archives.arosworld.org/index.php?function=browse&cat=game/platform Cave Story], [https://bszili.morphos.me/ Frogatto], [https://bszili.morphos.me/ OpenJazz], [https://archives.arosworld.org/?function=showfile&file=game/platform/ pekkakana2], [ Aquaria], [https://archives.arosworld.org/?function=showfile&file=game/platform/ sonic CD], [], |<!--Amiga OS-->[ Giana Sisters], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Puzzle [https://github.com/mariopartyrd/marioparty4/tree/port Party], [https://github.com/mdodis/OpenSolomonsKey OpenSolomonsKey], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/puzzle], [ Cubosphere (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/puzzle Candy Crisis], [http://bszili.morphos.me/ TailTale], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Racing [ Trigger Rally], [ VDrift], [http://www.ultimatestunts.nl/index.php?page=2&lang=en Ultimate Stunts], [http://maniadrive.raydium.org/ Mania Drive], [https://github.com/plowteam/donut Simpsons Hit and Run], [], |<!--AROS-->[ Super Tux Kart (OpenGL)], [http://www.dusabledanslherbe.eu/AROSPage/F1Spirit.30.html F1 Spirit (OpenGL)], [http://bszili.morphos.me/index.html MultiRacer], [https://bszili.morphos.me/ Speed Dreams], [https://archives.arosworld.org/?function=showfile&file=game/driving/dethrace-0.10.1.x86_64-aros-v11.zip Carmageddon dethrace 64bit], [http://maniadrive.raydium.org/index.php?downloads=yes maniadrive like trackmania], |<!--AmigaOS--> |<!--AmigaOS4-->[http://bszili.morphos.me/index.html Speed Dreams], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12], [http://bszili.morphos.me/index.html TORCS], |- |<!--Sub Menu-->Games 1st first person DRPG [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/OpenEnroth/OpenEnroth OpenEnroth MM], [] |<!--AROS-->[https://github.com/BSzili/aros-stuff Arx Libertatis], [http://www.playfuljs.com/a-first-person-engine-in-265-lines/ js raycaster], [https://github.com/Dorthu/es6-crpg webgl], [https://github.com/sonountaleban/AmiShockolate System Shock], [], [], |<!--AmigaOS-->Phantasie, Faery Tale, Dungeon Master, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games 3rd third person action CRPG [https://sourceforge.net/projects/sumwars/ Summoning Wars], [https://www.solarus-games.org/ Solarus], [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/alexbatalov/fallout1-ce fallout ce], [https://github.com/rwengine/openrw gta3], [https://github.com/gta-reversed/gta-reversed gta3 sa], [https://github.com/mrxenginner/reVC gta3 vc revc], [https://github.com/jakobharder/burntime/tree/main Burntime], |<!--AROS-->[https://archives.arosworld.org/?function=showfile&file=game/strategy/ fheroes2 homm2], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ breakhack], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ devilutionx diablo 1 hellfire], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ fallout 1], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ stratagus], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ hostile-takeover], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games isometric RPG [https://sourceforge.net/projects/sumwars/ Summoning Wars], [https://www.solarus-games.org/ Solarus], [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/topics/dungeon?l=javascript Dungeon], [], [https://github.com/clintbellanger/heroine-dusk JS Dusk], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying nethack], [https://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying GemRB], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games card based RPG [https://github.com/open-duelyst/duelyst Duelyst], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games turn based tactics RPG [], [], [], [], [], [], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/strategy UFO AI], [http://play.freeciv.org/ FreeCiv], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Strategy [http://rtsgus.org/ RTSgus], [http://stargus.sourceforge.net/ Stargus], [https://github.com/KD-lab-Open-Source/Perimeter Perimeter], [https://matty77.itch.io/conflict-3049 conflict-3049], [https://github.com/ZeroK-RTS/Zero-K Zero-K multi player rts lua], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/strategy MegaGlest (OpenGL)], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ signus], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=140&pid=12446#post_12446 Wargus warcraft 2 setup], |<!--Amiga OS-->[https://aminet.net/package/game/strat/OpenDUNE_RTG OpenDUNE_RTG src] |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12] |- |<!--Sub Menu-->Games Rhythm, Beat, Step [], [], [https://clonehero.net/ clonehero], [https://github.com/MatteoGodzilla/Dj-Engine Dj-Engine], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/misc Frets on Fire], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Shoot Em Ups [http://www.mhgames.org/oldies/formido/ Formido], [http://code.google.com/p/violetland/ Violetland], ||<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/action Open Tyrian], [http://www.parallelrealities.co.uk/projects/starfighter.php Starfighter], [ Alien Blaster], [https://github.com/OpenFodder/openfodder OpenFodder], [https://archives.arosworld.org/?function=showfile&file=game/action/ tbftss The Battle for the Solar System: the Pandora War] |<!--AmigaOS--> |<!--AmigaOS4-->[http://www.parallelrealities.co.uk/projects/starfighter.php Starfighter], [ The Battle for the Solar System: the Pandora War] |<!--MorphOS--> |- |<!--Sub Menu-->Games Simulations [http://scp.indiegames.us/ Freespace 2], [http://www.heptargon.de/gl-117/gl-117.html GL117], [http://code.google.com/p/corsix-th/ Theme Hospital], [http://code.google.com/p/freerct/ Rollercoaster Tycoon], [http://hedgewars.org/ Hedgewars], [https://github.com/raceintospace/raceintospace raceintospace], [https://github.com/Return-To-The-Roots RTTR Settlers 2], [https://github.com/OoliteProject/oolite oolite elite], [https://github.com/fesh0r/newkind newkind elite], [https://github.com/bohemiainteractive/cwr Arma Cold War Src], [https://github.com/endless-sky/endless-sky endless-sky], [https://github.com/pioneerspacesim/pioneer pioneer space command], |<!--AROS--> |<!--Amiga OS-->SimCity, SimAnt, Sim Hospital, Theme Park, [https://github.com/angree/openttd_amiga_68k openttd amiga_68k], |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12] |- |<!--Sub Menu-->Games Life Sim [https://github.com/ACreTeam/forest Animal Crossing], [ ], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Horror [https://github.com/Mikompilation/MikuPan Fatal Frame], [ ], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Sandbox Voxel Open World Exploration [https://github.com/ClassiCube/ Classicube],[http://www.michaelfogleman.com/craft/ Craft], [https://github.com/tothpaul/DelphiCraft DelphiCraft],[https://www.minetest.net/ Luanti formerly Minetest], [ infiniminer], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Battle Royale [https://bruh.io/ Play.Bruh.io], [https://www.coolmathgames.com/0-copter Copter Royale], [https://surviv.io/ Surviv.io], [https://nuggetroyale.io/#Ketchup Nugget Royale], [https://miniroyale2.io/ Miniroyale2.io], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Tower Defense [https://chriscourses.github.io/tower-defense/ HTML5], [https://github.com/SBardak/Tower-Defense-Game TD C++], [https://github.com/bdoms/love_defense LUA and LOVE], [https://github.com/HyOsori/Osori-WebGame HTML5], [https://github.com/PascalCorpsman/ConfigTD ConfigTD Pascal], [https://github.com/GloriousEggroll/wine-ge-custom Wine], [] |<!--AROS-->[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=180&pid=12871#post_12871 Plants vs Zombies PvZ], |<!--Amiga OS-->[https://github.com/boingball/miggy-tower-defense miggy-tower-defense], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Visual Novel Engines [https://github.com/diane1f0cd/VisualNovelTemplate Visual Novel Template], [https://github.com/Kirilllive/tuesday-js Tuesday JS], [https://github.com/tejasnayak25/vnsutra vnsutra], [https://github.com/weetabix-su/renpsp-dev RenPSP], [https://github.com/Galladite27/ONScripter-EN ONScripter-EN], [https://github.com/NathanGuilhot/VNES-Raylib https://github.com/NathanGuilhot/VNES VNES in Raylib], [https://www.renpy.org/latest.html renpy ren'py python based], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Reality VR [https://gitlab.com/madsbuvi/openmw openmw vr], [https://github.com/Team-Beef-Studios/BeefRaiderXR BeefRaiderXR], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Table Top VTT [ Roll20], [https://www.owlbear.rodeo/ owlbear rodeo], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Computer assisted TableTop TTRPG OSR [https://www.rpgsolo.com/play.php RPGSolo], [https://github.com/fpsvogel/solo-ttrpgs Solo TTRPG], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games 2D 3D Engines [https://github.com/fegennari/3DWorld 3DWorld], [https://github.com/GarageGames/Torque3D Torque3D], [https://github.com/gameplay3d/GamePlay GamePlay 3D], [https://www.babylonjs.com/ BabylonJS ], [ Godot], [ Ogre], [ Crystal Space], [https://github.com/JacobHess03/ Dragon-Quest like], [https://github.com/bjornbytes/lovr Lua LOVE for 2D LOVR for 3D], [], |<!--AROS-->[https://www.arkhamdev.net/wiki.htm?id=agx Arkham Development antiryadgx 8.9 lts with register], [], |<!--Amiga OS-->[https://github.com/alpyre/Sevgi_Engine Sevgi Engine], [], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games C based game frameworks [https://github.com/orangeduck/Corange Corange], [https://github.com/scottcgi/Mojoc Mojoc], [https://orx-project.org/ Orx], [https://github.com/ioquake/ioq3 Quake 3], [https://www.mapeditor.org/ Tiled], [https://www.raylib.com/ 2d Raylib], [https://github.com/Rabios/awesome-raylib other raylib], [https://github.com/MrFrenik/gunslinger Gunslinger], [https://o3de.org/ o3d], [http://archives.aros-exec.org/index.php?function=browse&cat=development/library GLFW], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=development/library Raylib 5], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games RPGMaker MV/MZ-compatible projects [https://github.com/Psychronic-Games/RPGReactor RPGReactor js], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Pinball [https://github.com/vpinball/vpinball vpinball], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games unpack unarc [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |} ==Application Guides== [[#top|...to the top]] ===Web Browser=== OWB is now at version 2.0 (which got an engine refresh, from July 2015 to February 2019) and 3.0. This latest version has a good support for many/most web sites, even YouTube web page now works. [https://www.bilibili.tv/en/search untested] This improved compatibility comes at the expense of higher RAM usage (now 1GB RAM is the absolute minimum). Also, keep in mind that the lack of a JIT (Just-In-Time) JS compiler on the 32 bit version, makes the web surfing a bit slow. Only the 64 bit version of OWB 2.0 will have JIT enabled, thus benefitting of more speed. There are tooltypes that can be added to the icon to provide further features JIT, MSE etc Certificates from [https://curl.se/docs/caextract.html ca certs], DNS tracking blocking with [https://easylist.to/easylist/easylist.txt easylist.txt] in PROGDIR:Conf before starting browser with enabled AdBlock [https://github.com/easylist/easylist/tree/master easylist], [https://gitlab.com/eyeo anti abp], [https://firebog.net/ big blocklist], [https://github.com/StevenBlack/hosts Steves], [], [], This can be enabled with OWB Odyssey with Windows -> Content Blocking and Windows -> Messages and enter https://www.youtube.com/api/stats/ads* https://www.youtube.com/pagead/adview* https://www.youtube.com#@##player-ads* into your custom filters Element blocker browser extension might be needed for [https://github.com/easylist/easylist/wiki/Youtube-Issues youtube], [ mid roll], [ pre roll], [ ], OWB speed is much better when running from RAM Disk, the best way is to add the below into your S:User-Startup which copies OWB drawer from Extras:Internet/OWB to RAM Disk: So add this : <pre> copy Extras:Internet/OWB Ram:OWB/ ALL CLONE >NIL: copy Extras:Internet/OWB.info Ram: >NIL: </pre> Open RAM Disk and open OWB drawer and double click on OWB icon so that the above icon tooltypes are activated Problems are that the copy time is long (around 20 seconds added in the background), but we can make it faster if we delete useless files from the OWB drawer (docs, …) If you don’t copy the drawer back onto the HD, you won’t save your cache, cookies, passwords… So you need a script for it. copy Extras:Internet/Amelinium/#? Ram:Amelinium/ ALL CLONE >NIL: Error messages SSL error "cant verify with ca-certificates", check bios clock time date is correct Error 6, try checking networking prefs settings and Save / Use preferences again or a '''few times''' otherwise the network chipset may not be compatible with Aros [https://www.google.com/search?q=%s&udm=14 Google search without AI overview] [ DuckDuckGo] [ Ecosia] [ Qwant] [ Swisscows] [ Mojeek] [ Brave Search] [ PreSearch] [ Startpage] ===E-mail=== Emailinium is now available for IMAP and POP3 based accounts YAM does not support SSL and most mail providers now switched to encrypted SMTP/POP3 connections ====SimpleMail==== SimpleMail supports IMAP and appears to work with GMail, but it's never been reliable enough, it can crash with large mailboxes. Please read more on this [http://www.freelists.org/list/simplemail-usr User list] GMail Be sure to activate the pop3 usage in your gmail account setup / configuration first. pop3: pop.gmail.com Use SSL: Yes Port: 995 smtp: smtp.gmail.com (with authentication) Use Authentication: Yes Use SSL: Yes Port: 465 or 587 Hotmail/MSN/outlook/Microsoft Mail mid-2017, all outlook.com accounts will be migrated to Office 365 / Exchange Most users are currently on POP which does not allow showing folders and many other features (technical limitations of POP3). With Microsoft IMAP you will get folders, sync read/unread, and show flags. You still won't get push though, as Microsoft has not turned on the IMAP Idle command as at Sept 2013. If you want to try it, you need to first remove (you can't edit) your pop account (long-press the account on the accounts screen, delete account). Then set it up this way: 1. Email/Password 2. Manual 3. IMAP 4. * Incoming: imap-mail.outlook.com, port 993, SSL/TLS should be checked * Outgoing: smtp-mail.outlook.com, port 587, SSL/TLS should be checked * POP server name pop-mail.outlook.com, port 995, POP encryption method SSL Yahoo Mail On April 24, 2002 Yahoo ceased to offer POP access to its free mail service. Introducing instead a yearly payment feature, allowing users POP3 and IMAP server support, along with such benefits as larger file attachment sizes and no adverts. Sorry to see Yahoo leaving its users to cough up for the privilege of accessing their mail. Understandable, when competing against rivals such as Gmail and Hotmail who hold a large majority of users and were hacked in 2014 as well. Incoming Mail (IMAP) Server * Server - imap.mail.yahoo.com * Port - 993 * Requires SSL - Yes Outgoing Mail (SMTP) Server * Server - smtp.mail.yahoo.com * Port - 465 or 587 * Requires SSL - Yes * Requires authentication - Yes Your login info * Email address - Your full email address (name@domain.com) * Password - Your account's password * Requires authentication - Yes Note that you need to enable “Web & POP Access” in your Yahoo Mail account to send and receive Yahoo Mail messages through any other email program. You will have to enable “Allow your Yahoo Mail to be POPed” under “POP and Forwarding”, to send and receive Yahoo mails through any other email client. Cannot be done since 2002 unless the customer pays Yahoo a subscription subs fee to have access to SMTP and POP3 * Set the POP server for incoming mails as pop.mail.yahoo.com. You will have to enable “SSL” and use 995 for Port. * “Account Name or Login Name” – Your Yahoo Mail ID i.e. your email address without the domain “@yahoo.com”. * “Email Address” – Your Yahoo Mail address i.e. your email address including the domain “@yahoo.com”. E.g. myname@yahoo.com * “Password” – Your Yahoo Mail password. Yahoo! Mail Plus users may have to set POP server as plus.pop.mail.yahoo.com and SMTP server as plus.smtp.mail.yahoo.com. * Set the SMTP server for outgoing mails as smtp.mail.yahoo.com. You will also have to make sure that “SSL” is enabled and use 465 for port. you must also enable “authentication” for this to work. ====YAM Yet Another Mailer==== YAM does not support SSL and most mail providers have now switched to encrypted SMTP/POP3 connections This email client is POP3 only if the SSL library is available [http://www.freelists.org/list/yam YAM Freelists] One of the downsides of using a POP3 mailer unfortunately - you have to set an option not to delete the mail if you want it left on the server. IMAP keeps all the emails on the server. Possible issues Sending mail issues is probably a matter of using your ISP's SMTP server, though it could also be an SSL issue. getting a "Couldn't initialise TLSv1 / SSL error Use of on-line e-mail accounts with this email client is not possible as it lacks the OpenSSL AmiSSl v3 compatible library GMail Incoming Mail (POP3) Server - requires SSL: pop.gmail.com Use SSL: Yes Port: 995 Outgoing Mail (SMTP) Server - requires TLS: smtp.gmail.com (use authentication) Use Authentication: Yes Use STARTTLS: Yes (some clients call this SSL) Port: 465 or 587 Account Name: your Gmail username (including '@gmail.com') Email Address: your full Gmail email address (username@gmail.com) Password: your Gmail password Anyway, the SMTP is pop.gmail.com port 465 and it uses SSLLv3 Authentication. The POP3 settings are for the same server (pop.gmail.com), only on port 995 instead. Outlook.com access <pre > Outlook.com SMTP server address: smtp.live.com Outlook.com SMTP user name: Your full Outlook.com email address (not an alias) Outlook.com SMTP password: Your Outlook.com password Outlook.com SMTP port: 587 Outlook.com SMTP TLS/SSL encryption required: yes </pre > Yahoo Mail <pre > “POP3 Server” – Set the POP server for incoming mails as pop.mail.yahoo.com. You will have to enable “SSL” and use 995 for Port. “SMTP Server” – Set the SMTP server for outgoing mails as smtp.mail.yahoo.com. You will also have to make sure that “SSL” is enabled and use 465 for port. you must also enable “authentication” for this to work. “Account Name or Login Name” – Your Yahoo Mail ID i.e. your email address without the domain “@yahoo.com”. “Email Address” – Your Yahoo Mail address i.e. your email address including the domain “@yahoo.com”. E.g. myname@yahoo.com “Password” – Your Yahoo Mail password. </pre > Yahoo! Mail Plus users may have to set POP server as plus.pop.mail.yahoo.com and SMTP server as plus.smtp.mail.yahoo.com. Note that you need to enable “Web & POP Access” in your Yahoo Mail account to send and receive Yahoo Mail messages through any other email program. You will have to enable “Allow your Yahoo Mail to be POPed” under “POP and Forwarding”, to send and receive Yahoo mails through any other email client. Cannot be done since 2002 unless the customer pays Yahoo a monthly fee to have access to SMTP and POP3 Microsoft Outlook Express Mail 1. Get the files to your PC. By whatever method get the files off your Amiga onto your PC. In the YAM folder you have a number of different folders, one for each of your folders in YAM. Inside that is a file usually some numbers such as 332423.283. YAM created a new file for every single email you received. 2. Open up a brand new Outlook Express. Just configure the account to use 127.0.0.1 as mail servers. It doesn't really matter. You will need to manually create any subfolders you used in YAM. 3. You will need to do a mass rename on all your email files from YAM. Just add a .eml to the end of it. Amazing how PCs still rely mostly on the file name so it knows what sort of file it is rather than just looking at it! There are a number of multiple renamers online to download and free too. 4. Go into each of your folders, inbox, sent items etc. And do a select all then drag the files into Outlook Express (to the relevant folder obviously) Amazingly the file format that YAM used is very compatible with .eml standard and viola your emails appear. With correct dates and working attachments. 5. If you want your email into Microsoft Outlook. Open that up and create a new profile and a new blank PST file. Then go into File Import and choose to import from Outlook Express. And the mail will go into there. And viola.. you have your old email from your Amiga in a more modern day format. ===FTP=== Magellan has a great FTP module. It allows transferring files from/to a FTP server over the Internet or the local network and, even if FTP is perceived as a "thing of the past", its usability is all inside the client. The FTP thing has a nice side effect too, since every Icaros machine can be a FTP server as well, and our files can be easily transferred from an Icaros machine to another with a little configuration effort. First of all, we need to know the 'server' IP address. Server is the Icaros machine with the file we are about to download on another Icaros machine, that we're going to call 'client'. To do that, move on the server machine and 1) run Prefs/Services to be sure "FTP file transfer" is enabled (if not, enable it and restart Icaros); 2) run a shell and enter this command: ifconfig -a Make a note of the IP address for the network interface used by the local area network. For cabled devices, it usually is net0:. Now go on the client machine and run Magellan: Perform these actions: 1) click on FTP; 2) click on ADDRESS BOOK; 3) click on "New". You can now add a new entry for your Icaros server machine: 1) Choose a name for your server, in order to spot it immediately in the address book. Enter the IP address you got before. 2) click on Custom Options: 1) go to Miscellaneous in the left menu; 2) Ensure "Passive Transfers" is NOT selected; 3) click on Use. We need to deactivate Passive Transfers because YAFS, the FTP server included in Icaros, only allows active transfers at the current stage. Now, we can finally connect to our new file source: 1) Look into the address book for the newly introduced server, be sure that name and IP address are right, and 2) click on Connect. A new lister with server's "MyWorkspace" contents will appear. You can now transfer files over the network choosing a destination among your local (client's) volumes. Can be adapted to any FTP client on any platform of your choice, just be sure your client allows Active Transfers as well. ===IRC Internet Relay Chat=== Jabberwocky is ideal for one-to-one social media communication, use IRC if you require one to many. Just type a message in ''lowercase''' letters and it will be posted to all in the [ AROS irc channel]. Please do not use UPPER CASE as it is a sign of SHOUTING which is annoying. Other things to type in - replace <message> with a line of text and <nick> with a person's name <pre> /help /list /who /whois <nick> /msg <nick> <message> /query <nick> <message>s /query /away <message> /away /quit <going away message> </pre> [http://irchelp.org/irchelp/new2irc.html#smiley Intro guide here]. IRC Primer can be found here in [http://www.irchelp.org/irchelp/ircprimer.html html], [http://www.irchelp.org/irchelp/text/ircprimer.txt TXT], [http://www.kei.com/irc/IRCprimer1.1.ps PostScript]. Issue the command /me <text> where <text> is the text that should follow your nickname. Example: /me slaps ajk around a bit with a large trout /nick <newNick> /nickserv register <password> <email address> /ns instead of /nickserv, while others might need /msg nickserv /nickserv identify <password> Alternatives: /ns identify <password> /msg nickserv identify <password> ==== IRC WookieChat ==== WookieChat is the most complete internet client for communication across the IRC Network. WookieChat allows you to swap ideas and communicate in real-time, you can also exchange Files, Documents, Images and everything else using the application's DCC capabilities. add smilies drawer/directory run wookiechat from the shell and set stack to 1000000 e.g. wookiechat stack 1000000 select a server / server window * nickname * user name * real name - optional Once you configure the client with your preferred screen name, you'll want to find a channel to talk in. servers * New Server - click on this to add / add extra - change details in section below this click box * New Group * Delete Entry * Connect to server * connect in new tab * perform on connect Change details * Servername - change text in this box to one of the below Server: * Port number - no need to change * Server password * Channel - add #channel from below * auto join - can click this * nick registration password, Click Connect to server button above <pre> Server: irc.freenode.net Channel: #aros </pre> irc://irc.freenode.net/aros <pre> Server: chat.amigaworld.net Channel: #amigaworld or #amigans </pre> <pre> On Sunday evenings USA time usually starting around 3PM EDT (1900 UTC) Server:irc.superhosts.net Channel #team*amiga </pre> <pre> BitlBee and Minbif are IRCd-like gateways to multiple IM networks Server: im.bitlbee.org Port 6667 Seems to be most useful on WookieChat as you can be connected to several servers at once. One for Bitlbee and any messages that might come through that. One for your normal IRC chat server. </pre> [http://www.bitlbee.org/main.php/servers.html Other servers], <pre> #Amiga.org - irc.synirc.net eu.synirc.net dissonance.nl.eu.synirc.net (IPv6: 2002:5511:1356:0:216:17ff:fe84:68a) twilight.de.eu.synirc.net zero.dk.eu.synirc.net us.synirc.net avarice.az.us.synirc.net envy.il.us.synirc.net harpy.mi.us.synirc.net liberty.nj.us.synirc.net snowball.mo.us.synirc.net - Ports 6660-6669 7001 (SSL) </pre> <pre> Multiple server support "Perform on connect" scripts and channel auto-joins Automatic Nickserv login Tabs for channels and private conversations CTCP PING, TIME, VERSION, SOUND Incoming and Outgoing DCC SEND file transfers Colours for different events Logging and automatic reloading of logs mIRC colour code filters Configurable timestamps GUI for changing channel modes easily Configurable highlight keywords URL Grabber window Optional outgoing swear word filter Event sounds for tabs opening, highlighted words, and private messages DCC CHAT support Doubleclickable URL's Support for multiple languages using LOCALE Clone detection Auto reconnection to Servers upon disconnection Command aliases Chat display can be toggled between AmIRC and mIRC style Counter for Unread messages Graphical nicklist and graphical smileys with a popup chooser </pre> ====IRC Aircos ==== Double click on Aircos icon in Extras:Networking/Apps/Aircos. It has been set up with a guest account for trial purposes. Though ideally, choose a nickname and password for frequent use of irc. ====IRC and XMPP Jabberwocky==== Servers are setup and close down at random You sign up to a server that someone else has setup and access chat services through them. The two ways to access chat from jabberwocky <pre > Jabberwocky -> Server -> XMPP -> open and ad-free Jabberwocky -> Server -> Transports (Gateways) -> Proprietary closed systems </pre > The Jabber.org service connects with all IM services that use XMPP, the open standard for instant messaging and presence over the Internet. The services we connect with include Google Talk (closed), Live Journal Talk, Nimbuzz, Ovi, and thousands more. However, you can not connect from Jabber.org to proprietary services like AIM, ICQ, MSN, Skype, or Yahoo because they don’t yet use XMPP components (XEP-0114) '''but''' you can use Jabber.com's servers and IM gateways (MSN, ICQ, Yahoo etc.) instead. The best way to use jabberwocky is in conjunction with a public jabber server with '''transports''' to your favorite services, like gtalk, Facebook, yahoo, ICQ, AIM, etc. You have to register with one of the servers, [https://list.jabber.at/ this list] or [http://www.jabberes.org/servers/ another list], [http://xmpp.net/ this security XMPP list], Unfortunately jabberwocky can only connect to one server at a time so it is best to check what services each server offers. If you set it up with separate Facebook and google talk accounts, for example, sometimes you'll only get one or the other. Jabberwocky open a window where the Jabber server part is typed in as well as your Nickname and Password. Jabber ID (JID) identifies you to the server and other users. Once registered the next step is to goto Jabberwocky's "Windows" menu and select the "Agents" option. The "Agents List" window will open. Roster (contacts list) [http://search.wensley.org.uk/ Chatrooms] (MUC) are available File Transfer - can send and receive files through the Jabber service but not with other services like IRC, ICQ, AIM or Yahoo. All you need is an installed webbrowser and OpenURL. Clickable URLs - The message window uses Mailtext.mcc and you can set a URL action in the MUI mailtext prefs like SYS:Utils/OpenURL %s NEWWIN. There is no consistent Skype like (H.323 VoIP) video conferencing available over Jabber. The move from xmpp to Jingle should help but no support on any amiga-like systems at the moment. [http://aminet.net/package/dev/src/AmiPhoneSrc192 AmiPhone] and [http://www.lysator.liu.se/%28frame,faq,nobg,useframes%29/ahi/v4-site/ Speak Freely] was an early attempt voice only contact. SIP and Asterisk are other PBX options. Facebook If you're using the XMPP transport provided by Facebook themselves, chat.facebook.com, it looks like they're now requiring SSL transport. This means jabberwocky method below will no longer work. The best thing to do is to create an ID on a public jabber server which has a Facebook gateway. <pre > 1. launch jabberwocky 2. if the login window doesn't appear on launch, select 'account' from the jabberwocky menu 3. your jabber ID will be user@chat.facebook.com where user is your user ID 4. your password is your normal facebook password 5. to save this for next time, click the popup gadget next to the ID field 6. click the 'add' button 7. click the 'close' button 8. click the 'connect' button </pre > you're done. you can also click the 'save as default account' button if you want. jabberwocky configured to auto-connect when launching the program, but you can configure as you like. there is amigaguide documentation included with jabberwocky. [http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=37085&forum=32 Read more here] for Facebook users, you can log-in directly to Facebook with jabberwocky. just sign in as @chat.facebook.com with your Facebook password as the password Twitter For a few years, there has been added a twitter transport. Servers include [http://jabber.hot-chilli.net/ jabber.hot-chili.net], and . An [http://jabber.hot-chilli.net/tag/how-tos/ How-to] :Read [http://jabber.hot-chilli.net/2010/05/09/twitter-transport-working/ more] Instagram no support at the moment best to use a web browser based client ICQ The new version (beta) of StriCQ uses a newer ICQ protocol. Most of the ICQ Jabber Transports still use an older ICQ protocol. You can only talk one-way to StriCQ using the older Transports. Only the newer ICQv7 Transport lets you talk both ways to StriCQ. Look at the server lists in the first section to check. Register on a Jabber server, e.g. this one works: http://www.jabber.de/ Then login into Jabberwocky with the following login data e.g. xxx@jabber.de / Password: xxx Now add your ICQ account under the window->Agents->"Register". Now Jabberwocky connects via the Jabber.de server with your ICQ account. Yahoo Messenger although yahoo! does not use xmpp protocol, you should be able to use the transport methods to gain access and post your replies MSN early months of 2013 Microsoft will ditch MSN Messenger client and force everyone to use Skype...but MSN protocol and servers will keep working as usual for quite a long time.... Occasionally the Messenger servers have been experiencing problems signing in. You may need to sign in at www.outlook.com and then try again. It may also take multiple tries to sign in. (This also affects you if you’re using Skype.) You have to check each servers' Agents List to see what transports (MSN protocol, ICQ protocol, etc.) are supported or use the list address' provided in the section above. Then register with each transport (IRC, MSN, ICQ, etc.) to which you need access. After registering you can Connect to start chatting. msn.jabber.com/registered should appear in the window. From this [http://tech.dir.groups.yahoo.com/group/amiga-jabberwocky/message/1378 JW group] guide which helps with this process in a clear, step by step procedure. 1. Sign up on MSN's site for a passport account. This typically involves getting a Hotmail address. 2. Log on to the Jabber server of your choice and do the following: * Select the "Windows/Agents" menu option in Jabberwocky. * Select the MSN Agent from the list presented by the server. * Click the Register button to open a new window asking for: **Username = passort account email address, typically your hotmail address. **Nick = Screen name to be shown to anyone you add to your buddy list. **Password = Password for your passport account/hotmail address. * Click the Register button at the bottom of the new window. 3. If all goes well, you will see the MSN Gateway added to your buddy list. If not, repeat part 2 on another server. Some servers may show MSN in their list of available agents, but have not updated their software for the latest protocols used by MSN. 4. Once you are registered, you can now add people to your buddy list. Note that you need to include the '''msn.''' ahead of the servername so that it knows what gateway agent to use. Some servers may use a slight variation and require '''msg.gate.''' before the server name, so try both to see what works. If my friend's msn was amiga@hotmail.co.uk and my jabber server was @jabber.meta.net.nz.. then amiga'''%'''hotmail.com@'''msn.'''jabber.meta.net.nz or another the trick to import MSN contacts is that you don't type the hotmail URL but the passport URL... e.g. Instead of: goodvibe%hotmail.com@msn.jabber.com You type: goodvibe%passport.com@msn.jabber.com And the thing about importing contacts I'm afraid you'll have to do it by hand, one at the time... Google Talk any XMPP server will work, but you have to add your contacts manually. a google talk user is typically either @gmail.com or @talk.google.com. a true gtalk transport is nice because it brings your contacts to you and (can) also support file transfers to/from google talk users. implement Jingle a set of extensions to the IETF's Extensible Messaging and Presence Protocol (XMPP) support ended early 2014 as Google moved to Google+ Hangouts which uses it own proprietary format ===Video Player MPlayer=== Many of the menu features (such as doubling) do not work with the current version of mplayer but using 4:3 mplayer -vf scale=800:600 file.avi 16:9 mplayer -vf scale=854:480 file.avi if you want gui use; mplayer -gui 1 <other params> file.avi <pre > stack 1000000 ; using AspireOS 1.xx ; copy FROM SYS:Extras/Multimedia/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: ; using Icaros Desktop 1.x ; copy FROM SYS:Tools/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: ; using Icaros Desktop 2.x ; copy FROM SYS:Utilities/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: cd RAM:MPlayer run MPlayer -gui > Nil: ;run MPlayer -gui -ao ahi_dev -playlist http://www.radio-paralax.de/listen.pls > Nil: </pre > $ mplayer rtsp://127.0.0.1:554/sample_300kbit.mp4 MPlayer supports multicast streaming, and rtp/rtsp protocols (it might require [http://www.live555.com/openRTSP/ live555 library] to work with some streams). But you might have to build it where it's disabled. Also, multicast won't work with some AmiTCP-likes. MIAMI supported it, though. AROS supports IPv4 (old but works) and this includes the needed address space for RTP. If you mean multicast via RTP - mplayer handles it. You can even force UDP over TCP -rtsp-stream-over-tcp If the rtsp Real Time Streaming Protocol server needs authentification: -user -passwd MPlayer - Menu - Open Playlist and load already downloaded .pls or .m3u file - auto starts around 4 percent cache MPlayer - Menu - Open Stream and copy one of the .pls lines below into space allowed, press OK and press play button on main gui interface Old 8bit 16bit remixes chip tune game music http://www.radio-paralax.de/listen.pls http://scenesat.com/ http://www.shoutcast.com/radio/Amiga http://www.theoldcomputer.com/retro_radio/RetroRadio_Main.htm http://www.kohina.com/ http://www.remix64.com/ http://retrogamer.net/forum/ http://retroasylum.podomatic.com/rss2.xml http://retrogamesquad.com/ http://www.retronauts.com/ http://monsterfeet.com/noquarter/ http://www.retrogamingradio.com/ http://www.radiofeeds.co.uk/mp3.asp [[#top|...to the top]] ====ZunePaint==== simplified typical workflow * importing and organizing and photo management * making global and regional local correction(s) - recalculation is necessary after each adjustment as it is not in real-time * exporting your images in the best format available with the preservation of metadata Whilst achieving 80% of a great photo with just a filter, the remaining 20% comes from a manual fine-tuning of specific image attributes. For photojournalism, documentary, and event coverage, minimal touching is recommended. Stick to Camera Raw for such shots, and limit changes to level adjustment, sharpness, noise reduction, and white balance correction. For fashion or portrait shoots, a large amount of adjustment is allowed and usually ends up far from the original. Skin smoothing, blemish removal, eye touch-ups, etc. are common. Might alter the background a bit to emphasize the subject. Product photography usually requires a lot of sharpening, spot removal, and focus stacking. For landscape shots, best results are achieved by doing the maximum amount of preparation before/while taking the shot. No amount of processing can match timing, proper lighting, correct gear, optimal settings, etc. Excessive post-processing might give you a dramatic shot but best avoided in the long term. * White Balance - Left Amiga or F12 and K and under "Misc color effects" tab with a pull down for White Balance - color temperature also known as AKA tint (movies) or tones (painting) - warm temp raise red reduce green blue - cool raise blue lower red green * Exposure - exposure compensation, highlight/shadow recovery * Noise Reduction - during RAW development or using external software * Lens Corrections - distortion, vignetting, chromatic aberrations * Detail - capture sharpening and local contrast enhancement * Contrast - black point, levels (sliders) and curves tools (F12 and K) * Framing - straighten () and crop (F12 and F) * Refinements - color adjustments and selective enhancements - Left Amiga or F12 and K for RGB and YUV histogram tabs - * Resizing - enlarge for a print or downsize for the web or email (F12 and D) * Output Sharpening - customized for your subject matter and print/screen size White Balance - F12 and K scan your image for a shade which was meant to be white (neutral with each RGB value being equal) like paper or plastic which is in the same light as the subject of the picture. Use the dropper tool to select this color, similar colours will shift and you will have selected the perfect white balance for your part of the image - for the whole picture make sure RAZ or CLR button at the bottom is pressed before applying to the image above. Exposure correction F12 and K - YUV Y luminosity - RGB extra red tint - move red curve slightly down and move blue green curves slightly up Workflows in practice * Undo - Right AROS key or F12 and Z * Redo - Right AROS key or F12 and R First flatten your image (if necessary) and then do a rotation until the picture looks level. * Crop the picture. Click the selection button and drag a box over the area of the picture you want to keep. Press the crop button and the rest of the photo will be gone. * Adjust your saturation, exposure, hue levels, etc., (right AROS Key and K for color correction) until you are happy with the photo. Make sure you zoom in all of the way to 100% and look the photo over, zoom back out and move around. Look for obvious problems with the picture. * After coloring and exposure do a sharpen (Right AROS key and E for Convolution and select drop down option needed), e.g. set the matrix to 5x5 (roughly equivalent Amount to 60%) and set the Radius to 1.0. Click OK. And save your picture Implemented or would like to see for simplification and ease of use basic filters (presets) like black and white, monochrome, edge detection (sobel), motion/gaussian blur, * negative, sepiatone, retro vintage, night vision, colour tint, color gradient, color temperature, glows, fire, lightning, lens flare, emboss, filmic, pixelate mezzotint, antialias, etc. adjust / cosmetic tools such as crop, * reshaping tools, straighten, smear, smooth, perspective, liquify, bloat, pucker, push pixels in any direction, dispersion, transform like warp, blending with soft light, page-curl, whirl, ripple, fisheye, neon, etc. * red eye fixing, blemish remover, skin smoothing, teeth whitener, make eyes look brighter, desaturate, effects like oil paint, cartoon, pencil sketch, charcoal, noise/matrix like sharpen/unsharpen, (right AROS key with A for Artistic effects) * blend two image, gradient blend, masking blend, explode, implode, custom collage, surreal painting, comic book style, needlepoint, stained glass, watercolor, mosaic, stencil/outline, crayon, chalk, etc. borders such as * dropshadow, rounded, blurred, color tint, picture frame, film strip polaroid, bevelled edge, etc. brushes e.g. * frost, smoke, etc. and manual control of fix lens issues including vignetting (darkening), color fringing and barrel distortion, and chromatic and geometric aberration - lens and body profiles perspective correction levels - directly modify the levels of the tone-values of an image, by using sliders for highlights, midtones and shadows curves - Color Adjustment and Brightness/Contrast color balance one single color transparent (alpha channel (color information/selections) for masking and/or blending ) for backgrounds, etc. Threshold indicates how much other colors will be considered mixture of the removed color and non-removed colors decompose layer into a set of layers with each holding a different type of pattern that is visible within the image any selection using any selecting tools like lasso tool, marquee tool etc. the selection will temporarily be save to alpha If you create your image without transparency then the Alpha channel is not present, but you can add later. File formats like .psd (Photoshop file has layers, masks etc. contains edited sensor data. The original sensor data is no longer available) .xcf .raw .hdr Image Picture Formats * low dynamic range (JPEG, PNG, TIFF 8-bit), 16-bit (PPM, TIFF), typically as a 16-bit TIFF in either ProPhoto or AdobeRGB colorspace - TIFF files are also fairly universal – although, if they contain proprietary data, such as Photoshop Adjustment Layers or Smart Filters, then they can only be opened by Photoshop making them proprietary. * linear high dynamic range (HDR) images (PFM, [http://www.openexr.com/ ILM .EXR], jpg, [http://aminet.net/util/dtype cr2] (canon tiff based), hdr, NEF, CRW, ARW, MRW, ORF, RAF (Fuji), PEF, DCR, SRF, ERF, DNG files are RAW converted to an Adobe proprietary format - a container that can embed the raw file as well as the information needed to open it) An old version of [http://archives.aros-exec.org/index.php?function=browse&cat=graphics/convert dcraw] There is no single RAW file format. Each camera manufacturer has one or more unique RAW formats. RAW files contain the brightness levels data captured by the camera sensor. This data cannot be modified. A second smaller file, separate XML file, or within a database with instructions for the RAW processor to change exposure, saturation etc. The extra data can be changed but the original sensor data is still there. RAW is technically least compatible. A raw file is high-bit (usually 12 or 14 bits of information) but a camera-generated TIFF file will be usually converted by the camera (compressed, downsampled) to 8 bits. The raw file has no embedded color balance or color space, but the TIFF has both. These three things (smaller bit depth, embedded color balance, and embedded color space) make it so that the TIFF will lose quality more quickly with image adjustments than the raw file. The camera-generated TIFF image is much more like a camera processed JPEG than a raw file. A strong advantage goes to the raw file. The power of RAW files, such as the ability to set any color temperature non-destructively and will contain more tonal values. The principle of preserving the maximum amount of information to as late as possible in the process. The final conversion - which will always effectively represent a "downsampling" - should prevent as much loss as possible. Once you save it as TIFF, you throw away some of that data irretrievably. When saving in the lossy JPEG format, you get tremendous file size savings, but you've irreversibly thrown away a lot of image data. As long as you have the RAW file, original or otherwise, you have access to all of the image data as captured. Keyboard equivalence with Photoshop(tm) would help File PHOTOSHOP SHORTCUT GIMP New Ctrl+n New Open Ctrl+o Open Close Ctrl+w Close Save Ctrl+s Save Save as Shift+Ctrl+s Save as Revert F12 Revert Print Ctrl+p Print Exit Ctrl+q Quit Edit PHOTOSHOP SHORTCUT GIMP Undo/Redo (1 level) Ctrl+z Undo (Redo is Shift+Ctrl+z) Cut Ctrl+x Cut Copy Ctrl+c Copy Paste Ctrl+v Paste Paste Into Shift+Ctrl+v Paste Into Fill with FG color Alt+Backspace Fill with FG color Fill with BG color Control+Backspace Fill with BG color Image/Colors PHOTOSHOP SHORTCUT GIMP Levels Ctrl+l Levels Auto Contrast Shift+Ctrl+Alt+l Stretch Contrast (same?) Curves Ctrl+m Curves Color Balance Ctrl+b Color Balance Hue/Saturation Ctrl+u Hue-Saturation Desaturate Shift+Ctrl+u Desaturate Invert Ctrl+i Invert Default Colors d Default Colors Switch Colors x Switch Colors Layer PHOTOSHOP SHORTCUT GIMP New Layer Shift+Ctrl+n New Layer Layer via Copy Ctrl+j Duplicate Layer Bring (layer) to Front Shift+Ctrl+] Layer to Top Send (layer) to Back Shift+Ctrl+[ Layer to Bottom Bring (layer) Forward Ctrl+] Raise Layer Send (layer) Backward Ctrl+[ Lower Layer Select Top Layer Shift+Alt+] Select Top Layer Select Bottom Layer Shift+Alt+[ Select Bottom Layer Select One Layer Forward Alt+] Select Previous Layer Select One Layer Backward Alt+[ Select Next Layer Merge Down Ctrl+e Merge Down Merge Visible Shift+Ctrl+e Merge Visible Preserve Transparency / Keep Transparency Cycle Modes Forwards Shift+= Next Layer Mode Cycle Modes Backwards Shift+- Previous Layer Mode Select PHOTOSHOP SHORTCUT GIMP Select All Ctrl+a Select All Deselect Ctrl+d Select None Inverse Shift+Ctrl+i Invert Feather Ctrl+Alt+d Feather View PHOTOSHOP SHORTCUT GIMP Zoom In Ctrl+= Zoom In Zoom Out Ctrl+- Zoom Out Fit on Screen Ctrl+0 Zoom to Fit Window Actual Pixels Ctrl+Alt+0 Zoom 1:1 Show/Hide Extras Ctrl+h Toggle Show Selection (close enough?) Show/Hide Guides Ctrl+' Toggle Show Guides Show/Hide Grid Ctrl+Alt+' Toggle Show Grid Show/Hide Rulers Ctrl+r Toggle Show Rulers Snap Ctrl+; Snap to Guides Scroll View Up Page Up Scroll Page Up Scroll View Down Page Down Scroll Page Down Scroll View Left Ctrl+Page Up Scroll Page Left Scroll View Right Ctrl+Page Down Scroll Page Right Window/Dialogs PHOTOSHOP SHORTCUT GIMP ? F5 Tools Dialog Color Tab F6 Colors Dialog Layers Tab F7 Layers Dialog Info Tab F8 Image Information Tools PHOTOSHOP SHORTCUT GIMP Rectangular Marquee Tool m Rect Select Tool Elliptical Marquee Tool Shift+m Ellipse Select Tool *This is a toggle between 'Elliptical Marquee Tool' and 'Rectangular Marquee Tool' in Photoshop Move Tool v Move Tool Lasso Tool l Free Select Tool Magic Wand Tool w Fuzzy Select Tool Crop Tool c Crop & Resize Tool Airbrush Tool j Airbrush Tool Paintbrush Tool b Paintbrush Tool Clone Stamp Tool s Clone Stamp Tool Eraser Tool e Eraser Tool Gradient Tool g Blend Tool Paint Bucket Tool Shift+g Bucket Fill Tool *This is a toggle between 'Paint Bucket Tool' and 'Gradient Tool' in Photoshop Blur Tool r Convolve Tool Dodge Tool o DodgeBurn Tool Type Tool t Text Tool Pen Tool p Bezier Select Tool Eye Dropper Tool i Color Picker Tool Zoom Tool z Magnify Tool Previous Brush , Previous Brush Next Brush . Next Brush First Brush Shift+< First Brush Last Brush Shift+> Last Brush Decrease Brush Size [ Decrease Brush Size Increase Brush Size ] Increase Brush Size Decrease Brush Hardness { Decrease Brush Hardness Increase Brush Hardness } Increase Brush Hardness Help PHOTOSHOP SHORTCUT GIMP Help F1 Help Context Help Shift+F1 Context Help Misc. PHOTOSHOP SHORTCUT GIMP Last Filter Ctrl+f Repeat Last Filter ? Shift+Ctrl+f Reshow Last Filter Preferences Ctrl+k Preferences Liquify Shift+Ctrl+x IWarp (close enough?) Toggle Quick Mask q Toggle Quick Mask Spotlights - triangle of white opaque shape Cutting out and/or replacing unwanted background or features - select large areas with the selection option like the Magic Wand tool (aka Color Range) or the Lasso (quick and fast) with feather 2 to soften edge or the pen tool which adds points/lines/Bézier curves (better control but slower), hold down the shift button as you click to add extra points/areas of the subject matter to remove. Increase the tolerance to cover more areas. To subtract from your selection hold down alt as you're clicking. * Layer masks are a better way of working than Erase they clip (black hides/hidden white visible/reveal). Clone Stamp can be simulated by and brushes for other areas. * Leave the fine details like hair, fur, etc. to later with lasso and the shift key to draw a line all the way around your subject. Gradient Mapping - Inverse - Mask. i.e. Refine your selected image with edge detection and using the radius and edge options / adjuster (increase/decrease contrast) so that you will capture more fine detail from the background allowing easier removal. Remove fringe/halo saving image as png rather than jpg/jpeg to keep transparency background intact. Implemented [http://colorizer.org/ colour model representations] [http://paulbourke.net/texture_colour/colourspace/ Mathematical approach] - Photo stills are spatially 2d (h and w), but are colorimetrically 3d (r g and b, or H L S, or Y U V etc.) as well. * RGB - split cubed mapped color model for photos and computer graphics hardware using the light spectrum (adding and subtracting) * YUV - Y-Lightness U-blue/yellow V-red/cyan (similar to YPbPr and YCbCr) used in the PAL, NTSC, and SECAM composite digital TV color [http://crewofone.com/2012/chroma-subsampling-and-transcoding/#comment-7299 video] Histograms White balanced (neutral) if the spike happens in the same place in each channel of the RGB graphs. If not, you're not balanced. If you have sky you'll see the blue channel further off to the right. RGB is best one to change colours. These elements RGB is a 3-channel format containing data for Red, Green, and Blue in your photo scale between 0 and 255. The area in a picture that appears to be brighter/whiter contains more red color as compared to the area which is relatively darker. Similarly in the green channel the area that appears to be darker contains less amount of green color as compared to the area that appears to be brighter. Similarly in the blue channel the area appears to be darker contains less amount of blue color as compared to the area that appears to be brighter. Brightness luminance histogram also matches the green histogram more than any other color - human eye interprets green better e.g. RGB rough ratio 15/55/30% RGBA (RGB+A, A means alpha channel) . The alpha channel is used for "alpha compositing", which can mostly be associated as "opacity". AROS deals in RGB with two digits for every color (red, green, blue), in ARGB you have two additional hex digits for the alpha channel. The shadows are represented by the left third of the graph. The highlights are represented by the right third. And the midtones are, of course, in the middle. The higher the black peaks in the graph, the more pixels are concentrated in that tonal range (total black area). By moving the black endpoint, which identifies the shadows (darkness) and a white light endpoint (brightness) up and down either sides of the graph, colors are adjusted based on these points. By dragging the central one, can increased the midtones and control the contrast, raise shadows levels, clip or softly eliminate unsafe levels, alter gamma, etc... in a way that is much more precise and creative . RGB Curves * Move left endpoint (black point) up or right endpoint (white point) up brightens * Move left endpoint down or right endpoint down darkens Color Curves * Dragging up on the Red Curve increases the intensity of the reds in the image but * Dragging down on the Red Curve decreases the intensity of the reds and thus increases the apparent intensity of its complimentary color, cyan. Green’s complimentary color is magenta, and blue’s is yellow. <pre> Red <-> Cyan Green <->Magenta Blue <->Yellow </pre> YUV Best option to analyse and pull out statistical elements of any picture (i.e. separate luminance data from color data). The line in Y luma tone box represents the brightness of the image with the point in the bottom left been black, and the point in the top right as white. A low-contrast image has a concentrated clump of values nearer to the center of the graph. By comparison, a high-contrast image has a wider distribution of values across the entire width of the Histogram. A histogram that is skewed to the right would indicate a picture that is a bit overexposed because most of the color data is on the lighter side (increase exposure with higher value F), while a histogram with the curve on the left shows a picture that is underexposed. This is good information to have when using post-processing software because it shows you not only where the color data exists for a given picture, but also where any data has been clipped (extremes on edges of either side): that is, it does not exist and, therefore, cannot be edited. By dragging the endpoints of the line and as well as the central one, can increased the dark/shadows, midtones and light/bright parts and control the contrast, raise shadows levels, clip or softly eliminate unsafe levels, alter gamma, etc... in a way that is much more precise and creative . The U and V chroma parts show color difference components of the image. It’s useful for checking whether or not the overall chroma is too high, and also whether it’s being limited too much Can be used to create a negative image but also With U (Cb), the higher value you are, the more you're on the blue primary color. If you go to the low values then you're on blue complementary color, i.e. yellow. With V (Cr), this is the same principle but with Red and Cyan. e.g. If you push U full blue and V full red, you get magenta. If you push U full yellow and V full Cyan then you get green. YUV simultaneously adds to one side of the color equation while subtracting from the other. using YUV to do color correction can be very problematic because each curve alters the result of each other: the mutual influence between U and V often makes things tricky. You may also be careful in what you do to avoid the raise of noise (which happens very easily). Best results are obtained with little adjustments sunset that looks uninspiring and needs some color pop especially for the rays over the hill, a subtle contrast raise while setting luma values back to the legal range without hard clipping. ====Lunapaint==== Pixel based drawing app with onion-skin animation function Blocking, Shading, Coloring, adding detail <pre> b BRUSH e ERASER alt eyedropper v layer tool z ZOOM / MAGNIFY < > n spc panning m marque q lasso w same color selection / region </pre> <pre> , LM RM v V f filter F . size p , pick color [] last / next color </pre> There is not much missing in Lunapaint to be as good as FlipBook and then you have to take into account that Flipbook is considered to be amongst the best and easiest to use animation software out there. Ok to be honest Flipbook has some nice features that require more heavy work but those aren't so much needed right away, things like camera effects, sound, smart fill, export to different movie file formats etc. Tried Flipbook with my tablet and compared it to Luna. The feeling is the same when sketching. LunaPaint is very responsive/fluent to draw with. Just as Flipbook is, and that responsiveness is something its users have mentioned as one of the positive sides of said software. author was learning MUI. Some parts just have to be rewritten with proper MUI classes before new features can be added. * add [Frame Add] / [Frame Del] * whole animation feature is impossible to use. If you draw 2 color maybe but if you start coloring your cells then you get in trouble * pickup the entire image as a brush, not just a selection ? And consequently remove the brush from memory when one doesn't need it anymore. can pick up a brush and put it onto a new image but cropping isn't possible, nor to load/save brushes. * Undo is something I longed for ages in Lunapaint. * to import into the current layer, other types of images (e.g. JPEG) besides RAW64. * implement graphic tablet features support **GENERAL DRAWING** Miss it very much: UNDO ERASER COLORPICKER - has to show on palette too which color got picked. BACKGROUND COLOR -Possibility to select from "New project screen" Miss it somewhat: ICON for UNDO ICON for ERASER ICON for CLEAR SCREEN ( What can I say? I start over from scratch very often ) BRUSH - possibility to cut out as brush not just copy off image to brush **ANIMATING** Miss it very much: NUMBER OF CELLS - Possibity to change total no. of cells during project ANIM BRUSH - Possibility to pick up a selected part of cells into an animbrush Miss it somewhat: ADD/REMOVE FRAMES: Add/remove single frame In general LunaPaint is really well done and it feels like a new DeluxePaint version. It works with my tablet. Sure there's much missing of course but things can always be added over time. So there is great potential in LunaPaint that's for sure. Animations could be made in it and maybe put together in QuickVideo, saving in .gif or .mng etc some day. LAYERS -Layers names don't get saved globally in animation frames -Layers order don't change globally in an animation (perhaps as default?). EXPORTING IMAGES -Exporting frames to JPG/PNG gives problems with colors. (wrong colors. See my animatiopn --> My robot was blue now it's "gold" ) I think this only happens if you have layers. -Trying to flatten the layers before export doesn't work if you have animation frames only the one you have visible will flatten properly all other frames are destroyed. (Only one of the layers are visible on them) -Exporting images filenames should be for example e.g. file0001, file0002...file0010 instead as of now file1, file2...file10 LOAD/SAVE (Preferences) -Make a setting for the default "Work" folder. * Destroyed colors if exported image/frame has layers * mystic color cycling of the selected color while stepping frames back/forth (annoying) <pre> Deluxe Paint II enhanced key shortcuts NOTE: @ denotes the ALT key [Technique] F1 - Paint F2 - Single Colour F3 - Replace F4 - Smear F5 - Shade F6 - Cycle F7 - Smooth M - Colour Cycle [Brush] B - Restore O - Outline h - Halve brush size H - Double brush size x - Flip brush on X axis X - Double brush size on X axis only y - Flip on Y Y - Double on Y z - Rotate brush 90 degrees Z - Stretch [Stencil] ` - Stencil On [Miscellaneous] F9 - Info Bar F10 - Selection Bar @o - Co-Ordinates @a - Anti-alias @r - Colourise @t - Translucent TAB - Colour Cycle [Picture] L - Load S - Save j - Page to Spare(Flip) J - Page to Spare(Copy) V - View Page Q - Quit [General Keys] m - Magnify < - Zoom In > - Zoom Out [ - Palette Colour Up ] - Palette Colour Down ( - Palette Colour Left ) - Palette Colour Right , - Eye Dropper . - Pixel / Brush Toggle / - Symmetry | - Co-Ordinates INS - Perspective Control +/- - Brush Size (Fine Control) w - Unfilled Polygon W - Filled Polygon e - Unfilled Ellipse E - Filled Ellipse r - Unfilled Rectangle R - Filled Rectangle t - Type/text tool a - Select Font u/U - Undo d - Brush D - Filled Non-Uniform Polygon f/F - Fill Options g/G - Grid h/H - Brush Size (Coarse Control) K - Clear c - Unfilled Circle C - Filled Circle v - Line b - Scissor Select and Toggle B - Brush {,} - Toggle between two background colours </pre> ====Lodepaint==== Pixel based painting artwork app ====Grafx2==== Pixel based painting artwork app aesprite like [https://www.youtube.com/watch?v=59Y6OTzNrhk aesprite workflow keys and tablet use], [], ====Vector Graphics ZuneFIG==== Vector Image Editing of files .svg .ps .eps *Objects - raise lower rotate flip aligning snapping *Path - unify subtract intersect exclude divide *Colour - fill stroke *Stroke - size *Brushes - *Layers - *Effects - gaussian bevels glows shadows *Text - *Transform - AmiFIG ([http://epb.lbl.gov/xfig/frm_introduction.html xfig manual]) [[File:MyScreen.png|thumb|left|alt=Showing all Windows open in AmiFIG.|All windows available to AmiFIG.]] for drawing simple to intermediate vector graphic images for scientific and technical uses and for illustration purposes for those with talent ;Menu options * Load - fig format but import(s) SVG * Save - fig format but export(s) eps, ps, pdf, svg and png * PAN = Ctrl + Arrow keys * Deselect all points There is no selected object until you apply the tool, and the selected object is not highlighted. ;Metrics - to set up page and styles - first window to open on new drawings ;Tools - Drawing Primitives - set Attributes window first before clicking any Tools button(s) * Shapes - circles, ellipses, arcs, splines, boxes, polygon * Lines - polylines * Text "T" button * Photos - bitmaps * Compound - Glue, Break, Scale * POINTs - Move, Add, Remove * Objects - Move, Copy, Delete, Mirror, Rotate, Paste use right mouse button to stop extra lines, shapes being formed and the left mouse to select/deselect tools button(s) * Rotate - moves in 90 degree turns centered on clicked POINT of a polygon or square ;Attributes which provide change(s) to the above primitives * Color * Line Width * Line Style * arrowheads ;Modes Choose from freehand, charts, figures, magnet, etc. ;Library - allows .fig clip-art to be stored * compound tools to add .fig(s) together ;FIG 3.2 [http://epb.lbl.gov/xfig/fig-format.html Format] as produced by xfig version 3.2.5 <pre> Landscape Center Inches Letter 100.00 Single -2 1200 2 4 0 0 50 -1 0 12 0.0000 4 135 1050 1050 2475 This is a test.01 </pre> # change the text alignment within the textbox. I can choose left, center, or right aligned by either changing the integer in the second column from 0 (left) to 1 or 2 (center, or right). # The third integer in the row specifies fontcolor. For instance, 0 is black, but blue is 1 and Green3 is 13. # The sixth integer in the bottom row specifies fontface. 0 is Times-Roman, but 16 is Helvetica (a MATLAB default). # The seventh number is fontsize. 12 represents a 12pt fontsize. Changing the fontsize of an item really is as easy as changing that number to 20. # The next number is the counter-clockwise angle of the text. Notice that I have changed the angle to .7854 (pi/4 rounded to four digits=45 degrees). # twelfth number is the position according to the standard “x-axis” in Xfig units from the left. Note that 1200 Xfig units is equivalent to once inch. # thirteenth number is the “y-position” from the top using the same unit convention as before. * The nested text string is what you entered into the textbox. * The “01″ present at the end of that line in the .fig file is the closing tag. For instance, a change to \100 appends a @ symbol at the end of the period of that sentence. ; Just to note there are no layers, no 3d functions, no shading, no transparency, no animation [[#top|...to the top]] ===Audio=== # AHI uses linear panning/balance, which means that in the center, you will get -6dB. If an app uses panning, this is what you will get. Note that apps like Audio Evolution need panning, so they will have this problem. # When using AHI Hifi modes, mixing is done in 32-bit and sent as 32-bit data to the driver. The Envy24HT driver uses that to output at 24-bit (always). # For the Envy24/Envy24HT, I've made 16-bit and 24-bit inputs (called Line-in 16-bit, Line-in 24-bit etc.). There is unfortunately no app that can handle 24-bit recording. ====Music Mods==== Digital module (mods) trackers are music creation software using samples and sometimes soundfonts, audio plugins (VST, AU or RTAS), MIDI. Generally, MODs are similar to MIDI in that they contain note on/off and other sequence messages that control the mod player. Unlike (most) midi files, however, they also contain sound samples that the sequence information actually plays. MOD files can have many channels (classic amiga mods have 4, corresponding to the inbuilt sound channels), but unlike MIDI, each channel can typically play only one note at once. However, since that note might be a sample of a chord, a drumloop or other complex sound, this is not as limiting as it sounds. Like MIDI, notes will play indefinitely if they're not instructed to end. Most trackers record this information automatically if you play your music in live. If you're using manual note entry, you can enter a note-off command with a keyboard shortcut - usually Caps Lock. In fact when considering file size MOD is not always the best option. Even a dummy song wastes few kilobytes for nothing when a simple SID tune could be few hundreds bytes and not bigger than 64kB. AHX is another small format, AHX tunes are never larger than 64kB excluding comments. [https://www.youtube.com/watch?v=rXXsZfwgil Protrekkr] (previously aka [w:Juan_Antonio_Arguelles_Rius|NoiseTrekkr]) If Protrekkr does not start, please check if the Unit 0 has been setup in the AHI prefs and still not, go to the directory utilities/protrekkr and double click on the Protrekkr icon *Sample *Note - Effect *Track (column) - Pattern - Order It all starts with the Sample which is used to create Note(s) in a Track (column of a tracker) The Note can be changed with an Effect. A Track of Note(s) can be collected into a Pattern (section of a song) and these can be given Order to create the whole song. Patience (notes have to be entered one at a time) or playing the bassline on a midi controller (faster - see midi section above). Best approach is to wait until a melody popped into your head. *Up-tempo means the track should be reasonably fast, but not super-fast. *Groovy and funky imply the track should have some sort of "swing" feel, with plenty of syncopation or off beat emphasis and a recognizable, melodic bass line. *Sweet and happy mean upbeat melodies, a major key and avoiding harsh sounds. *Moody - minor key First, create a quick bass sound, which is basically a sine wave, but can be hand drawn for a little more variance. It could also work for the melody part, too. This is usually a bass guitar or some kind of synthesizer bass. The bass line is often forgotten by inexperienced composers, but it plays an important role in a musical piece. Together with the rhythm section the bass line forms the groove of a song. It's the glue between the rhythm section and the melodic layer of a song. The drums are just pink noise samples, played at different frequencies to get a slightly different sound for the kick, snare, and hihats. Instruments that fall into the rhythm category are bass drums, snares, hi-hats, toms, cymbals, congas, tambourines, shakers, etc. Any percussive instrument can be used to form part of the rhythm section. The lead is the instrument that plays the main melody, on top of the chords. There are many instruments that can play a lead section, like a guitar, a piano, a saxophone or a flute. The list is almost endless. There is a lot of overlap with instruments that play chords. Often in one piece an instrument serves both roles. The lead melody is often played at a higher pitch than the chords. Listened back to what was produced so far, and a counter-melody can be imagined, which can be added with a triangle wave. To give the ends of phrases some life, you can add a solo part with a crunchy synth. By hitting random notes in the key of G, then edited a few of them. For the climax of the song, filled out the texture with a gentle high-pitch pad… …and a grungy bass synth. The arrow at A points at the pattern order list. As you see, the patterns don't have to be in numerical order. This song starts with pattern "00", then pattern "02", then "03", then "01", etcetera. Patterns may be repeated throughout a song. The B arrow points at the song title. Below it are the global BPM and speed parameters. These determine the tempo of the song, unless the tempo is altered through effect commands during the song. The C arrow points at the list of instruments. An instrument may consist of multiple samples. Which sample will be played depends on the note. This can be set in the Instrument Editing screen. Most instruments will consist of just one sample, though. The sample list for the selected instrument can be found under arrow D. Here's a part of the main editing screen. This is where you put in actual notes. Up to 32 channels can be used, meaning 32 sounds can play simultaneously. The first six channels of pattern "03" at order "02" are shown here. The arrow at A points at the row number. The B arrow points at the note to play, in this case a C4. The column pointed at by the C arrow tells us which instrument is associated with that note, in this case instrument #1 "Kick". The column at D is used (mainly) for volume commands. In this case it is left empty which means the instrument should play at its default volume. You can see the volume column being used in channel #6. The E column tells us which effect to use and any parameters for that effect. In this case it holds the "F" effect, which is a tempo command. The "04" means it should play at tempo 4 (a smaller number means faster). Base pattern When I create a new track I start with what I call the base pattern. It is worthwhile to spend some time polishing it as a lot of the ideas in the base pattern will be copied and used in other patterns. At least, that's how I work. Every musician will have his own way of working. In "Wild Bunnies" the base pattern is pattern "03" at order "02". In the section about selecting samples I talked about the four different categories of instruments: drums, bass, chords and leads. That's also how I usually go about making the base pattern. I start by making a drum pattern, then add a bass line, place some chords and top it off with a lead. This forms the base pattern from which the rest of the song will grow. Drums Here's a screenshot of the first four rows of the base pattern. I usually reserve the first four channels or so for the drum instruments. Right away there are a couple of tricks shown here. In the first channel the kick, or bass drum, plays some notes. Note the alternating F04 and F02 commands. The "F" command alters the tempo of the song and by quickly alternating the tempo; the song will get some kind of "swing" feel. In the second channel the closed hi-hat plays a fairly simple pattern. Further down in the channel, not shown here, some open hi-hat notes are added for a bit of variation. In the third and fourth channel the snare sample plays. The "8" command is for panning. One note is panned hard to the left and the other hard to the right. One sample is played a semitone lower than the other. This results in a cool flanging effect. It makes the snare stand out a little more in the mix. Bass line There are two different instruments used for the bass line. Instrument #6 is a pretty standard synthesized bass sound. Instrument #A sounds a bit like a slap bass when used with a quick fade out. By using two different instruments the bass line sounds a bit more ”human”. The volume command is used to cut off the notes. However, it is never set to zero. Setting the volume to a very small value will result in a reverb-like effect. This makes the song sound more "live". The bass line hints at the chords that will be played and the key the song will be in. In this case the key of the song is D-major, a positive and happy key. Chords The D major chords that are being played here are chords stabs; short sounds with a quick decay (fade out). Two different instruments (#8 and #9) are used to form the chords. These instruments are quite similar, but have a slightly different sound, panning and volume decay. Again, the reason for this is to make the sound more human. The volume command is used on some chords to simulate a delay, to achieve more of a live feel. The chords are placed off-beat making for a funky rhythm. Lead Finally the lead melody is added. The other instruments are invaluable in holding the track together, but the lead melody is usually what catches people's attention. A lot of notes and commands are used here, but it looks more complex than it is. A stepwise ascending melody plays in channel 13. Channel 14 and 15 copy this melody, but play it a few rows later at a lower volume. This creates an echo effect. A bit of panning is used on the notes to create some stereo depth. Like with the bass line, instead of cutting off notes the volume is set to low values for a reverb effect. The "461" effect adds a little vibrato to the note, which sounds nice on sustained notes. Those paying close attention may notice the instrument used here for the lead melody is the same as the one used for the bass line (#6 "Square"), except played two or three octaves higher. This instrument is a looped square wave sample. Each type of wave has its own quirks, but the square wave (shown below) is a really versatile wave form. Song structure Good, catchy songs are often carefully structured into sections, some of which are repeated throughout the song with small variations. A typical pop-song structure is: Intro - Verse - Chorus - Verse - Chorus - Bridge - Chorus. Other single sectional song structures are <pre> Strophic or AAA Song Form - oldest story telling with refrain (often title of the song) repeated in every verse section melody AABA Song Form - early popular, jazz and gospel fading during the 1960s AB or Verse/Chorus Song Form - songwriting format of choice for modern popular music since the 1960s Verse/Chorus/Bridge Song Form ABAB Song Form ABAC Song Form ABCD Song Form AAB 12-Bar Song Form - three four-bar lines or sub-sections 8-Bar Song Form 16-Bar Song Form Hybrid / Compound Song Forms </pre> The most common building blocks are: #INTRODUCTION(INTRO) #VERSE #REFRAIN #PRE-CHORUS / RISE / CLIMB #CHORUS #BRIDGE #MIDDLE EIGHT #SOLO / INSTRUMENTAL BREAK #COLLISION #CODA / OUTRO #AD LIB (OFTEN IN CODA / OUTRO) The chorus usually has more energy than the verse and often has a memorable melody line. As the chorus is repeated the most often during the song, it will be the part that people will remember. The bridge often marks a change of direction in the song. It is not uncommon to change keys in the bridge, or at least to use a different chord sequence. The bridge is used to build up tension towards the big finale, the last repetition of chorus. Playing RCTRL: Play song from row 0. LSHIFT + RCTRL: Play song from current row. RALT: Play pattern from row 0. LSHIFT + RALT: Play pattern from current row. Left mouse on '>': Play song from row 0. Right mouse on '>': Play song from current row. Left mouse on '|>': Play pattern from row 0. Right mouse on '|>': Play pattern from current row. Left mouse on 'Edit/Record': Edit mode on/off. Right mouse on 'Edit/Record': Record mode on/off. Editing LSHIFT + ESCAPE: Switch large patterns view on/off TAB: Go to next track LSHIFT + TAB: Go to prev. track LCTRL + TAB: Go to next note in track LCTRL + LSHIFT + TAB: Go to prev. note in track SPACE: Toggle Edit mode On & Off (Also stop if the song is being played) SHIFT SPACE: Toggle Record mode On & Off (Wait for a key note to be pressed or a midi in message to be received) DOWN ARROW: 1 Line down UP ARROW: 1 Line up LEFT ARROW: 1 Row left RIGHT ARROW: 1 Row right PREV. PAGE: 16 Arrows Up NEXT PAGE: 16 Arrows Down HOME / END: Top left / Bottom right of pattern LCTRL + HOME / END: First / last track F5, F6, F7, F8, F9: Jump to 0, 1/4, 2/4, 3/4, 4/4 lines of the patterns + - (Numeric keypad): Next / Previous pattern LCTRL + LEFT / RIGHT: Next / Previous pattern LCTRL + LALT + LEFT / RIGHT: Next / Previous position LALT + LEFT / RIGHT: Next / Previous instrument LSHIFT + M: Toggle mute state of the current channel LCTRL + LSHIFT + M: Solo the current track / Unmute all LSHIFT + F1 to F11: Select a tab/panel LCTRL + 1 to 4: Select a copy buffer Tracking 1st and 2nd keys rows: Upper octave row 3rd and 4th keys rows: Lower octave row RSHIFT: Insert a note off / and * (Numeric keypad) or F1 F2: -1 or +1 octave INSERT / BACKSPACE: Insert or Delete a line in current track or current selected block. LSHIFT + INSERT / BACKSPACE: Insert or Delete a line in current pattern DELETE (NOT BACKSPACE): Empty a column or a selected block. Blocks (Blocks can also be selected with the mouse by holding the right button and scrolling the pattern with the mouse wheel). LCTRL + A: Select entire current track LCTRL + LSHIFT + A: Select entire current pattern LALT + A: Select entire column note in a track LALT + LSHIFT + A: Select all notes of a track LCTRL + X: Cut the selected block and copy it into the block-buffer LCTRL + C: Copy the selected block into the block-buffer LCTRL + V: Paste the data from the block buffer into the pattern LCTRL + I: Interpolate selected data from the first to the last row of a selection LSHIFT + ARROWS PREV. PAGE NEXT PAGE: Select a block LCTRL + R: Randomize the select columns of a selection, works similar to CTRL + I (interpolating them) LCTRL + U: Transpose the note of a selection to 1 seminote higher LCTRL + D: Transpose the note of a selection to 1 seminote lower LCTRL + LSHIFT + U: Transpose the note of a selection to 1 seminote higher (only for the current instrument) LCTRL + LSHIFT + D: Transpose the note of a selection to 1 seminote lower (only for the current instrument) LCTRL + H: Transpose the note of a selection to 1 octave higher LCTRL + L: Transpose the note of a selection to 1 octave lower LCTRL + LSHIFT + H: Transpose the note of a selection to 1 octave higher (only for the current instrument) LCTRL + LSHIFT + L: Transpose the note of a selection to 1 octave lower (only for the current instrument) LCTRL + W: Save the current selection into a file Misc LALT + ENTER: Switch between full screen / windowed mode LALT + F4: Exit program (Windows only) LCTRL + S: Save current module LSHIFT + S: Switch top right panel to synths list LSHIFT + I: Switch top right panel to instruments list <pre> C-x xh xx xx hhhh Volume B-x xh xx xx hhhh Jump to A#x xh xx xx hhhh hhhh Slide F-x xh xx xx hhhh Tempo D-x xh xx xx hhhh Pattern Break G#x xh xx xx hhhh </pre> h Hex 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 d Dec 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 The Set Volume command: C. Input a note, then move the cursor to the effects command column and type a C. Play the pattern, and you shouldn't be able to hear the note you placed the C by. This is because the effect parameters are 00. Change the two zeros to a 40(Hex)/64(Dec), depending on what your tracker uses. Play back the pattern again, and the note should come in at full volume. The Position Jump command next. This is just a B followed by the position in the playing list that you want to jump to. One thing to remember is that the playing list always starts at 0, not 1. This command is usually in Hex. Onto the volume slide command: A. This is slightly more complex (much more if you're using a newer tracker, if you want to achieve the results here, then set slides to Amiga, not linear), due to the fact it depends on the secondary tempo. For now set a secondary tempo of 06 (you can play around later), load a long or looped sample and input a note or two. A few rows after a note type in the effect command A. For the parameters use 0F. Play back the pattern, and you should notice that when the effect kicks in, the sample drops to a very low volume very quickly. Change the effect parameters to F0, and use a low volume command on the note. Play back the pattern, and when the slide kicks in the volume of the note should increase very quickly. This because each part of the effect parameters for command A does a different thing. The first number slides the volume up, and the second slides it down. It's not recommended that you use both a volume up and volume down at the same time, due to the fact the tracker only looks for the first number that isn't set to 0. If you specify parameters of 8F, the tracker will see the 8, ignore the F, and slide the volume up. Using a slide up and down at same time just makes you look stupid. Don't do it... The Set Tempo command: F, is pretty easy to understand. You simply specify the BPM (in Hex) that you want to change to. One important thing to note is that values of lower than 20 (Hex) sets the secondary tempo rather than the primary. Another useful command is the Pattern Break: D. This will stop the playing of the current pattern and skip to the next one in the playing list. By using parameters of more than 00 you can also specify which line to begin playing from. Command 3 is Portamento to Note. This slides the currently playing note to another note, at a specified speed. The slide then stops when it reaches the desired note. <pre> C-2 1 000 - Starts the note playing --- 000 C-3 330 - Starts the slide to C-3 at a speed of 30. --- 300 - Continues the slide --- 300 - Continues the slide </pre> Once the parameters have been set, the command can be input again without any parameters, and it'll still perform the same function unless you change the parameters. This memory function allows certain commands to function correctly, such as command 5, which is the Portamento to Note and Volume Slide command. Once command 3 has been set up command 5 will simply take the parameters from that and perform a Portamento to Note. Any parameters set up for command 5 itself simply perform a Volume Slide identical to command A at the same time as the Portamento to Note. This memory function will only operate in the same channel where the original parameters were set up. There are various other commands which perform two functions at once. They will be described as we come across them. C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 00 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 02 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 05 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 08 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 0A C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 0D C-3 04 .. .. 09 10 ---> C-3 04 .. .. 09 10 (You can also switch on the Slider Rec to On, and perform parameter-live-recording, such as cutoff transitions, resonance or panning tweaking, etc..) Note: this command only works for volume/panning and fx datas columns. The next command we'll look at is the Portamento up/down: 1 and 2. Command 1 slides the pitch up at a specified speed, and 2 slides it down. This command works in a similar way to the volume slide, in that it is dependent on the secondary tempo. Both these commands have a memory dependent on each other, if you set the slide to a speed of 3 with the 1 command, a 2 command with no parameters will use the speed of 3 from the 1 command, and vice versa. Command 4 is Vibrato. Vibrato is basically rapid changes in pitch, just try it, and you'll see what I mean. Parameters are in the format of xy, where x is the speed of the slide, and y is the depth of the slide. One important point to remember is to keep your vibratos subtle and natural so a depth of 3 or less and a reasonably fast speed, around 8, is usually used. Setting the depth too high can make the part sound out of tune from the rest. Following on from command 4 is command 6. This is the Vibrato and Volume Slide command, and it has a memory like command 5, which you already know how to use. Command 7 is Tremolo. This is similar to vibrato. Rather than changing the pitch it slides the volume. The effect parameters are in exactly the same format. vibrato effect (0x1dxy) x = speed y = depth (can't be used if arpeggio (0x1b) is turned on) <pre> C-7 00 .. .. 1B37 <- Turn Arpeggio effect on --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 1B38 <- Change datas --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 1B00 <- Turn it off </pre> Command 9 is Sample Offset. This starts the playback of the sample from a different place than the start. The effect parameters specify the sample offset, but only very roughly. Say you have a sample which is 8765(Hex) bytes long, and you wanted it to play from position 4321(Hex). The effect parameter could only be as accurate as the 43 part, and it would ignore the 21. Command B is the Playing List/Order Jump command. The parameters specify the position in the Playing List/Order to jump to. When used in conjunction with command D you can specify the position and the line to play from. Command E is pretty complex, as it is used for a lot of different things, depending on what the first parameter is. Let's take a trip through each effect in order. Command E0 controls the hardware filter on an Amiga, which, as a low pass filter, cuts off the highest frequencies being played back. There are very few players and trackers on other system that simulate this function, not that you should need to use it. The second parameter, if set to 1, turns on the filter. If set to 0, the filter gets turned off. Commands E1/E2 are Fine Portamento Up/Down. Exactly the same functions as commands 1/2, except that they only slide the pitch by a very small amount. These commands have a memory the same as 1/2 as well. Command E3 sets the Glissando control. If parameters are set to 1 then when using command 3, any sliding will only use the notes in between the original note and the note being slid to. This produces a somewhat jumpier slide than usual. The best way to understand is to try it out for yourself. Produce a slow slide with command 3, listen to it, and then try using E31. Command E4 is the Set Vibrato Waveform control. This command controls how the vibrato command slides the pitch. Parameters are 0 - Sine, 1 - Ramp Down (Saw), 2 - Square. By adding 4 to the parameters, the waveform will not be restarted when a new note is played e.g. 5 - Sine without restart. Command E5 sets the Fine Tune of the instrument being played, but only for the particular note being played. It will override the default Fine Tune for the instrument. The parameters range from 0 to F, with 0 being -8 and F being +8 Fine Tune. A parameter of 8 gives no Fine Tune. If you're using a newer tracker that supports more than -8 to +8 e.g. -128 to +128, these parameters will give a rough Fine Tune, accurate to the nearest 16. Command E6 is the Jump Loop command. You mark the beginning of the part of a pattern that you want to loop with E60, and then specify with E6x the end of the loop, where x is the number of times you want it to loop. Command E7 is the Set Tremolo Waveform control. This has exactly the same parameters as command E4, except that it works for Tremolo rather than Vibrato. Command E9 is for Retriggering the note quickly. The parameter specifies the interval between the retrigs. Use a value of less than the current secondary tempo, or else the note will not get retrigged. Command EA/B are for Fine Volume Slide Up/Down. Much the same as the normal Volume Slides, except that these are easier to control since they don't depend on the secondary tempo. The parameters specify the amount to slide by e.g. if you have a sample playing at a volume of 08 (Hex) then the effect EA1 will slide this volume to 09 (Hex). A subsequent effect of EB4 would slide this volume down to 05 (Hex). Command EC is the Note Cut. This sets the volume of the currently playing note to 0 at a specified tick. The parameters should be lower than the secondary tempo or else the effect won't work. Command ED is the Note Delay. This should be used at the same time as a note is to be played, and the parameters will specify the number of ticks to delay playing the note. Again, keep the parameters lower than the secondary tempo, or the note won't get played! Command EE is the Pattern Delay. This delays the pattern for the amount of time it would take to play a certain number of rows. The parameters specify how many rows to delay for. Command EF is the Funk Repeat command. Set the sample loop to 0-1000. When EFx is used, the loop will be moved to 1000- 2000, then to 2000-3000 etc. After 9000-10000 the loop is set back to 0- 1000. The speed of the loop "movement" is defined by x. E is two times as slow as F, D is three times as slow as F etc. EF0 will turn the Funk Repeat off and reset the loop (to 0-1000). effects 0x41 and 0x42 to control the volumes of the 2 303 units There is a dedicated panel for synth parameter editing with coherent sections (osc, filter modulation, routing, so on) the interface is much nicer, much better to navigate with customizable colors, the reverb is now customizable (10 delay lines), It accepts newer types of Waves (higher bit rates, at least 24). Has a replay routine. It's pretty much your basic VA synth. The problem isn't with the sampler being to high it's the synth is tuned two octaves too low, but if you want your samples tuned down just set the base note down 2 octaves (in the instrument panel). so the synth is basically divided into 3 sections from left to right: oscillators/envelopes, then filter and LFO's, and in the right column you have mod routings and global settings. for the oscillator section you have two normal oscillators (sine, saw, square, noise), the second of which is tunable, the first one tunes with the key pressed. Attached to OSC 1 is a sub-oscillator, which is a sawtooth wave tuned one octave down. The phase modulation controls the point in the duty cycle at which the oscillator starts. The ADSR envelope sliders (grouped with oscs) are for modulation envelope 1 and 2 respectively. you can use the synth as a sampler by choosing the instrument at the top. In the filter column, the filter settings are: 1 = lowpass, 2 = highpass, 3 = off. cutoff and resonance. For the LFOs they are LFO 1 and LFO 2, the ADSR sliders in those are for the LFO itself. For the modulation routings you have ENV 1, LFO 1 for the first slider and ENV 2, LFO 2 for the second, you can cycle through the individual routings there, and you can route each modulation source to multiple destinations of course, which is another big plus for this synth. Finally the glide time is for portamento and master volume, well, the master volume... it can go quite loud. The sequencer is changed too, It's more like the one in AXS if you've used that, where you can mute tracks to re-use patterns with variation. <pre> Support for the following modules formats: 669 (Composer 669, Unis 669), AMF (DSMI Advanced Module Format), AMF (ASYLUM Music Format V1.0), APUN (APlayer), DSM (DSIK internal format), FAR (Farandole Composer), GDM (General DigiMusic), IT (Impulse Tracker), IMF (Imago Orpheus), MOD (15 and 31 instruments), MED (OctaMED), MTM (MultiTracker Module editor), OKT (Amiga Oktalyzer), S3M (Scream Tracker 3), STM (Scream Tracker), STX (Scream Tracker Music Interface Kit), ULT (UltraTracker), UNI (MikMod), XM (FastTracker 2), Mid (midi format via timidity) </pre> Possible plugin options include [http://lv2plug.in/ LV2], ====Midi - Musical Instrument Digital Interface==== A midi file typically contains music that plays on up to 16 channels (as per the midi standard), but many notes can simultaneously play on each channel (depending on the limit of the midi hardware playing it). '''Timidity''' Although usually already installed, you can uncompress the [http://www.libsdl.org/projects/SDL_mixer/ timidity.tar.gz (14MB)] into a suitable drawer like below's SYS:Extras/Audio/ assign timidity: SYS:Extras/Audio/timidity added to SYSːs/User-Startup '''WildMidi playback''' '''Audio Evolution 4 (2003) 4.0.23 (from 2012)''' *Sync Menu - CAMD Receive, Send checked *Options Menu - MIDI Machine Control - Midi Bar Display - Select CAMD MIDI in / out - Midi Remote Setup MCB Master Control Bus *Sending a MIDI start-command and a Song Position Pointer, you can synchronize audio with an external MIDI sequencer (like B&P). *B&P Receive, start AE, add AudioEvolution.ptool in Bars&Pipes track, press play / record in AE then press play in Pipes *CAMD Receive, receive MIDI start or continue commands via camd.library sync to AE *MIDI Machine Control *Midi Bar Display *Select CAMD MIDI in / out *Midi Remote Setup - open requester for external MIDI controllers to control app mixer and transport controls cc remotely Channel - mixer(vol, pan, mute, solo), eq, aux, fx, Subgroup - Volume, Mute, Solo Transport - Start, End, Play, Stop, Record, Rewind, Forward Misc - Master vol., Bank Down, Bank up <pre> q - quit First 3 already opened when AE started F1 - timeline window F2 - mixer F3 - control F4 - subgroups F5 - aux returns F6 - sample list i - Load sample to use space - start/stop play b - reset time 0:00 s - split mode r - open recording window a - automation edit mode with p panning, m mute and v volume [ / ] - zoom in / out : - previous track * - next track x c v f - cut copy paste cross-fade g - snap grid </pre> '''[http://bnp.hansfaust.de/ Bars n Pipes sequencer]''' BarsnPipes debug ... in shell Menu (right mouse) *Song - Songs load and save in .song format but option here to load/save Midi_Files .mid in FORMAT0 or FORMAT1 *Track - *Edit - *Tool - *Timing - SMTPE Synchronizing *Windows - *Preferences - Multiple MIDI-in option Windows (some of these are usually already opened when Bars n Pipes starts up for the first time) *Workflow -> Tracks, .... Song Construction, Time-line Scoring, Media Madness, Mix Maestro, *Control -> Transport (or mini one), Windows (which collects all the Windows icons together-shortcut), .... Toolbox, Accessories, Metronome, Once you have your windows placed on the screen that suits your workflow, Song -> Save as Default will save the positions, colors, icons, etc as you'd like them If you need a particular setup of Tracks, Tools, Tempos etc, you save them all as a new song you can load each time Right mouse menu -> Preferences -> Environment... -> ScreenMode - Linkages for Synch (to Slave) usbmidi.out.0 and Send (Master) usbmidi.in.0 - Clock MTC '''Tracks''' #Double-click on B&P's icon. B&P will then open with an empty Song. You can also double-click on a song icon to open a song in B&P. #Choose a track. The B&P screen will contain a Tracks Window with a number of tracks shown as pipelines (Track 1, Track 2, etc...). To choose a track, simply click on the gray box to show an arrow-icon to highlight it. This icon show whether a track is chosen or not. To the right of the arrow-icon, you can see the icon for the midi-input. If you double-click on this icon you can change the MIDI-in setup. #Choose Record for the track. To the right of the MIDI-input channel icon you can see a pipe. This leads to another clickable icon with that shows either P, R or M. This stands for Play, Record or Merge. To change the icon, simply click on it. If you choose P, this track can only play the track (you can't record anything). If you choose R, you can record what you play and it overwrites old stuff in the track. If you choose M, you merge new records with old stuff in the track. Choose R now to be able to make a record. #Chose MIDI-channel. On the most right part of the track you can see an icon with a number in it. This is the MIDI-channel selector. Here you must choose a MIDI-channel that is available on your synthesizer/keyboard. If you choose General MIDI channel 10, most synthesizer will play drum sounds. To the left of this icon is the MIDI-output icon. Double-click on this icon to change the MIDI-output configuration. #Start recording. The next step is to start recording. You must then find the control buttons (they look like buttons on a CD-player). To be able to make a record. you must click on the R icon. You can simply now press the play button (after you have pressed the R button) and play something on you keyboard. To playback your composition, press the Play button on the control panel. #Edit track. To edit a track, you simply double click in the middle part of a track. You will then get a new window containing the track, where you can change what you have recorded using tools provided. Take also a look in the drop-down menus for more features. Videos to help understand [https://www.youtube.com/watch?v=A6gVTX-9900 small intro], [https://www.youtube.com/watch?v=abq_rUTiSA4&t=3s Overview], [https://www.youtube.com/watch?v=ixOVutKsYQo Workplace Setup CC PC Sysex], [https://www.youtube.com/watch?v=dDnJLYPaZTs Import Song], [https://www.youtube.com/watch?v=BC3kkzPLkv4 Tempo Mapping], [https://www.youtube.com/watch?v=sd23kqMYPDs ptool Arpeggi-8], [https://www.youtube.com/watch?v=LDJq-YxgwQg PlayMidi Song], [https://www.youtube.com/watch?v=DY9Pu5P9TaU Amiga Midi], [https://www.youtube.com/watch?v=abq_rUTiSA4 Learning Amiga bars and Pipes], Groups like [https://groups.io/g/barsnpipes/topics this] could help '''Tracks window''' * blue "1 2 3 4 5 6 7 8 Group" and transport tape deck VCR-type controls * Flags * [http://theproblem.alco-rhythm.com/org/bp.html Track 1, Track2, to Track 16, on each Track there are many options that can be activated] Each Track has a *Left LHS - Click in grey box to select what Track to work on, Midi-In ptool icon should be here (5pin plug icon), and many more from the Toolbox on the Input Pipeline *Middle - (P, R, M) Play, Record, Merge/Multi before the sequencer line and a blue/red/yellow (Thru Mute Play) Tap *Right RHS - Output pipeline, can have icons placed uopn it with the final ptool icon(s) being the 5pin icon symbol for Midi-OUT Clogged pipelines may need Esc pressed several times '''Toolbox (tools affect the chosen pipeline)''' After opening the Toolbox window you can add extra Tools (.ptool) for the pipelines like keyboard(virtual), midimonitor, quick patch, transpose, triad, (un)quantize, feedback in/out, velocity etc right mouse -> Toolbox menu option -> Install Tool... and navigate to Tool drawer (folder) and select requried .ptool Accompany B tool to get some sort of rythmic accompaniment, Rythm Section and Groove Quantize are examples of other tools that make use of rythms [https://aminet.net/search?query=bars Bars & Pipes pattern format .ptrn] for drawer (folder). Load from the Menu as Track or Group '''Accessories (affect the whole app)''' Accessories -> Install... and goto the Accessories drawer for .paccess like adding ARexx scripting support '''Song Construction''' <pre> F1 Pencil F2 Magic Wand F3 Hand F4 Duplicator F5 Eraser F6 Toolpad F7 Bounding box F8 Lock to A-B-A A-B-A strip, section, edit flags, white boxes, </pre> Bars&Pipes Professional offers three track formats; basic song tracks, linear tracks — which don't loop — and finally real‑time tracks. The difference between them is that both song and linear tracks respond to tempo changes, while real‑time tracks use absolute timing, always trigger at the same instant regardless of tempo alterations '''Tempo Map''' F1 Pencil F2 Magic Wand F3 Hand F4 Eraser F5 Curve F6 Toolpad Compositions Lyrics, Key, Rhythm, Time Signature '''Master Parameters''' Key, Scale/Mode '''Track Parameters''' Dynamics '''Time-line Scoring''' '''Media Madness''' '''Mix Maestro''' *ACCESSORIES Allows the importation of other packages and additional modules *CLIPBOARD Full cut, copy and paste operations, enabling user‑definable clips to be shared between tracks. *INFORMATION A complete rundown on the state of the current production and your machine. *MASTER PARAMETERS Enables global definition of time signatures, lyrics, scales, chords, dynamics and rhythm changes. *MEDIA MADNESS A complete multimedia sequencer which allows samples, stills, animation, etc *METRONOME Tempo feedback via MIDI, internal Amiga audio and colour cycling — all three can be mixed and matched as required. *MIX MAESTRO Completely automated mixdown with control for both volume and pan. All fader alterations are memorised by the software *RECORD ACTIVATION Complete specification of the data to be recorded/merged. Allows overdubbing of pitch‑bend, program changes, modulation etc *SET FLAGS Numeric positioning of location and edit flags in either SMPTE or musical time *SONG CONSTRUCTION Large‑scale cut and paste of individual measures, verses or chorus, by means of bounding box and drag‑n‑drop mouse selections *TEMPO MAP Tempo change using a variety of linear and non‑linear transition curves *TEMPO PALETTE Instant tempo changes courtesy of four user‑definable settings. *TIMELINE SCORING Sequencing of a selection of songs over a defined period — ideal for planning an entire set for a live performance. *TOOLBOX Selection screen for the hundreds of signal‑processing tools available *TRACKS Opens the main track window to enable recording, editing and the use of tools. *TRANSPORT Main playback control window, which also provides access to user‑ defined flags, loop and punch‑in record modes. Bars and Pipes Pro 2.5 is using internal 4-Byte IDs, to check which kind of data are currently processed. Especially in all its files the IDs play an important role. The IDs are stored into the file in the same order they are laid out in the memory. In a Bars 'N' Pipes file (no matter which kind) the ID "NAME" (saved as its ANSI-values) is stored on a big endian system (68k-computer) as "NAME". On a little endian system (x86 PC computer) as "EMAN". The target is to make the AROS-BnP compatible to songs, which were stored on a 68k computer (AMIGA). If possible, setting MIDI channels for Local Control for your keyboard http://www.fromwithin.com/liquidmidi/archive.shtml MIDI files are essentially a stream of event data. An event can be many things, but typically "note on", "note off", "program change", "controller change", or messages that instruct a MIDI compatible synth how to play a given bit of music. * Channel - 1 to 16 - * Messages - PC presets, CC effects like delays, reverbs, etc * Sequencing - MIDI instruments, Drums, Sound design, * Recording - * GUI - Piano roll or Tracker, Staves and Notes MIDI events/messages like step entry e.g. Note On, Note Off MIDI events/messages like PB, PC, CC, Mono and Poly After-Touch, Sysex, etc MIDI sync - Midi Clocks (SPS Measures), Midi Time Code (h, m, s and frames) SMPTE Individual track editing with audition edits so easier to test any changes. Possible to stop track playback, mix clips from the right edit flag and scroll the display using arrow keys. Step entry, to extend a selected note hit the space bar and the note grows accordingly. Ability to cancel mouse‑driven edits by simply clicking the right mouse button — at which point everything snaps back into its original form. Lyrics can now be put in with syllable dividers, even across an entire measure or section. Autoranging when you open a edit window, the notes are automatically displayed — working from the lowest upwards. Flag editing, shift‑click on a flag immediately open the bounds window, ready for numeric input. Ability to cancel edits using the right‑hand mouse button, plus much improved Bounding Box operations. Icons other than the BarsnPipes icon -> PUBSCREEN=BarsnPipes (cannot choose modes higher than 8bit 256 colors) Preferences -> Menu in Tracks window - Send MIDI defaults OFF Prefs -> Environment -> screenmode (saved to BarsnPipes.prefs binary file) Customization -> pics in gui drawer (folder) - Can save as .song files and .mid General Midi SMF is a “Standard Midi File” ([http://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html SMF0, SMF1 and SMF2]), [https://github.com/stump/libsmf libsmf], [https://github.com/markc/midicomp MIDIcomp], [https://github.com/MajicDesigns/MD_MIDIFile C++ src], [], [https://github.com/newdigate/midi-smf-reader Midi player], * SMF0 All MIDI data is stored in one track only, separated exclusively by the MIDI channel. * SMF1 The MIDI data is stored in separate tracks/channels. * SMF2 (rarely used) The MIDI data is stored in separate tracks, which are additionally wrapped in containers, so it's possible to have e.g. several tracks using the same MIDI channels. Would it be possible to enrich Bars N’Pipes with software synth and sample support along with audio recording and mastering tools like in the named MAC or PC music sequencers? On the classic AMIGA-OS this is not possible because of missing CPU-power. The hardware of the classic AMIGA is not further developed. So we must say (unfortunately) that those dreams can’t become reality BarsnPipes is best used with external MIDI-equipment. This can be a keyboard or synthesizer with MIDI-connectors. <pre> MIDI can control 16 channels There are USB-MIDI-Interfaces on the market with 16 independent MIDI-lines (multi-port), which can handle 16 MIDI devices independently – 16×16 = 256 independent MIDI-channels or instruments handle up to 16 different USB-MIDI-Interfaces (multi-device). That is: 16X16X16 = 4096 independent MIDI-channels – theoretically </pre> <pre> Librarian MIDI SYStem EXplorer (sysex) - PatchEditor and used to be supplied as a separate program like PatchMeister but currently not at present It should support MIDI.library (PD), BlueRibbon.library (B&P), TriplePlayPlus, and CAMD.library (DeluxeMusic) and MIDI information from a device's user manual and configure a custom interface to access parameters for all MIDI products connected to the system Supports ALL MIDI events and the Patch/Librarian data is stored in MIDI standard format Annette M.Crowling, Missing Link Software, Inc. </pre> Composers <pre> [https://x.com/hirasawa/status/1403686519899054086 Susumu Hirasawa] </pre> <pre> 1988 Todor Fay and his wife Melissa Jordan Gray, who founded the Blue Ribbon Inc 1992 Bars&Pipes Pro published November 2000, Todor Fay announcement to release the sourcecode of Bars&Pipes Pro 2.5c beta end of May 2001, the source of the main program and the sources of some tools and accessories were in a complete and compileable state end of October 2009 stop further development of BarsnPipes New for now on all supported systems and made freeware 2013 Alfred Faust diagnosed with incureable illness, called „Myastenia gravis“ (weak muscles) </pre> Protrekkr How to use Midi In/Out in Protrekkr ? First of all, midi in & out capabilities of this program are rather limited. # Go to Misc. Setup section and select a midi in or out device to use (ptk only supports one device at a time). # Go to instrument section, and select a MIDI PRG (the default is N/A, which means no midi program selected). # Go to track section and here you can assign a midi channel to each track of ptk. # Play notes :]. Note off works. F'x' note cut command also works too, and note-volume command (speed) is supported. Also, you can change midicontrollers in the tracker, using '90' in the panning row: <pre> C-3 02 .. .. 0000.... --- .. .. 90 xxyy.... << This will set the value --- .. .. .. 0000.... of the controller n.'xx' to 'yy' (both in hex) --- .. .. .. 0000.... </pre> So "--- .. .. 90 2040...." will set the controller number $20(32) to $40(64). You will need the midi implementation table of your gear to know what you can change with midi controller messages. N.B. Not all MIDI devices are created equal! Although the MIDI specification defines a large range of MIDI messages of various kinds, not every MIDI device is required to work in exactly the same way and respond to all the available messages and ways of working. For example, we don't expect a wind synthesiser to work in the same way as a home keyboard. Some devices, the older ones perhaps, are only able to respond to a single channel. With some of those devices that channel can be altered from the default of 1 (probably) to another channel of the 16 possible. Other devices, for instance monophonic synthesisers, are capable of producing just one note at a time, on one MIDI channel. Others can produce many notes spread across many channels. Further devices can respond to, and transmit, "breath controller" data (MIDI controller number 2 (CC#2)) others may respond to the reception of CC#2 but not be able to create and to send it. A controller keyboard may be capable of sending "expression pedal" data, but another device may not be capable of responding to that message. Some devices just have the basic GM sound set. The "voice" or "instrument" is selected using a "Program Change" message on its own. Other devices have a greater selection of voices, usually arranged in "banks", and the choice of instrument is made by responding to "Bank Select MSB" (MIDI controller 0 (CC#0)), others use "Bank Select LSB" (MIDI controller number 32 (CC#32)), yet others use both MSB and LSB sent one after the other, all followed by the Program Change message. The detailed information about all the different voices will usually be available in a published MIDI Data List. MIDI Implementation Chart But in the User Manual there is sometimes a summary of how the device works, in terms of MIDI, in the chart at the back of the manual, the MIDI Implementation Chart. If you require two devices to work together you can compare the two implementation charts to see if they are "compatible". In order to do this we will need to interpret that chart. The chart is divided into four columns headed "Function", "Transmitted" (or "Tx"), "Received" (or "Rx"), or more correctly "Recognised", and finally, "Remarks". <pre> The left hand column defines which MIDI functions are being described. The 2nd column defines what the device in question is capable of transmitting to another device. The 3rd column defines what the device is capable of responding to. The 4th column is for explanations of the values contained within these previous two columns. </pre> There should then be twelve sections, with possibly a thirteenth containing extra "Notes". Finally there should be an explanation of the four MIDI "modes" and what the "X" and the "O" mean. <pre> Mode 1: Omni On, Poly; Mode 2: Omni On, Mono; Mode 3: Omni Off, Poly; Mode 4: Omni Off, Mono. </pre> O means "yes" (implemented), X means "no" (not implemented). Sometimes you will find a row of asterisks "**************", these seem to indicate that the data is not applicable in this case. Seen in the transmitted field only (unless you've seen otherwise). Lastly you may find against some entries an asterisk followed by a number e.g. *1, these will refer you to further information, often on a following page, giving more detail. Basic Channel But the very first set of boxes will tell us the "Basic Channel(s)" that the device sends or receives on. "Default" is what happens when the device is first turned on, "changed" is what a switch of some kind may allow the device to be set to. For many devices e.g. a GM sound module or a home keyboard, this would be 1-16 for both. That is it can handle sending and receiving on all MIDI channels. On other devices, for example a synthesiser, it may by default only work on channel 1. But the keyboard could be "split" with the lower notes e.g. on channel 2. If the synth has an arppegiator, this may be able to be set to transmit and or receive on yet another channel. So we might see the default as "1" but the changed as "1-16". Modes. We need to understand Omni On and Off, and Mono and Poly, then we can decipher the four modes. But first we need to understand that any of these four Mode messages can be sent to any MIDI channel. They don't necessarily apply to the whole device. If we send an "Omni On" message (CC#125) to a MIDI channel of a device, we are, in effect, asking it to respond to e.g. a Note On / Off message pair, received on any of the sixteen channels. Sound strange? Read it again. Still strange? It certainly is. We normally want a MIDI channel to respond only to Note On / Off messages sent on that channel, not any other. In other words, "Omni Off". So "Omni Off" (CC#124) tells a channel of our MIDI device to respond only to messages sent on that MIDI channel. "Poly" (CC#127) is for e.g. a channel of a polyphonic sound module, or a home keyboard, to be able to respond to many simultaneous Note On / Off message pairs at once and produce musical chords. "Mono" (CC#126) allows us to set a channel to respond as if it were e.g. a flute or a trumpet, playing just one note at a time. If the device is capable of it, then the overlapping of notes will produce legato playing, that is the attack portion of the second note of two overlapping notes will be removed resulting in a "smoother" transition. So a channel with a piano voice assigned to it will have Omni Off, Poly On (Mode 3), a channel with a saxophone voice assigned could be Omni Off, Mono On (Mode 4). We call these combinations the four modes, 1 to 4, as defined above. Most modern devices will have their channels set to Mode 3 (Omni Off, Poly) but be switchable, on a per channel basis, to Mode 4 (Omni Off, Mono). This second section of data will include first its default value i.e. upon device switch on. Then what Mode messages are acceptable, or X if none. Finally, in the "Altered" field, how a Mode message that can't be implemented will be interpreted. Usually there will just be a row of asterisks effectively meaning nothing will be done if you try to switch to an unimplemented mode. Note Number <pre> The next row will tell us which MIDI notes the device can send or receive, normally 0-127. The second line, "True Voice" has the following in the MIDI specification: "Range of received note numbers falling within the range of true notes produced by the instrument." My interpretation is that, for instance, a MIDI piano may be capable of sending all MIDI notes (0 to 127) by transposition, but only responding to the 88 notes (21 to 108) of a real piano. </pre> Velocity This will tell us whether the device we're looking at will handle note velocity, and what range from 1-127, or maybe just 64, it transmits or will recognise. So usually "O" plus a range or "X" for not implemented. After touch This may have one or two lines two it. If a one liner the either "O" or "X", yes or no. If a two liner then it may include "Keys" or "Poly" and "Channel". This will show whether the device will respond to Polyphonic after touch or channel after touch or neither. Pitch Bend Again "O" for implemented, "X" for not implemented. (Many stage pianos will have no pitch bend capability.) It may also, in the notes section, state whether it will respond to the full 14 bits, or not, as usually encoded by the pitch bend wheel. Control Change This is likely to be the largest section of the chart. It will list all those controllers, starting from CC#0, Bank Select MSB, which the device is capable of sending, and those that it will respond to using "O" or "X" respectively. You will, almost certainly, get some further explanation of functionality in the remarks column, or in more detail elsewhere in the documentation. Of course you will need to know what all the various controller numbers do. Lots of the official technical specifications can be found at the [www.midi.org/techspecs/ MMA], with the table of messages and control change [www.midi.org/techspecs/midimessages.php message numbers] Program Change Again "O" or "X" in the Transmitted or Recognised column to indicate whether or not the feature is implemented. In addition a range of numbers is shown, typically 0-127, to show what is available. True # (number): "The range of the program change numbers which correspond to the actual number of patches selected." System Exclusive Used to indicate whether or not the device can send or recognise System Exclusive messages. A short description is often given in the Remarks field followed by a detailed explanation elsewhere in the documentation. System Common - These include the following: <pre> MIDI Time Code Quarter Frame messages (device synchronisation). Song Position Pointer Song Select Tune Request </pre> The section will indicate whether or not the device can send or respond to any of these messages. System Real Time These include the following: <pre> Timing Clock - often just written as "Clock" Start Stop Continue </pre> These three are usually just referred to as "Commands" and listed. Again the section will indicate which, if any, of these messages the device can send or respond to. <pre> Aux. Messages Again "O" or "X" for implemented or not. Aux. = Auxiliary. Active Sense = Active Sensing. </pre> Often with an explanation of the action of the device. Notes The "Notes" section can contain any additional comments to clarify the particular implementation. Some of the explanations have been drawn directly from the MMA MIDI 1.0 Detailed Specification. And the detailed explanation of some of the functions will be found there, or in the General MIDI System Level 1 or General MIDI System Level 2 documents also published by the MMA. OFFICIAL MIDI SPECIFICATIONS SUMMARY OF MIDI MESSAGES Table 1 - Summary of MIDI Messages The following table lists the major MIDI messages in numerical (binary) order (adapted from "MIDI by the Numbers" by D. Valenti, Electronic Musician 2/88, and updated by the MIDI Manufacturers Association.). This table is intended as an overview of MIDI, and is by no means complete. WARNING! Details about implementing these messages can dramatically impact compatibility with other products. We strongly recommend consulting the official MIDI Specifications for additional information. MIDI 1.0 Specification Message Summary Channel Voice Messages [nnnn = 0-15 (MIDI Channel Number 1-16)] {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->1000nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Note Off event. This message is sent when a note is released (ended). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. |- |<!--Status-->1001nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Note On event. This message is sent when a note is depressed (start). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. |- |<!--Status-->1010nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Polyphonic Key Pressure (Aftertouch). This message is most often sent by pressing down on the key after it "bottoms out". (kkkkkkk) is the key (note) number. (vvvvvvv) is the pressure value. |- |<!--Status-->1011nnnn || <!--Data-->0ccccccc 0vvvvvvv || <!--Description-->Control Change. This message is sent when a controller value changes. Controllers include devices such as pedals and levers. Controller numbers 120-127 are reserved as "Channel Mode Messages" (below). (ccccccc) is the controller number (0-119). (vvvvvvv) is the controller value (0-127). |- |<!--Status-->1100nnnn || <!--Data-->0ppppppp || <!--Description-->Program Change. This message sent when the patch number changes. (ppppppp) is the new program number. |- |<!--Status-->1101nnnn || <!--Data-->0vvvvvvv || <!--Description-->Channel Pressure (After-touch). This message is most often sent by pressing down on the key after it "bottoms out". This message is different from polyphonic after-touch. Use this message to send the single greatest pressure value (of all the current depressed keys). (vvvvvvv) is the pressure value. |- |<!--Status-->1110nnnn || <!--Data-->0lllllll 0mmmmmmm || <!--Description-->Pitch Bend Change. This message is sent to indicate a change in the pitch bender (wheel or lever, typically). The pitch bender is measured by a fourteen bit value. Center (no pitch change) is 2000H. Sensitivity is a function of the receiver, but may be set using RPN 0. (lllllll) are the least significant 7 bits. (mmmmmmm) are the most significant 7 bits. |} Channel Mode Messages (See also Control Change, above) {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->1011nnnn || <!--Data-->0ccccccc 0vvvvvvv || <!--Description-->Channel Mode Messages. This the same code as the Control Change (above), but implements Mode control and special message by using reserved controller numbers 120-127. The commands are: *All Sound Off. When All Sound Off is received all oscillators will turn off, and their volume envelopes are set to zero as soon as possible c = 120, v = 0: All Sound Off *Reset All Controllers. When Reset All Controllers is received, all controller values are reset to their default values. (See specific Recommended Practices for defaults) c = 121, v = x: Value must only be zero unless otherwise allowed in a specific Recommended Practice. *Local Control. When Local Control is Off, all devices on a given channel will respond only to data received over MIDI. Played data, etc. will be ignored. Local Control On restores the functions of the normal controllers. c = 122, v = 0: Local Control Off c = 122, v = 127: Local Control On * All Notes Off. When an All Notes Off is received, all oscillators will turn off. c = 123, v = 0: All Notes Off (See text for description of actual mode commands.) c = 124, v = 0: Omni Mode Off c = 125, v = 0: Omni Mode On c = 126, v = M: Mono Mode On (Poly Off) where M is the number of channels (Omni Off) or 0 (Omni On) c = 127, v = 0: Poly Mode On (Mono Off) (Note: These four messages also cause All Notes Off) |} System Common Messages System Messages (0xF0) The final status nybble is a “catch all” for data that doesn’t fit the other statuses. They all use the most significant nybble (4bits) of 0xF, with the least significant nybble indicating the specific category. The messages are denoted when the MSB of the second nybble is 1. When that bit is a 0, the messages fall into two other subcategories. System Common If the MSB of the second second nybble (4 bits) is not set, this indicates a System Common message. Most of these are messages that include some additional data bytes. System Common Messages Type Status Byte Number of Data Bytes Usage <pre> Time Code Quarter Frame 0xF1 1 Indicates timing using absolute time code, primarily for synthronization with video playback systems. A single location requires eight messages to send the location in an encoded hours:minutes:seconds:frames format*. Song Position 0xF2 2 Instructs a sequencer to jump to a new position in the song. The data bytes form a 14-bit value that expresses the location as the number of sixteenth notes from the start of the song. Song Select 0xF3 1 Instructs a sequencer to select a new song. The data byte indicates the song. Undefined 0xF4 0 Undefined 0xF5 0 Tune Request 0xF6 0 Requests that the receiver retunes itself**. </pre> *MIDI Time Code (MTC) is significantly complex. Please see the MIDI Specification **While modern digital instruments are good at staying in tune, older analog synthesizers were prone to tuning drift. Some analog synthesizers had an automatic tuning operation that could be initiated with this command. System Exclusive If you’ve been keeping track, you’ll notice there are two status bytes not yet defined: 0xf0 and 0xf7. These are used by the System Exclusive message, often abbreviated at SysEx. SysEx provides a path to send arbitrary data over a MIDI connection. There is a group of predefined messages for complex data, like fine grained control of MIDI Time code machinery. SysEx is also used to send manufacturer defined data, such as patches, or even firmware updates. System Exclusive messages are longer than other MIDI messages, and can be any length. The messages are of the following format: 0xF0, 0xID, 0xdd, ...... 0xF7 The message is bookended with distinct bytes. It opens with the Start Of Exclusive (SOX) data byte, 0xF0. The next one to three bytes after the start are an identifier. Values from 0x01 to 0x7C are one-byte vendor IDs, assigned to manufacturers who were involved with MIDI at the beginning. If the ID is 0x00, it’s a three-byte vendor ID - the next two bytes of the message are the value. <pre> ID 0x7D is a placeholder for non-commercial entities. ID 0x7E indicates a predefined Non-realtime SysEx message. ID 0x7F indicates a predefined Realtime SysEx message. </pre> After the ID is the data payload, sent as a stream of bytes. The transfer concludes with the End of Exclusive (EOX) byte, 0xF7. The payload data must follow the guidelines for MIDI data bytes – the MSB must not be set, so only 7 bits per byte are actually usable. If the MSB is set, it falls into three possible scenarios. An End of Exclusive byte marks the ordinary termination of the SysEx transfer. System Real Time messages may occur within the transfer without interrupting it. The recipient should handle them independently of the SysEx transfer. Other status bytes implicitly terminate the SysEx transfer and signal the start of new messages. Some inexpensive USB-to-MIDI interfaces aren’t capable of handling messages longer than four bytes. {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->11110000 || <!--Data-->0iiiiiii [0iiiiiii 0iiiiiii] 0ddddddd --- --- 0ddddddd 11110111 || <!--Description-->System Exclusive. This message type allows manufacturers to create their own messages (such as bulk dumps, patch parameters, and other non-spec data) and provides a mechanism for creating additional MIDI Specification messages. The Manufacturer's ID code (assigned by MMA or AMEI) is either 1 byte (0iiiiiii) or 3 bytes (0iiiiiii 0iiiiiii 0iiiiiii). Two of the 1 Byte IDs are reserved for extensions called Universal Exclusive Messages, which are not manufacturer-specific. If a device recognizes the ID code as its own (or as a supported Universal message) it will listen to the rest of the message (0ddddddd). Otherwise, the message will be ignored. (Note: Only Real-Time messages may be interleaved with a System Exclusive.) |- |<!--Status-->11110001 || <!--Data-->0nnndddd || <!--Description-->MIDI Time Code Quarter Frame. nnn = Message Type dddd = Values |- |<!--Status-->11110010 || <!--Data-->0lllllll 0mmmmmmm || <!--Description-->Song Position Pointer. This is an internal 14 bit register that holds the number of MIDI beats (1 beat= six MIDI clocks) since the start of the song. l is the LSB, m the MSB. |- |<!--Status-->11110011 || <!--Data-->0sssssss || <!--Description-->Song Select. The Song Select specifies which sequence or song is to be played. |- |<!--Status-->11110100 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11110101 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11110110 || <!--Data--> || <!--Description-->Tune Request. Upon receiving a Tune Request, all analog synthesizers should tune their oscillators. |- |<!--Status-->11110111 || <!--Data--> || <!--Description-->End of Exclusive. Used to terminate a System Exclusive dump. |} System Real-Time Messages {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->11111000 || <!--Data--> || <!--Description-->Timing Clock. Sent 24 times per quarter note when synchronization is required. |- |<!--Status-->11111001 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11111010 || <!--Data--> || <!--Description-->Start. Start the current sequence playing. (This message will be followed with Timing Clocks). |- |<!--Status-->11111011 || <!--Data--> || <!--Description-->Continue. Continue at the point the sequence was Stopped. |- |<!--Status-->11111100 || <!--Data--> || <!--Description-->Stop. Stop the current sequence. |- |<!--Status-->11111101 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11111110 || <!--Data--> || <!--Description-->Active Sensing. This message is intended to be sent repeatedly to tell the receiver that a connection is alive. Use of this message is optional. When initially received, the receiver will expect to receive another Active Sensing message each 300ms (max), and if it does not then it will assume that the connection has been terminated. At termination, the receiver will turn off all voices and return to normal (non- active sensing) operation. |- |<!--Status-->11111111 || <!--Data--> || <!--Description-->Reset. Reset all receivers in the system to power-up status. This should be used sparingly, preferably under manual control. In particular, it should not be sent on power-up. |} Advanced Messages Polyphonic Pressure (0xA0) and Channel Pressure (0xD0) Some MIDI controllers include a feature known as Aftertouch. While a key is being held down, the player can press harder on the key. The controller measures this, and converts it into MIDI messages. Aftertouch comes in two flavors, with two different status messages. The first flavor is polyphonic aftertouch, where every key on the controller is capable of sending its own independent pressure information. The messages are of the following format: <pre> 0xnc, 0xkk, 0xpp n is the status (0xA) c is the channel nybble kk is the key number (0 to 127) pp is the pressure value (0 to 127) </pre> Polyphonic aftertouch is an uncommon feature, usually found on premium quality instruments, because every key requires a separate pressure sensor, plus the circuitry to read them all. Much more commonly found is channel aftertouch. Instead of needing a discrete sensor per key, it uses a single, larger sensor to measure pressure on all of the keys as a group. The messages omit the key number, leaving a two-byte format <pre> 0xnc, 0xpp n is the status (0xD) c is the channel number pp is the pressure value (0 to 127) </pre> Pitch Bend (0xE0) Many keyboards have a wheel or lever towards the left of the keys for pitch bend control. This control is usually spring-loaded, so it snaps back to the center of its range when released. This allows for both upward and downward bends. Pitch Bend Wheel The wheel sends pitch bend messages, of the format <pre> 0xnc, 0xLL, 0xMM n is the status (0xE) c is the channel number LL is the 7 least-significant bits of the value MM is the 7 most-significant bits of the value </pre> You’ll notice that the bender data is actually 14 bits long, transmitted as two 7-bit data bytes. This means that the recipient needs to reassemble those bytes using binary manipulation. 14 bits results in an overall range of 214, or 0 to 16,383. Because it defaults to the center of the range, the default value for the bender is halfway through that range, at 8192 (0x2000). Control Change (0xB0) In addition to pitch bend, MIDI has provisions for a wider range of expressive controls, sometimes known as continuous controllers, often abbreviated CC. These are transmitted by the remaining knobs and sliders on the keyboard controller shown below. Continuous Controllers These controls send the following message format: <pre> 0xnc, 0xcc, 0xvv n is the status (0xB) c is the MIDI channel cc is the controller number (0-127) vv is the controller value (0-127) </pre> Typically, the wheel next to the bender sends controller number one, assigned to modulation (or vibrato) depth. It is implemented by most instruments. The remaining controller number assignments are another point of confusion. The MIDI specification was revised in version 2.0 to assign uses for many of the controllers. However, this implementation is not universal, and there are ranges of unassigned controllers. On many modern MIDI devices, the controllers are assignable. On the controller keyboard shown in the photos, the various controls can be configured to transmit different controller numbers. Controller numbers can be mapped to particular parameters. Virtual synthesizers frequently allow the user to assign CCs to the on-screen controls. This is very flexible, but it might require configuration on both ends of the link and completely bypasses the assignments in the standard. Program Change (0xC0) Most synthesizers have patch storage memory, and can be told to change patches using the following command: <pre> 0xnc, 0xpp n is the status (0xc) c is the channel pp is the patch number (0-127) </pre> This allows for 128 sounds to be selected, but modern instruments contain many more than 128 patches. Controller #0 is used as an additional layer of addressing, interpreted as a “bank select” command. Selecting a sound on such an instrument might involve two messages: a bank select controller message, then a program change. Audio & Midi are not synchronized, what I can do ? Buy a commercial software package but there is a nasty trick to synchronize both. It's a bit hardcore but works for me: Simply put one line down to all midi notes on your pattern (use Insert key) and go to 'Misc. Setup', adjust the latency and just search a value that will make sound sync both audio/midi. The stock Sin/Saw/Pulse and Rnd waveforms are too simple/common, is there a way to use something more complex/rich ? You have to ability to redirect the waveforms of the instruments through the synth pipe by selecting the "wav" option for the oscillator you're using for this synth instrument, samples can be used as wavetables to replace the stock signals. Sound banks like soundfont (sf2) or Kontakt2 are not supported at the moment ====DAW Audio Evolution 4==== Audio Evolution 4 gives you unsurpassed power for digital audio recording and editing on the Amiga. The latest release focusses on time-saving non-linear and non-destructive editing, as seen on other platforms. Besides editing, Audio Evolution 4 offers a wide range of realtime effects, including compression, noise gate, delays, reverb, chorus and 3-band EQ. Whether you put them as inserts on a channel or use them as auxillaries, the effect parameters are realtime adjustable and can be fully automated. Together with all other mixing parameters, they can even be controlled remotely, using more ergonomic MIDI hardware. Non-linear editing on the time line, including cut, copy, paste, move, split, trim and crossfade actions The number of tracks per project(s) is unlimited .... AHI limits you to recording only two at a time. i.e. not on 8 track sound cards like the Juli@ or Phase 88. sample file import is limited to 16bit AIFF (not AIFC, important distinction as some files from other sources can be AIFC with aiff file extension). and 16bit WAV (pcm only) Most apps use the Music Unit only but a few apps also use Unit (0-3) instead or as well. * Set up AHI prefs so that microphone is available. (Input option near the bottom) stereo++ allows the audio piece to be placed anywhere and the left-right adjusted to sound positionally right hifi best for music playback if driver supports this option Load 16bit .aif .aiff only sample(s) to use not AIFC which can have the same ending. AIFF stands for Audio Interchange File Format sox recital.wav recital.aiff sox recital.wav −b 16 recital.aiff channels 1 rate 16k fade 3 norm sox input.wav output.aiff bass −b 16 rate 48k performs the same format translation, but also applies four effects (down-mix to one channel, sample rate change, fade-in, nomalize), and stores the result at a bit-depth of 16. rec −c 2 radio.aiff trim 0 30:00 records half an hour of stereo audio play existing-file.wav 24bit PCM WAV or AIFF do not work *No stream format handling. So no way to pass on an AC3 encoded stream unmodified to the digital outputs through AHI. *No master volume handling. Each application has to set its own volume. So each driver implements its own custom driver-mixer interface for handling master volumes, mute and preamps. *Only one output stream. So all input gets mixed into one output. *No automatic handling of output direction based on connected cables. *No monitor input selection. Only monitor volume control. select the correct input (Don't mistake enabled sound for the correct input.) The monitor will feedback audio to the lineout and hp out no matter if you have selected the correct input to the ADC. The monitor will provide sound for any valid input. This will result in free mixing when recording from the monitor input instead of mic/line because the monitor itself will provide the hardware mixing for you. Be aware that MIC inputs will give two channel mono. Only Linein will give real stereo. Now for the not working part. Attempt to record from linein in the AE4 record window, the right channel is noise and the left channel is distorted. Even with the recommended HIFI 16bit Stereo++ mode at 48kHz. Channels Monitor Gain Inout Output Advanced settings - Debugging via serial port * Options -> Soundcard In/Out * Options -> SampleRate * Options -> Preferences F6 for Sample File List Setting a grid is easy as is measuring the BPM by marking a section of the sample. Is your kick drum track "not in time" ? If so, you're stumped in AE4 as it has no fancy variable time signatures and definitely no 'track this dodgy rhythm' function like software of the nature of Logic has. So if your drum beat is freeform you will need to work in freeform mode. (Real music is free form anyway). If the drum *is* accurate and you are just having trouble measuring the time, I usually measure over a range of bars and set the number of beats in range to say 16 as this is more accurate, Then you will need to shift the drum track to match your grid *before* applying the grid. (probably an iterative process as when the grid is active samples snap to it, and when inactive you cannot see it). AE4 does have ARexx but the functions are more for adding samples at set offsets and starting playback / recording. These are the usual features found in DAWs... * Recording digital audio, midi sequencer and mixer * virtual VST instruments and plug-ins * automation, group channels, MIDI channels, FX sends and returns, audio and MIDI editors and music notation editor * different track views * mixer and track layout (but not the same as below) * traditional two windows (track and mixer) Mixing - mixdown Could not figure out how to select what part I wanted to send to the aux, set it to echo and return. Pretty much the whole echo effect. Or any effect. Take look at page17 of the manual. When you open the EQ / Aux send popup window you will see 4 sends. Now from the menu choose the windows menu. Menus->Windows-> Aux Returns Window or press F5 You will see a small window with 4 volume controls and an effects button for each. Click a button and add an effects to that aux channel, then set it up as desired (note the reverb effect has a special AUX setting that improves its use with the aux channel, not compulsory but highly useful). You set the amount of 'return' on the main mix in the Aux Return window, and the amount sent from each main mixer channel in the popup for that channel. Again the aux sends are "prefade" so the volume faders on each channel do not affect them. Tracking Effects - fade in To add some echoes to some vocals, tried to add an effect on a track but did not come out. This is made more complicated as I wanted to mute a vocal but then make it echo at the muting point. Want to have one word of a vocal heard and then echoed off. But when the track is mute the echo is cancelled out. To correctly understand what is happening here you need to study the figure at the bottom of page 15 on the manual. You will see from that that the effects are applied 'prefade' So the automation you applied will naturally mute the entire signal. There would be a number of ways to achieve the goal, You have three real time effects slots, one for smoothing like so Sample -> Amplify -> Delay Then automate the gain of the amplify block so that it effectively mutes the sample just before the delay at the appropriate moment, the echo effect should then be heard. Getting the effects in the right order will require experimentation as they can only be added top down and it's not obvious which order they are applied to the signal, but there only two possibilities, so it wont take long to find out. Using MUTE can cause clicks to the Amplify can be used to mute more smoothly so that's a secondary advantage. Signal Processing - Overdub [[#top|...to the top]] ===Office=== ====Spreadsheet Leu==== Support for some xlsx, and ods functions ====Spreadsheet Ignition==== ; Needs ABIv1 to be completed before more can be done File formats supported * ascii #?.txt and #?.csv (single sheets with data only). * igs and TurboCalc(WIP) #?.tc for all sheets with data, formats and formulas. There is '''no''' support for xls, xlsx, ods or uos ([http://en.wikipedia.org/wiki/Uniform_Office_Format Uniform Unified Office Format]) at the moment. * Always use Esc key after editing Spreadsheet cells. * copy/paste seems to copy the first instance only so go to Edit -> Clipboard to manage the list of remembered actions. * Right mouse click on row (1 or 2 or 3) or column header (a or b or c) to access optimal height or width of the row or column respectively * Edit -> Insert -> Row seems to clear the spreadsheet or clears the rows after the inserted row until undo restores as it should be... Change Sheet name by Object -> Sheet -> Properties Click in the cell which will contain the result, and click '''down arrow button''' to the right of the formula box at the bottom of the spreadsheet and choose the function required from the list provided. Then click on the start cell and click on the bottom right corner, a '''very''' small blob, which allows stretching a bounding box (thick grey outlines) across many cells This grey bounding box can be used to '''copy a formula''' to other cells. Object -> Cell -> Properties to change cell format - Currency only covers DM and not $, Euro, Renminbi, Yen or Pound etc. Shift key and arrow keys selects a range of cells, so that '''formatting can be done to all highlighted cells'''. View -> Overview then select ALL with one click (in empty cell in the top left hand corner of the sheet). Default mode is relative cell referencing e.g. a1+a2 but absolute e.g. $a$1+$a$2 can be entered. * #sheet-name to '''absolute''' reference another sheet-name cell unless reference() function used. ;Graphs use shift key and arrow keys to select a bunch of cells to be graph'ed making sure that x axes represents and y axes represents * value() - 0 value, 1 percent, 2 date, 3 time, 4 unit ... ;Dates * Excel starts a running count from the 1st Jan 1900 and Ignition starts from 1st Jan 1AD '''(maybe this needs to change)''' Set formatting Object -> Cell -> Properties and put date in days ;Time Set formatting Object -> Cell -> Properties and put time in seconds taken ;Database (to be done by someone else) type - standard, reference (bezug), search criterion (suchkriterium), * select a bunch of cells and Object -> Database -> Define to set Datenbank (database) and Felder (fields not sure how?) * Neu (new) or loschen (delete) to add/remove database headings e.g. Personal, Start Date, Finish Date (one per row?) * Object -> Database -> Index to add fields (felder) like Surname, First Name, Employee ID, etc. to ? Filtering done with dbfilter(), dbproduct() and dbposition(). Activities with dbsum(), dbaverage(), dbmin() and dbmax(). Table sorting - ;Scripts (Arexx) ;Excel(TM) to Ignition - commas ''',''' replaced by semi-colons ''';''' to separate values within functions *SUM(), *AVERAGE(), MAX(), MIN(), INT(), PRODUCT(), MEDIAN(), VAR() becomes Variance(), Percentile(), *IF(), AND, OR, NOT *LEFT(), RIGHT(), MID() becomes MIDDLE(), LEN() becomes LENGTH(), *LOWER() becomes LOWERCASE(), UPPER() becomes UPPERCASE(), * DATE(yyyy,mm,dd) becomes COMPUTEDATE(dd;mm;yyyy), *TODAY(), DAY(),WEEK(), MONTH(),=YEAR(TODAY()), *EOMONTH() becomes MONTHLENGTH(), *NOW() should be date and time becomes time only, SECOND(), MINUTE(), HOUR(), *DBSUM() becomes DSUM(), ;Missing and possibly useful features/functions needed for ignition to have better support of Excel files There is no Merge and Join Text over many cells, no protect and/or freeze row or columns or books but can LOCK sheets, no define bunch of cells as a name, Macros (Arexx?), conditional formatting, no Solver, no Goal Seek, no Format Painter, no AutoFill, no AutoSum function button, no pivot tables, (30 argument limit applies to Excel) *HLOOKUP(), VLOOKUP(), [http://production-scheduling.com/excel-index-function-most-useful/ INDEX(), MATCH()], CHOOSE(), TEXT(), *TRIM(), FIND(), SUBSTITUTE(), CONCATENATE() or &, PROPER(), REPT(), *[https://acingexcel.com/excel-sumproduct-function/ SUMPRODUCT()], ROUND(), ROUNDUP(), *ROUNDDOWN(), COUNT(), COUNTA(), SUMIF(), COUNTIF(), COUNTBLANK(), TRUNC(), *PMT(), PV(), FV(), POWER(), SQRT(), MODE(), TRUE, FALSE, *MODE(), LARGE(), SMALL(), RANK(), STDEV(), *DCOUNT(), DCOUNTA(), WEEKDAY(), ;Excel Keyboard [http://dmcritchie.mvps.org/excel/shortx2k.htm shortcuts needed to aid usability in Ignition] <pre> Ctrl Z - Undo Ctrl D - Fill Down Ctrl R - Fill right Ctrl F - Find Ctrl H - Replace Ctrl 1 - Formatting of Cells CTRL SHIFT ~ Apply General Formatting ie a number Ctrl ; - Todays Date F2 - Edit cell F4 - toggle cell absolute / relative cell references </pre> ====Document Scanning - Scandal==== Scanner usually needs to be connected via a USB port and not via a hub or extension lead. Check in Trident Prefs -> Devices that the USB Scanner is not bound to anything (e.g. Bindings None) If not found then reboot the computer and recheck. Start Scandal, choose Settings from Menu strip at top of screen and in Scanner Driver choose the ?#.device of the scanner (e.g. epson2.device). The next two boxes - leave empty as they are for morphos SCSI use only or put ata.device (use the selection option in bigger box below) and Unit as 0 this is needed for gt68xx * gt68xx - no editing needed in s/gt68xx.conf but needs a firmware file that corresponds to the scanner [http://www.meier-geinitz.de/sane/gt68xx-backend/ gt68xx firmwares] in sys:s/gt68xx. * epson2 - Need to edit the file epson2.conf in sys/s that corresponds to the scanner being used '''Save''' the settings but do not press the Use button (aros freezes) Back to the Picture Scan window and the right-hand sections. Click on the '''Information''' tab and press Connect button and the scanner should now be detected. Go next to the '''Scanner''' tab next to Information Tab should have Color, Black and White, etc. and dpi settings now. Selecting an option Color, B/W etc. can cause dpi settings corruption (especially if the settings are in one line) so set '''dpi first'''. Make sure if Preview is set or not. In the '''Scan''' Tab, press Scan and the scanner will do its duty. Be aware that nothing is saved to disk yet. In the Save tab, change format JPEG, PNG or IFF DEEP. Tick incremental and base filename if necessary and then click the Save button. The image will now be saved to permanent storage. The driver ignores a device if it is already bond to another USB class, rejects it from being usable. However, open Trident prefs, select your device and use the right mouse button to open. Select "NONE" to prevent poseidon from touching the device. Now save settings. It should always work now. [[#top|...to the top]] ===Emulators=== ==== Amiberry ==== ==== Amiga Emu - Janus UAE ==== With Amibridge, AROS attempts to make the UAE emulator seem embedded within but it still is acting as an app There is no dynarec m68k for each hardware that Aros supports or direct patching of motorola calls to AROS hardware accelerated ones unless the emulator has that included Try starting Janus with a priority of -1 like this little script: <pre> cd sys:system/AmiBridge/emulator changetaskpri -1 run janus-uae -f my_uaerc.config >nil: cd sys:prefs endcli </pre> This stops Janus hogging all the CPU time. ===Miscellaneous=== ====Screensaver Blanker==== Most blankers on the amiga (i.e. aros) run as commodities (they are in the tools/commodities drawer). Double click on blanker. Control is with an app called Exchange, which you need to run first (double click on app) or run QUIET sys:tools/commodities/Exchange >NIL: but subsequently can use (Cntrl Alt h). Icon tool types (may be broken) or command line options <pre> seconds=number </pre> Once the timing is right then add the following to s:icaros-sequence or s:user-startup e.g. for 5 minutes run QUIET sys:tools/commodities/Blanker seconds=300 >NIL: *[http://archives.aros-exec.org/index.php?function=showfile&file=graphics/screenblanker/gblanker.i386-aros.zip Garshneblanker] can make Aros unstable or slow. Certain blankers crashes in Icaros 2.0.x like Dragon, Executor. *[ Acuario AROS version], the aquarium screen saver. Startup: extras:acuariofv-aros/acuario Kill: c:break name=extras:acuariofv-aros/acuario Managed to start Acuario by the Executor blanker. <pre> cx_priority= cx_popkey= ie CX_POPKEY="Shift F1" cx_popup=Yes or No </pre> <pre> Qualifier String Input Event Class ---------------- ----------------- "lshift" IEQUALIFIER_LSHIFT "rshift" IEQUALIFIER_RSHIFT "capslock" IEQUALIFIER_CAPSLOCK "control" IEQUALIFIER_CONTROL "lalt" IEQUALIFIER_LALT "ralt" IEQUALIFIER_RALT "lcommand" IEQUALIFIER_LCOMMAND "rcommand" IEQUALIFIER_RCOMMAND "numericpad" IEQUALIFIER_NUMERICPAD "repeat" IEQUALIFIER_REPEAT "midbutton" IEQUALIFIER_MIDBUTTON "rbutton" IEQUALIFIER_RBUTTON "leftbutton" IEQUALIFIER_LEFTBUTTON "relativemouse" IEQUALIFIER_RELATIVEMOUSE </pre> <pre> Synonym Synonym String Identifier ------- ---------- "shift" IXSYM_SHIFT /* look for either shift key */ "caps" IXSYM_CAPS /* look for either shift key or capslock */ "alt" IXSYM_ALT /* look for either alt key */ Highmap is one of the following strings: "space", "backspace", "tab", "enter", "return", "esc", "del", "up", "down", "right", "left", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "help". </pre> [[#top|...to the top]] ==== World Construction Set WCS (Version 2.031) ==== WCS is a fractal landscape software such as Scenery Animator, Vista Pro and Panorama. Open sourced February 2022, World Construction Set [https://3dnature.com/downloads/legacy-software/ legally and for free] and [https://github.com/AlphaPixel/3DNature c source]. Announced August 1994 this version dates from April 1996 developed by Gary R. Huber and Chris "Xenon" Hanson" from Questar <pre> Assign "WCSProjects:" "Volume:Dir/Dir/WCSProjects" Assign "WCSFrames:" "Volume:Dir/Dir/WCSFrames" </pre> <pre> Load projects .proj by accessing pull down menu Project -> Open then click on CanyonSunset.proj OK to changing .par file and enlarge Status Log window to show what is happening Render by pull down menu Modules -> Render with End equal 1 not 300 then click bottom middle button Render </pre> [https://www.youtube.com/watch?v=CxQDmf1ZWG0 Youtube walkthrough of above], [], [], Also try working with the already built file ColoDemo - Then open with the drop-down menu: Project/Open, then WCSProject:ColoDemo.proj Which allows you to use altimetric DEM files already included and Loading scene parameters from ColoDemo.par Once this is done, save everything with a new name to start working exclusively on your project. Then drop-down menu and select Save As ("NewName".proj name), then drop-down menu to open parameter and select Save All ( .par name) After launching the software, there is a the Module Control Panel composed of five icons. It is a dock type shortcut of the first few functions of the drop-down menu *Database - Load (#?.proj), Append, Create, Edit, Save, Dir List (of WCSProject drawer), *Data Ops - Extract / Convert Interp DEM, Import DLG, DXF, WDB and export LW map 3d formats *Map View - Database file Loader leading to Map View Control with option to the Database Editor *Parameters - Editor for Motion, Color, Ecosystem, Clouds, Waves, management of altimeter files DEM, sclock settings etc *Render - rendering terrain These are more in the pull down menu but not in the dock *Motion Editor *Color Editor *Ecosys Editor Simple minimal workflow *Load database (1st icon - 1st) *Set parameters and save .par file (4th icon) *Render scene (5th icon) [https://www.youtube.com/watch?v=ZbTwwR2qcc4 Youtube], [], <pre> .proj new project name which creates a drawer of additional files .binary array, ascii array .xyz , z buffer, DTED .dt0, vista 1990s dem, iff conversion .Obj with .elev, .frd with .hdr maps, - digital elevation model (DEM) is a 3D representation of elevation data in various formats USGS 7.5MinDEM, .par </pre> Since for the time being no project is loaded, a query window indicates a procedural error when clicking on the rendering icon (right end of the bar). The menu is quite traditional; it varies according to the activity of the windows. To display any altimetric file in the "Mapview" (third icon of the panel), There are three possibilities: * Loading of a demonstration project. * The import of a DEM file, followed by texturing and packaging from the "Database-Editor" and the "Color-Editor". * The creation of an altimetric file in WCS format, then texturing. The altimeter file editing (display in the menu) is only made possible if the "Mapview" window is active. The software is made up of many windows and won't be able to describe them all. Know that "Color-Editor" and the "Data-Editor" comprise sufficient functions for obtaining an almost real rendering quality. You have the possibility of inserting vector objects in the "Data-Editor" (creation of roads, railways, etc.) The Map View (MapView) window *Database - Objects and Topos *View - Align, Center, Zoom, Pan, Move *Draw - Maps and distance *Object - Find, highlight, add points, conform topo, duplicate *Motion - Camera, Focus, path, elevation *Windows - DEM designer, Cloud (.cld) and wave (.wve) editor, You will notice that by selecting this window and simply moving the pointer to various points on the map you will see latitude and longitude values ​​change, along with the height. Drop-down menu and Modules, then select MapView and change the width of the window with the map to arrange it in the best way on the screen. With the Auto button the center. Window that then displays the contents of my DEM file, in this case the Grand Canyon. MapView allows you to observe the shape of the landscape from above ZOOM button Press the Zoom button and then with the pointer position on a point on the map, press the left mouse button and then move to the opposite corner to circumscribe the chosen area and press the left mouse button again, then we will see the enlarged area selected on the map. Would add that there is a box next to the Zoom button that allows the direct insertion of a value which, the larger it is, the smaller the magnification and the smaller the value, the stronger the magnification. At each numerical change you will need to press the DRAW button to update the view. PAN button Under Zoom you will find the PAN button which allows you to move the map at will in all directions by the amount you want. This is done by drawing a line in one direction, then press PAN and point to an area on the map with the pointer and press the left mouse button. At this point, leave it and move the pointer in one direction by drawing a line and press the left mouse button again to trigger the movement of the map on the screen (origin and end points). Do some experiments and then use the Auto button immediately below to recenter everything. There are parameters such as TOPO, VEC to be left checked and immediately below one that allows different views of the map with the Style command (Single, Multi, Surface, Emboss, Slope, Contour), each with its own particularities to highlight different details. Now you have the first basics to manage your project visually on the map. Close the MapView window and go further... Let's start working on ECOSYSTEMS If we select Emboss from the MapView Style command we will have a clear idea of ​​how the landscape appears, realizing that it is a predominantly desert region of our planet. Therefore we will begin to act on any vegetation present and the appearance of the landscape. With WCS we will begin to break down the elements of the landscape by assigning defined characteristics. It will be necessary to determine the classes of the ecosystem (Class) with parameters of Elevation Line (maximum altitude), Relative Elevation (arrangement on basins or convexities with respectively positive or negative parameters), Min Slope and Max Slope (slope). WCS offers the possibility of making ecosystems coexist on the same terrain with the UnderEco function, by setting a Density value. Ecosys Ecosystem Editor Let's open it from Modules, then Ecosys Editor. In the left pane you will find the list of ecosystems referring to the files present in our project. It will be necessary to clean up that box to leave only the Water and Snow landscapes and a few other predefined ones. We can do this by selecting the items and pressing the Remove button (be careful not for all elements the button is activated, therefore they cannot all be eliminated). Once this is done we can start adding new ecosystems. Scroll through the various Unused and as soon as the Name item at the top is activated allowing you to write, type the name of your ecosystem, adding the necessary parameters. <pre> Ecosystem1: Name: RockBase Class: Rock Density: 80 MinSlope: 15 UnderEco: Terrain Ecosystem2: Name: RockIncl Clss: Rock Density: 80 MinSlope: 30 UnderEco: Terrain Ecosystem3: Name: Grass Class Low Veg Density: 50 Height: 1 Elev Line : 1500 Rel El Eff: 5 Max Slope: 10 – Min Slope: 0 UnderEco: Terrain Ecosistema4: Name: Shrubs Class: Low Veg Density: 40 Height: 8 Elev Line: 3000 Rel El Eff: -2 Max Slope: 20 Min Slope : 5 UnderEco: Terrain Ecosistema5: Name: Terrain Class: Ground Density: 100 UnderEco: Terrain </pre> Now we need to identify an intermediate ecosystem that guarantees a smooth transition between all, therefore we select as Understory Ecosystem the one called Terrain in all ecosystems, except Snow and Water . Now we need to 'emerge' the Colorado River in the Canyon and we can do this by raising the sea level to 900 (Sea Level) in the Ecosystem called Water. Please note that the order of the ecosystem list gives priority to those that come after. So our list must have the following order: Water, Snow, Shrubs, RockIncl, RockBase, Terrain. It is possible to carry out all movements with the Swap button at the bottom. To put order you can also press Short List. Press Keep to confirm all the work done so far with Ecosystem Editor. Remember every now and then to save both the Project 'Modules/Save' and 'Parameter/Save All' EcoModels are made up of .etp .fgp .iff8 for each model Color Editor Now it's time to define the colors of our scene and we can do this by going to Modules and then Color Editor. In the list we focus on our ecosystems, created first. Let's go to the bottom of the list and select the first white space, assigning the name 'empty1', with a color we like and then we will find this element again in other environments... It could serve as an example for other situations! So we move to 'grass' which already exists and assign the following colors: R 60 G 70 B50 <pre> 'shrubs': R 60 G 80 B 30 'RockIncl' R 110 G 65 B 60 'RockBase' R 110 G 80 B 80 ' Terrain' R 150 G 30 B 30 <pre> Now we can work on pre-existing colors <pre> 'SunLight' R 150 G 130 B 130 'Haze and Fog' R 190 G 170 B 170 'Horizon' R 209 G 185 B 190 'Zenith' R 140 G 150 B 200 'Water' R 90 G 125 B 170 </pre> Ambient R 0 G 0 B 0 So don't forget to close Color Editor by pressing Keep. Go once again to Ecosystem Editor and assign the corresponding color to each environment by selecting it using the Ecosystem Color button. Press it several times until the correct one appears. Then save the project and parameters again, as done previously. Motion Editor Now it's time to take care of the framing, so let's go to Modules and then to Motion Editor. An extremely feature-rich window will open. Following is the list of parameters regarding the Camera, position and other characteristics: <pre> -Camera Altitude: 7.0 -Camera Latitude: 36.075 -Camera Longitude: 112.133 -Focus Attitude: -2.0 -Focus Latitude: 36.275 -Focus Longitude: 112.386 -Camera : 512 → rendering window -Camera Y: 384 → rendering window -View Arc: 80 → View width in degrees -Sun Longitude: 172 -Sun Latitude: -0.9 -Haze Start: 3.8 -Haze Range: 78, 5 </pre> As soon as the values ​​shown in the relevant sliders have been modified, we will be ready to open the CamView window to observe the wireframe preview. Let's not consider all the controls that will appear. Well from the Motion Editor if you have selected Camera Altitude and open the CamView panel, you can change the height of the camera by holding down the right mouse button and moving the mouse up and down. To update the view, press the Terrain button in the adjacent window. As soon as you are convinced of the position, confirm again with Keep. You can carry out the same work with the other functions of the camera, such as Focus Altitude... Let's now see the next positioning step on the Camera map, but let's leave the CamView preview window open while we go to Modules to open the window at the same time MapView. We will thus be able to take advantage of the view from the other together with a subjective one. From the MapView window, select with the left mouse button and while it is pressed, move the Camera as desired. To update the subjective preview, always click on Terrain. While with the same procedure you can intervene on the direction of the camera lens, by selecting the cross and with the left button pressed you can choose the desired view. So with the pressure of Terrain I update the Preview. Possibly can enlarge or reduce the Map View using the Zoom button, for greater precision. Also write that the circle around the cameras indicates the beginning of the haze, there are two types (haze and fog) linked to the altitude. Would also add that the camera height is editable through the Motion Editor panel. The sun Let's see that changing the position of the sun from the Motion Editor. Press the SUN button at the bottom right and set the time and the date. Longitude and latitude are automatically obtained by the program. Always open the View Arc command from the Motion Editor panel, an item present in the Parameter List box. Once again confirm everything with Keep and then save again. Animation The animation part is not left-back and also occupies a window. The settings possibilities are enormous. A time line with dragging functions ("slide", "drag"...) comparable to that of LightWave completes this window. A small window is available for positioning the stars as a function of a date, in order to vary the seasons and their various events (and yes...). At the bottom of the "Motion-Editor", a "cam-view" function will give you access to a control panel. Different preview modes are possible. The rendering is also accessible through a window. No less than nine pages compose it. At this level, you will be able to determine the backup name of your images ("path"), the type of texture to be calculated, the resolution of the images, activate or deactivate functions such as the depth buffer ("zbuffer"), the blur, the background image, etc. Once all these parameters have been set, all you have to do is click on the "Render" button. For rendering go to Modules and then Render. Select the resolution, then under IMA select the name of the image. Move to FRA and indicate the level of fractal detail which of 4 is quite good. Then Keep to confirm and then reopen the window, pressing Render you will see the result. The image will be opened with any viewing program. Strengths: * Multi-window. * Quality of rendering. * Accuracy. * Opening, preview and rendering on CyberGraphX screen. * Extract / Convert Interp DEM, Import DLG, DXF, WDB and export LW map 3d formats * The "zbuffer" function. Weaknesses: * No OpenGL management * Calculation time. * No network computing tool. ====Writing CD / DVD - Frying Pan==== Can be backup DVDs (4GB ISO size limit due to use of FileInfoBlock), create audio cds from mp3's, and put .iso files on discs If using for the first time - click Drive button and Device set to ata.device and unit to 0 (zero) Click Tracks Button - Drive 1 - Create New Disc or Import Existing Disc Image (iso bin/cue etc.) - Session File open cue file If you're making a data cd, with files and drawers from your hard drive, you should be using the ISO Builder.. which is the MUI page on the left. ("Data/Audio Tracks" is on the right). You should use the "Data/Audio tracks" page if you want to create music cds with AIFF/WAV/MP3 files, or if you download an .iso file, and you want to put it on a cd. Click WRITE Button - set write speed - click on long Write button Examples Easiest way would be to burn a DATA CD, simply go to "Tracks" page "ISO Builder" and "ADD" everything you need to burn. On the "Write" page i have "Masterize Disc (DAO)", "Close Disc" and "Eject after Write" set. One must not "Blank disc before write" if one uses a CDR AUDIO CD from MP3's are as easy but tricky to deal with. FP only understands one MP3 format, Layer II, everything else will just create empty tracks Burning bootable CD's works only with .iso files. Go to "Tracks" page and "Data/Audio Tracks" and add the .iso ====odf==== Every ODF file is a collection of several subdocuments within a package (ZIP file), each of which stores part of the complete document. * content.xml – Document content and automatic styles used in the content. * styles.xml – Styles used in the document content and automatic styles used in the styles themselves. * meta.xml – Document meta information, such as the author or the time of the last save action. * settings.xml – Application-specific settings, such as the window size or printer information. To read document follow these steps: * Extracting .ods file. * Getting content.xml file (which contains sheets data). * Creating XmlDocument object from content.xml file. * Creating DataSet (that represent Spreadsheet file). * With XmlDocument select “table:table” elements, and then create adequate DataTables. * Parse child’s of “table:table” element and fill DataTables with those data. * At the end, return DataSet and show it in application’s interface. To write document follow these steps: * Extracting template.ods file (.ods file that we use as template). * Getting content.xml file. * Creating XmlDocument object from content.xml file. * Erasing all “table:table” elements from the content.xml file. * Reading data from our DataSet and composing adequate “table:table” elements. * Adding “table:table” elements to content.xml file. * Zipping that file as new .ods file. XLS file format The XLS file format contains streams, substreams, and records. These sheet substreams include worksheets, macro sheets, chart sheets, dialog sheets, and VBA module sheets. All the records in an XLS document start with a 2-byte unsigned integer to specify Record Type (rt), and another for Count of Bytes (cb). A record cannot exceed 8224 bytes. If larger than the rest is stored in one or more continue records. * Workbook stream **Globals substream ***BoundSheet8 record - info for Worksheet substream i.e. name, location, type, and visibility. (4bytes the lbPlyPos FilePointer, specifies the position in the Workbook stream where the sheet substream starts) **Worksheet substream (sheet) - Cell Table - Row record - Cells (2byte=row 2byte=column 2byte=XF format) ***Blank cell record ***RK cell record 32-bit number. ***BoolErr cell record (2-byte Bes structure that may be either a Boolean value or an error code) ***Number cell record (64-bit floating-point number) ***LabelSst cell record (4-byte integer that specifies a string in the Shared Strings Table (SST). Specifically, the integer corresponds to the array index in the RGB field of the SST) ***Formula cell record (FormulaValue structure in the 8 bytes that follow the cell structure. The next 6 bytes can be ignored, and the rest of the record is a CellParsedFormula structure that contains the formula itself) ***MulBlank record (first 2 bytes give the row, and the next 2 bytes give the column that the series of blanks starts at. Next, a variable length array of cell structures follows to store formatting information, and the last 2 bytes show what column the series of blanks ends on) ***MulRK record ***Shared String Table (SST) contains all of the string values in the workbook. ACCRINT(), ACCRINTM(), AMORDEGRC(), AMORLINC(), COUPDAYBS(), COUPDAYS(), COUPDAYSNC(), COUPNCD(), COUPNUM(), COUPPCD(), CUMIPMT(), CUMPRINC(), DB(), DDB(), DISC(), DOLLARDE(), DOLLARFR(), DURATION(), EFFECT(), FV(), FVSCHEDULE(), INTRATE(), IPMT(), IRR(), ISPMT(), MDURATION(), MIRR(), NOMINAL(), NPER(), NPV(), ODDFPRICE(), ODDFYIELD(), ODDLPRICE(), ODDLYIELD(), PMT(), PPMT(), PRICE(), PRICEDISC(), PRICEMAT(), PV(), RATE(), RECEIVED(), SLN(), SYD(), TBILLEQ(), TBILLPRICE(), TBILLYIELD(), VDB(), XIRR(), XNPV(), YIELD(), YIELDDISC(), YIELDMAT(), <pre> </pre> <pre> </pre> <pre> </pre> {{BookCat}} 1t7jxpy7q2oa7vh0j3uylwv03vj12gp 4671963 4671962 2026-09-23T12:47:58Z Jeff1138 301139 4671963 wikitext text/x-wiki ==Introduction== [[#Graphical Image Editing Art]] [[#Office Application]] [[#Audio]] [[#Misc Application]] [[#Games & Emulation]] [[#Application Guides]] [[#top|...to the top]] [[#top|...to the top]] Most apps can be opened on the Workbench (aka publicscreen pubscreen) which is the default display option but can offer a custom one set to your configurations (aka custom screen mode promotion). These custom ones tend to stack so the possible use of A-M/A-N method of switching between full screens and the ability to pull down screens as well If you are interested in creating or porting new software, see [http://en.wikibooks.org/wiki/Aros/Developer/Docs here] {| class="wikitable sortable" |- !width:30%;|Internet Applications !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1 (68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Web Online Browser [], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=network/browser Amelinium], Odyssey 2.0, [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1175&highlight=odyssey&rowstart=100 Odyssey 3.0], [], |<!--Amiga OS-->[https://juen.in/ Amelinium], [https://blog.alb42.de/programs/amifox/ amifox] with [https://github.com/alb42/wrp wrp server], IBrowse*, [https://github.com/zapek/Voyager Voyager], [https://github.com/amigazen/aweb3/ AWeb 3.6 src], [https://github.com/matjam/aweb AWeb Src], [http://aminet.net/package/comm/www/NetSurf-m68k-sources Netsurf], [], |<!--AmigaOS4-->[ Odyssey OWB], [ Timberwolf (Firefox port 2011)], [http://amigaworld.net/modules/newbb/viewtopic.php?forum=32&topic_id=32847 OWB-mui], [http://strohmayer.org/owb/ OWB-Reaction], IBrowse*, [http://os4depot.net/index.php?function=showfile&file=network/browser/aweb.lha AWeb], Voyager, [http://www.os4depot.net/index.php?function=browse&cat=network/browser Netsurf], |<!--MorphOS-->Wayfarer, [http://fabportnawak.free.fr/owb/ Odyssey OWB], [ Netsurf], IBrowse*, AWeb, [], |- |<!--Sub Menu-->YouTube, Dailymotion website downloading videos audio [https://github.com/yt-dlp/yt-dlp yt-dlp], [https://clipgrab.org/ clipgrab], |<!--AROS-->[], [https://blog.alb42.de/amitube/ Amitube], |<!--Amiga OS-->[https://blog.alb42.de/amitube/ Amitube], [ smtube], |<!--AmigaOS4-->[https://blog.alb42.de/amitube/ Amitube], getVideo, Tubexx, [https://github.com/walkero-gr/aiostreams aiostreams], |<!--MorphOS-->[ ytsearch], [https://blog.alb42.de/amitube/ Amitube], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 getVideo], Tubexx |- |<!--Sub Menu-->Old style E-mailing SMTP POP3 IMAP based |<!--AROS-->Emailinium, [http://archives.arosworld.org/index.php?function=browse&cat=network/email SimpleMail], [http://sourceforge.net/projects/simplemail/files/ src], [https://github.com/jens-maus/yam YAM] |<!--Amiga OS-->Emailinium, [http://sourceforge.net/projects/simplemail/files/ SimpleMail], [https://github.com/jens-maus/yam YAM] |<!--AmigaOS4-->SimpleMail, YAM, |<!--MorphOS--> SimpleMail, YAM |- |<!--Sub Menu-->IRC, ICB, |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/chat WookieChat], [https://sourceforge.net/projects/wookiechat/ Wookiechat src], [http://archives.arosworld.org/index.php?function=browse&cat=network/chat AiRcOS], Jabberwocky, |<!--Amiga OS-->[https://github.com/charabaruk/WookieChat Wookiechat], AmIRC |<!--AmigaOS4-->Wookiechat |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=5 Wookiechat], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 AmIRC], |- |<!--Sub Menu-->Instant Messaging IM like [https://github.com/BlitterStudio/amidon Hollywood lang based Mastodon client], BlueSky AT protocol, Facebook(TM), Twitter X (TM), Bitlbee IRC Gateway and others |<!--AROS-->[https://github.com/kaffeine1/telegram-amiga telegram-amiga], [http://archives.arosworld.org/index.php?function=browse&cat=network/chat jabberwocky], |<!--Amiga OS-->[http://amitwitter.sourceforge.net/ AmiTwitter], CLIMM, SabreMSN, [https://sourceforge.net/projects/ajabberwocky/ jabberwocky], |<!--AmigaOS4-->[http://amitwitter.sourceforge.net/ AmiTwitter], SabreMSN, |<!--MorphOS-->[http://amitwitter.sourceforge.net/ AmiTwitter], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 PolyglotNG], SabreMSN, |- |<!--Sub Menu-->Torrents |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/p2p ArTorr], |<!--Amiga OS--> |<!--AmigaOS4-->CTorrent, Transmission |<!--MorphOS-->MLDonkey, Beehive, [http://morphos.lukysoft.cz/en/vypis.php?kat=5 Transmission], CTorrent, |- |<!--Sub Menu-->FTP |<!--AROS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], MarranoFTP, [https://aminet.net/package/comm/tcp/wput-0.3.4c.i386-aros wput i386 c src] |<!--Amiga OS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], [http://aminet.net/package/comm/tcp/AmiFTP AmiFTP], AmiTradeCenter, ncFTP, [https://aminet.net/package/comm/tcp/sana2-tftpclient sana2 tftpclient c src] |<!--AmigaOS4-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], |<!--MorphOS-->[https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], [http://morphos.lukysoft.cz/en/vypis.php?kat=5 Pftp], [http://aminet.net/package/comm/tcp/AmiFTP-1.935-OS4 AmiFTP], |- |<!--Sub Menu-->WYSIWYG Web Site Editor |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Internet Radio Streaming Audio [http://www.gnu.org/software/gnump3d/ gnump3d], [http://www.icecast.org/ Icecast2] Server (Broadcast) and Client (Listen), [ mpd], [http://darkice.sourceforge.net/ DarkIce], [http://www.dyne.org/software/muse/ Muse], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=audio/misc], Mplayer (Icecast Client only), |<!--Amiga OS-->[https://github.com/sandlbn/TuneFinder TuneFinder C Src], [https://github.com/sandlbn/TuneFinderMUI TuneFinderMUI], [http://amigazeux.net/anr/ AmiNetRadio], [https://github.com/boingball/MintAMP MintAMP], [], |<!--AmigaOS4-->[http://www.tunenet.co.uk/ Tunenet], |<!--MorphOS-->Mplayer, AmiNetRadio, |- |<!--Sub Menu-->VoIP (Voice over IP) with SIP Client (Session Initiation Protocol) or Asterisk IAX2 Clients Softphone (skype like) |<!--AROS--> |<!--Amiga OS-->AmiPhone with Speak Freely, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Weather Forecast |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ WeatherBar], [http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench AWeather], [] |<!--Amiga OS-->[http://amigazeux.net/wetter/ Wetter], [https://github.com/emartisoft/AmiWeatherForecasts AmiWeatherForecasts src], |<!--AmigaOS4-->[http://os4depot.net/?function=showfile&file=utility/workbench/flipclock.lha FlipClock], |<!--MorphOS-->[http://amigazeux.net/wetter/ Wetter], |- |<!--Sub Menu-->Street Road Maps Route Planning GPS Tracking |<!--AROS-->[https://blog.alb42.de/programs/muimapparium/ MuiMapparium] [https://build.alb42.de/ Build of MuiMapp versions], |<!--Amiga OS-->AmiAtlas*, UKRoutePlus*, [http://blog.alb42.de/ AmOSM], |<!--AmigaOS4--> |<!--MorphOS-->[http://blog.alb42.de/programs/mapparium/ Mapparium], |- |<!--Sub Menu-->Clock and Date setting from the internet by network time protocol (NTP) [https://www.timeanddate.com/worldclock/ World Clock], [http://www.time.gov/ old standard NIST Internet Time Servers], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=network/misc ntpsync], [https://archives.arosworld.org/?function=showfile&file=utility/workbench/amitimekeeper.i386-aros.lha amitimekeeper with c src], [PiNTP], [], |<!--Amiga OS-->ntpsync, [http://aminet.net/package/util/cdity/AmiTimeKeeper amitimekeeper], [http://aminet.net/comm/misc/netclock netclock], [https://aminet.net/package/comm/net/sntp sntp], [http://aminet.net/package/util/time/ScreenTime ScreenTime], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Newsgroups |<!--AROS--> |<!--Amiga OS-->[http://newscoaster.sourceforge.net/ Newscoaster], [https://github.com/jens-maus/newsrog NewsRog], [ WorldNews], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->RSS |<!--AROS--> |<!--Amiga OS-->[https://github.com/Team-Boingo/AmiRSS AmiRSS src] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->AI |<!--AROS--> |<!--Amiga OS-->[https://github.com/murinsel/AmigaAI Claude], [https://github.com/geekychris/amiga_mcp AI on host machine], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->BBS |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. ==Graphical Image Editing Art== {| class="wikitable sortable" |- !width:30%;|Image Editing !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Pixel Raster Artwork [https://github.com/LibreSprite/LibreSprite LibreSprite based on GPL aseprite], [https://github.com/abetusk/hsvhero hsvhero], [], |<!--AROS-->[https://sourceforge.net/projects/zunetools/files/ZunePaint/ ZunePaint], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit LunaPaint], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit GrafX2], [ LodePaint needs OpenGL], |<!--Amiga OS-->[http://www.amigaforever.com/classic/download.html PPaint], GrafX2, [https://github.com/grovdata/Amiga_Sources/blob/master/software.md DeluxePaint], [http://www.amiforce.de/perfectpaint/perfectpaint.php PerfectPaint], Zoetrope, Brilliance2*, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=graphics/edit LodePaint], GrafX2, |<!--MorphOS-->Sketch, Pixel*, GrafX2, [http://morphos.lukysoft.cz/en/vypis.php?kat=3 LunaPaint] |- |<!--Sub Menu-->Image viewing |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ ZuneView], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer LookHere], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer LoView], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer PicShow] , [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album], |<!--Amiga OS-->PicShow, PicView, Photoalbum, |<!--AmigaOS4-->WarpView, PicShow, flPhoto, Thumbs, [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 ShowGirls], [http://amigaworld.net/modules/newbb/viewtopic.php?mode=viewtopic&topic_id=31400&forum=32&start=80&viewmode=flat&order=0#583458 Picture Album] |- |<!--Sub Menu-->Photography retouching / Image Manipulation like Photoshop(tm) |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit RNOEffects], |<!--Amiga OS-->[ Tecsoft Video Paint aka TVPaint], Photogenics*, ArtEffect*, ImageFX*, XiPaint, fxPaint, ImageMasterRT, Opalpaint, |<!--AmigaOS4-->WarpView, flPhoto, [http://www.os4depot.net/index.php?function=browse&cat=graphics/edit Photocrop] |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 ShowGirls], ImageFX*, |- |<!--Sub Menu-->Manage RAW picture folder galleries like Darktable, RAWtherapy, etc |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Graphic Format Converter - ICC profile support sRGB, Adobe RGB, XYZ and linear RGB |<!--AROS--> |<!--Amiga OS-->GraphicsConverter, ImageStudio, [http://www.coplabs.org/artpro.html ArtPro] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Thumbnail Generator [], |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/ ZuneView], [http://archives.arosworld.org/index.php?function=browse&cat=utility/shell Thumbnail Generator] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Icon Editor |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/iconedit Archives], [http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench Icon Toolbox], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=graphics/iconedit IconEditor] |<!--MorphOS--> |- |<!--Sub Menu-->2D Pixel Art Animation |<!--AROS-->Lunapaint |<!--Amiga OS-->PPaint, AnimatED, Scala*, GoldDisk MovieSetter*, Walt Disney's Animation Studio*, ProDAD*, [https://github.com/historicalsource/DeluxePaint DeluxePaint src], Brilliance |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=3 Titler] |- |<!--Sub Menu-->2D SVG based MovieSetter type |<!--AROS--> |<!--Amiga OS-->MovieSetter*, Fantavision* |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Morphing |<!--AROS-->[ GLMorph] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->2D Cad (qcad->LibreCAD, etc.) |<!--AROS--> |<!--Amiga OS-->Xcad, MaxonCAD |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Cad like FreeCad, BRL-CAD, OpenSCAD, AvoCADo, etc. using dxf, obj (vertices), blend, |<!--AROS--> |<!--Amiga OS-->XCad3d*, DynaCADD*, [https://aminet.net/package/gfx/3d/Cycas178_EN Cycas]*, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Model Rendering of glft (json) gbl (png jpg), usdz (USD files with materials, textures, and animations), FBX Filmbox is a proprietary Autodesk format, |<!--AROS-->POV-Ray |<!--Amiga OS-->[http://www.discreetfx.com./amigaproducts.html CINEMA 4D]*, POV-Ray, Lightwave3D*, Real3D*, Caligari24*, Reflections/Monzoom*, [https://github.com/privatosan/RayStorm Raystorm src], Tornado 3D, [https://github.com/AlphaPixel/Eric-Graham-1987-Juggler-Raytracer-1.0 Eric-Graham-1987-Juggler-Raytracer-1.0] |<!--AmigaOS4-->Blender, POV-Ray, Yafray |<!--MorphOS-->Blender, POV-Ray, Yafray |- |<!--Sub Menu-->3D Format Converter [], [], |<!--AROS-->[https://archives.arosworld.org/?function=showfile&file=graphics/convert/ 3doc.i386-aros], [], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=showfile&file=graphics/convert/ivcon.lha IVCon] |<!--MorphOS--> |- |<!--Sub Menu-->Screen grabbing display |<!--AROS-->[ Screengrabber], [http://archives.arosworld.org/index.php?function=browse&cat=utility/misc snapit], [http://archives.arosworld.org/index.php?function=browse&cat=video/record screen recorder], [] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Grab graphics music from apps [https://github.com/Malvineous/ripper6 ripper6], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Office Application== {| class="wikitable sortable" |- !width:30%;|Office !width:10%;|AROS (x86) !width:10%;|[http://en.wikipedia.org/wiki/Amiga_software Commodore-Amiga OS 3.1] (68k) !width:10%;|[http://en.wikipedia.org/wiki/AmigaOS_4 Hyperion OS4] (PPC) !width:10%;|[http://en.wikipedia.org/wiki/MorphOS MorphOS] (PPC) |- |<!--Sub Menu-->Office Suite |<!--AROS--> |<!--Amiga OS-->[ Softwood Final Office], [ Wordworth Office], [ Digita Office], [ The Works!], [ Europress Mini Office], [], [ Papyrus Office Demo], |<!--AmigaOS4--> |<!--MorphOS-->[ Papyrus Office], |- |<!--Sub Menu-->Word-processing |<!--AROS-->[https://finalwriter.godaddysites.com/ Final Writer 7*], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1995&rowstart=20&pid=12668#post_12668 Slovo], [https://github.com/sodero/MUI-Vim/releases MUI-Vim], [https://archives.arosworld.org/index.php?function=browse&cat=office/wordprocessing Cinnamon Writer], [], |<!--AmigaOS-->[ Softwood FinalCopy II*], Haage AmigaWriter*, Digita WordWorth*, Softwood FinalWriter*, Micro-Systems Excellence 3*, Arnor Protext, Rashumon, [ InterWord], [ KindWords], [WordPerfect], [ New Horizons Flow], [ CygnusEd Pro], [ Micro-systems Scribble], |<!--AmigaOS4-->AbiWord, [ CinnamonWriter], |<!--MorphOS-->[ Cinnamon Writer], [http://www.meta-morphos.org/viewtopic.php?topic=1246&forum=53 scriba], [http://morphos.lukysoft.cz/en/index.php Papyrus Office], |- |<!--Sub Menu-->Spreadsheets |<!--AROS-->[https://blog.alb42.de/programs/leu/ Leu], [https://archives.arosworld.org/index.php?function=browse&cat=office/spreadsheet ], |<!--AmigaOS-->[https://aminet.net/package/biz/spread/ignition-src Ignition Src 1.3], [MaxiPlan 500 Plus], [OXXI Plan/IT v2.0 Speadsheet], [ Superplan], [ Creative Developments TurboCalc], [ ProCalc], [ InterSpread], [Digita DGCalc], [ Gold Disk Advantage], [ Micro-systems Analyze!] |<!--AmigaOS4-->Gnumeric, [https://ignition-amiga.sourceforge.net/ Ignition], |<!--MorphOS-->[ ignition], [http://morphos.lukysoft.cz/en/vypis.php Papyrus Office], |- |<!--Sub Menu-->Presentations |<!--AROS-->[http://www.hollywoood-mal.com/ Hollywood]*, |<!--Amiga OS-->[http://www.hollywoood-mal.com/ Hollywood]*, [https://github.com/evaneykelen/mediapoint-amiga MediaPoint C and asm], PointRider, Scala*, |<!--Amiga OS4-->[http://www.hollywoood-mal.com/ Hollywood]*, PointRider |<!--MorphOS-->[http://www.hollywoood-mal.com/ Hollywood]*, PointRider |- |<!--Sub Menu-->Databases |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=office/database BeeBase], |<!--Amiga OS-->Precision Superbase 4 Pro*, Arnor Prodata*, [https://sourceforge.net/projects/beebase/ BeeBase], Datastore, FinalData*, AmigaBase, Fiasco, Twist2*, [Digita DGBase], [], |<!--AmigaOS4-->BeeBase, SQLite, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=6 BeeBase], |- |<!--Sub Menu-->PDF Viewing and editing digital signatures |<!--AROS-->[https://github.com/tomaszstaniak/aros-foliopdf aros-foliopdf version of mupdf], [http://sourceforge.net/projects/arospdf/ ArosPDF via splash], [https://github.com/wattoc/AROS-vpdf vpdf], |<!--Amiga OS-->APDF |<!--AmigaOS4-->AmiPDF |<!--MorphOS-->APDF, vPDF, |- |<!--Sub Menu-->Note Taking markdown support like Obsidian like, joplin, OneNote, EverNotes, xournalpp, etc |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Study and analyse, collect, organize, annotate, cite, and share |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->PIM Personal Information Manager - Day Diary Planner Calendar App Filofax like |<!--AROS-->[ ], [ ], [ ], |<!--Amiga OS-->Digita Organiser*, On The Ball, Everyday Organiser, [ Contact Manager], |<!--AmigaOS4-->AOrganiser, |<!--MorphOS-->[http://polymere.free.fr/orga_en.html PolyOrga], |- |<!--Sub Menu-->Accounting |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=office/misc ETB], LoanCalc, [ ], [ ], [ ], |[ Digita Home Accounts2], Accountant, Small Business Accounts, Account Master, [ Amigabok], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Project Management Research |<!--AROS--> |<!--Amiga OS-->SuperGantt, SuperPlan, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Desktop |<!--AROS-->Wanderer, Scalos, Workbook, DOpus5, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->[https://github.com/zapek/Ambient Ambient Src] |- |<!--Sub Menu-->System Wide Search |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=utility/filetool Finder], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System Wide Dictionary - multilingual [http://sourceforge.net/projects/babiloo/ Babiloo], [http://code.google.com/p/stardict-3/ StarDict], |<!--AROS-->[ ], |<!--AmigaOS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System wide Thesaurus - multi lingual |<!--AROS-->[ ], |Kuma K-Roget*, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Sticky Desktop Notes (post it type) |<!--AROS-->[http://aminet.net/package/util/wb/amimemos.i386-aros AmiMemos], [https://aminet.net/package/util/wb/amimemos.src-aros AmiMemos Src], [], |<!--Amiga OS-->[http://aminet.net/package/util/wb/StickIt-2.00 StickIt v2], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->DTP Desktop Publishing |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit RNOPublisher], |<!--Amiga OS-->[http://pagestream.org/ Pagestream]*, Professional Pro Page*, Saxon Publisher, Pagesetter, PenPal, |<!--AmigaOS4-->[http://pagestream.org/ Pagestream]* |<!--MorphOS-->[http://pagestream.org/ Pagestream]* |- |<!--Sub Menu-->Printing |<!--AROS-->Postscript 3 laser printers, [https://github.com/bohunamiga/MintPRINT MintPRINT AirPrint IPP], [ Ghostscript], [], |<!--Amiga OS-->[https://github.com/boingball/MintPRINT MintPRINT IPP], [https://github.com/Andiweli/AmiAirprint AmiAirprint], [http://www.irseesoft.de/tp_what.htm TurboPrint]*, [ GutenPrint], [https://aminet.net/package/comm/tcp/NetPrinter NetPrinter LPR], [], [], |<!--AmigaOS4-->(some native drivers), |<!--MorphOS-->early TurboPrint included, [https://aminet.net/package/comm/tcp/NetPrinter NetPrinter LPR], |- |<!--Sub Menu-->Scanning |<!--AROS-->[ SCANdal], [], |<!--Amiga OS-->FxScan*, ScanQuix*, [https://github.com/boingball/MintSCAN MintSCAN], |<!--AmigaOS4-->SCANdal (Sane) |<!--MorphOS-->SCANdal |- |<!--Sub Menu-->OCR |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/convert gOCR] |<!--AmigaOS--> |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos-files.net/categories/office/text Tesseract] |- |<!--Sub Menu-->Text Editing |<!--AROS-->Jano Editor (already installed as Editor), [http://archives.arosworld.org/index.php?function=browse&cat=development/edit EdiSyn], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit Annotate], [https://archives.arosworld.org/index.php?function=browse&cat=development/edit Vim], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit FrexxEd] [https://github.com/vidarh/FrexxEd src], [ NoWinEd], |<!--Amiga OS-->[https://aminet.net/package/text/edit/TurboText20 TurboText20 ttx], Annotate, MicroGoldED/CubicIDE*, CygnusED*, Protext*, NoWinED, |<!--AmigaOS4-->Notepad, Annotate, CygnusED*, NoWinED, |<!--MorphOS-->MorphOS ED, NoWinED, GoldED/CubicIDE*, CygnusED*, Annotate, |- |<!--Sub Menu-->Office Fonts [http://sourceforge.net/projects/fontforge/files/fontforge-source/ Font Designer] |<!--AROS-->[ ], [ ], |<!--Amiga OS-->TypeSmith*, SaxonScript (GetFont Adobe Type 1), |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Drawing Vector |<!--AROS-->[http://sourceforge.net/projects/amifig/ ZuneFIG previously AmiFIG], [https://github.com/serk118/designworks-aros designworks aros 64bit] |<!--Amiga OS-->Drawstudio*, ProVector*, ArtExpression*, Professional Draw*, AmiFIG, MetaView, [https://gitlab.com/amigasourcecodepreservation/designworks Design Works Src], [], |<!--AmigaOS4-->MindSpace, [http://www.os4depot.net/index.php?function=browse&cat=graphics/edit amifig], |<!--MorphOS-->SteamDraw, [http://aminet.net/package/gfx/edit/amifig amiFIG], |- |<!--Sub Menu-->video conferencing (jitsi) |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->source code hosting |<!--AROS-->Gitlab, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Remote Desktop (server) |<!--AROS-->[http://sourceforge.net/projects/zunetools/files/VNC_Server ArosVNCServer], |<!--Amiga OS-->[http://s.guillard.free.fr/AmiVNC/AmiVNC.htm AmiVNC], [http://dspach.free.fr/amiga/avnc/index.html AVNC] |<!--AmigaOS4-->[http://s.guillard.free.fr/AmiVNC/AmiVNC.htm AmiVNC] |MorphVNC, vncserver |- |<!--Sub Menu-->Remote Desktop (client) login and connect to another machine |<!--AROS-->[https://sourceforge.net/projects/zunetools/files/VNC_Client/ ArosVNC], [http://archives.arosworld.org/index.php?function=browse&cat=network/misc rdesktop], |<!--Amiga OS-->[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://dspach.free.fr/amiga/vva/index.html VVA], [http://www.hd-zone.com/ RDesktop] |<!--AmigaOS4-->[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://www.hd-zone.com/ RDesktop] |[http://twinvnc.free.fr/index.php?menu=01&lang=eng TwinVNC], [http://www.hd-zone.com/ RDesktop] |- |<!--Sub Menu-->notifications |<!--AROS--> |<!--Amiga OS-->Ranchero |<!--AmigaOS4-->Ringhio |<!--MorphOS-->MagicBeacon |- |<!--Sub Menu-->Biometric facial logins and fingerprint security features |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Audio== {| class="wikitable sortable" |- !width:30%;|Audio !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Playing playback Audio like MP3, [https://github.com/chrg127/gmplayer NSF], [https://github.com/kode54/lazyusf miniusf .usflib] [https://gitlab.com/kode54/psflib with pfslib], [], [], etc |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/play Mplayer], [ HarmonyPlayer hp], [http://www.a500.org/downloads/audio/index.xhtml playcdda] CDs, [ WildMidi Player], [https://bszili.morphos.me/ UADE mod player], [], [ RNOTunes], [ mp3Player], [], |<!--Amiga OS-->AmiNetRadio, AmigaAmp, playOGG, [https://codeberg.org/tygre/amimodradio amimodradio] |<!--AmigaOS4-->TuneNet, SimplePlay, AmigaAmp, TKPlayer |AmiNetRadio, Mplayer, Kaya, AmigaAmp |- |<!--Sub Menu-->Editing Audio |<!--AROS-->[ Audio Evolution 4] |<!--Amiga OS-->[https://sourceforge.net/projects/hd-rec/ HD-Rec Src], [http://www.sonicpulse.de/eng/news.html SoundFX], [ Samplitude], |<!--AmigaOS4-->[https://sourceforge.net/projects/hd-rec/ HD-Rec], AmiSoundED, [http://os4depot.net/?function=showfile&file=audio/record/audioevolution4.lha Audio Evolution 4] |[http://www.hd-rec.de/HD-Rec/index.php?site=home HD-Rec], |- |<!--Sub Menu-->Editing Tracker Music |<!--AROS-->[https://github.com/hitchhikr/protrekkr Protrekkr], [ Schism Tracker], [http://archives.arosworld.org/index.php?function=browse&cat=audio/tracker MilkyTracker], [http://www.hivelytracker.com/ HivelyTracker], [ Radium in AROS already], [http://www.a500.org/downloads/development/index.xhtml libMikMod], |<!--Amiga OS-->MilkyTracker, HivelyTracker, DigiBooster, Octamed SoundStudio, [https://github.com/elindstrom/soundtracker soundtracker], |<!--AmigaOS4-->MilkyTracker, HivelyTracker, GoatTracker |MilkyTracker, GoatTracker, DigiBooster, |- |<!--Sub Menu-->Editing Music [], [https://github.com/kmatheussen/camd CAMD] and/or staves and musical notes on manuscript [https://github.com/ratchov/midish midish] midi sequencer |<!--AROS-->[http://bnp.hansfaust.de/ Bars and Pipes], [], [], |<!--Amiga OS-->[http://bnp.hansfaust.de/ Bars'n'Pipes], MusicX* David "Talin" Joiner & Craig Weeks (for Notator-X), Deluxe Music Construction Set DMCS2*, [https://github.com/timoinutilis/midi-sequencer-amigaos Horny c Src] [https://github.com/kas1e/midi-sequencer-amigaos/tree/master/HornyGCC HornyGCC OS4 src] [https://github.com/capehill/midi-sequencer-amigaos Horny OS4 fork src] [https://www.amigans.net/modules/newbb/viewtopic.php?start=0&topic_id=8143&order=ASC&status=&mode=0 OS4 thread], HD-Rec, [https://aminet.net/package/mus/midi/dominatorV1_51 Dominator], [https://github.com/royaltm/Amiga-midiIn Amiga-midiIn], [ Aegis Sonix 2.0] |<!--AmigaOS4-->[https://sourceforge.net/p/hd-rec/code/HEAD/tree/ HD-Rec Src], Rockbeat, [http://bnp.hansfaust.de/download.html Bars'n'Pipes], [https://github.com/gooofy/freeaction Horny OS4 src fork], Audio Evolution 4, |<!--MorphOS-->Bars'n'Pipes, |- |<!--Sub Menu-->Sound Sampling |<!--AROS-->[ Advanced AHI Recorder all], [https://archives.arosworld.org/index.php?function=browse&cat=audio/record Audio Evolution 4], [http://www.imica.net/SitePortalPage.aspx?siteid=1&did=162 Quick Record], [https://archives.arosworld.org/index.php?function=browse&cat=audio/misc SOX to get AIFF 16bit files], [https://github.com/aros-development-team/AROS/tree/master/workbench/tools/AHIRecord AHIRecord], |<!--Amiga OS-->[https://aminet.net/package/mus/edit/AudioEvolution3_src Audio Evolution 3 c src], [ Samplitude]*, Audiomaster IV*, |<!--AmigaOS4-->[https://github.com/timoinutilis/phonolith-amigaos phonolith c src], HD-Rec, Audio Evolution 4, |<!--MorphOS-->[https://sourceforge.net/p/hd-rec/code/HEAD/tree/ HD-Rec Src], Audio Evolution 4, |- |<!--Sub Menu-->Audio Processing like easyeffects so having limiter, compressor, convolver, equalizer and auto volume and many other plugins |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Live Looping or Audio Misc - Groovebox like |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->CD/DVD burn |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=utility IsoTools], [https://code.google.com/p/amiga-fryingpan/ FryingPan], |<!--Amiga OS-->FryingPan, [ MakeCD], |<!--AmigaOS4-->FryingPan, AmiDVD, |<!--MorphOS-->[http://www.amiga.org/forums/printthread.php?t=58736 FryingPan], Jalopeano, |- |<!--Sub Menu-->CD/DVD audio rip |<!--AROS-->Lame, [http://www.imica.net/SitePortalPage.aspx?siteid=1&cfid=0&did=167 Quick CDrip], |<!--Amiga OS-->Lame, |<!--AmigaOS4-->Lame, |<!--MorphOS-->Lame, |- |<!--Sub Menu-->MP3 v1 and v2 Tagger |<!--AROS-->id3ren (v1), [http://archives.arosworld.org/index.php?function=browse&cat=audio/edit mp3info], |<!--Amiga OS--> |<!--AmigaOS4--> | |- |<!--Sub Menu-->Audio Convert |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=audio/misc Sox], [], |<!--Amiga OS-->[http://aminet.net/package/mus/misc/SoundBox SoundBox], [http://aminet.net/package/mus/misc/SoundBoxKey SoundBox Key], [http://aminet.net/package/mus/edit/SampleE SampleE], sox |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->DJ mixing jamming |<!--AROS--> |<!--Amiga OS-->[https://github.com/djh0ffman/PT1210 Hoffman PT1210 DJ tracker], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Radio Automation Software [http://www.rivendellaudio.org/ Rivendell], [http://code.campware.org/projects/livesupport/report/3 Campware LiveSupport], [http://www.sourcefabric.org/en/airtime/ SourceFabric AirTime], [http://www.ohloh.net/p/mediabox404 MediaBox404], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Speakers Audio Sonos Mains AC networked wired controlled *2005 ZP100 with ZP80 *2008 Zoneplayer ZP120 (multi-room wireless amp) ZP90 receiver only with CR100 controller, *2009 ZonePlayer S5, *2010 BR100 wireless Bridge (no support), *2011 Play:3 *2013 Bridge (no support), Play:1, *2016 Arc, Play:1, *Beam (Gen 2), Playbar, Ray, Era 100, Era 300, Roam, Move 2, *Sub (Gen 3), Sub Mini, Five, Amp S2 |<!--AROS-->SonosController |<!--Amiga OS-->SonosController |<!--AmigaOS4-->SonosController |<!--MorphOS-->SonosController |- |<!--Sub Menu-->Smart Speakers |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Video Creativity and Production== {| class="wikitable sortable" |- !width:30%;|Video !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Playing Video |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/play Mplayer], [ VAMP], [http://www.a500.org/downloads/video/index.xhtml CDXL player], [http://www.a500.org/downloads/video/index.xhtml IffAnimPlay], [], |<!--Amiga OS-->Frogger*, AMP2, MPlayer, RiVA*, MooViD*, |<!--AmigaOS4-->DvPlayer, MPlayer |<!--MorphOS-->MPlayer, Frogger, AMP2, VLC |- |<!--Sub Menu-->Streaming Video and game streaming like OBS studio, Parsec, [https://github.com/lizardbyte/sunshine sunshine], [https://github.com/moonlight-stream/moonlight-qt moonlight], etc |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Playing DVD |<!--AROS-->[http://a-mc.biz/ AMC]*, Mplayer |<!--Amiga OS-->AMP2, Frogger |<!--AmigaOS4-->[http://a-mc.biz/ AMC]*, DvPlayer*, AMP2, |<!--MorphOS-->Mplayer |- |<!--Sub Menu-->Screen Recording |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=video/record Screenrecorder], [ ], [ ], [ ], [ ], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->Screenrecorder, |- |<!--Sub Menu-->Create Edit Individual Video - Amiga like OSs have no pro NLE |<!--AROS-->[ Mencoder], [ Quick Videos], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/edit AVIbuild], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/misc FrameBuild], FFMPEG, |<!--Amiga OS-->[ MainConcept Mainactor Broadcast*], [http://en.wikipedia.org/wiki/Video_Toaster Video Toaster*] with [https://discreetfx.com/openvideotoaster.html some c src], MacroSystem MovieShop 4.3*, proDAD Adorage*, [ IOSpirit VHI studio]*, [Gold Disk ShowMaker], [], |<!--AmigaOS4-->FFMpeg/GUI |<!--MorphOS-->Blender, Mencoder, FFmpeg |- |<!--Sub Menu-->Subtitle editor |<!--AROS-->[https://aminet.net/package/text/edit/Slarti_Arosx86ABIv0 Slarti_Arosx86ABIv0], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->IP-based video production workflows with High Dynamic Range (HDR), 10-bit color collaborative NDI, |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Blogging like Lemmy or kbin |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR face recognition for Vtubers |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR chatting Live2D models with Cubism type editor or [https://github.com/AyagamiDev/ayagami ayagami] like with zipped moc3 with model metadata (model3, cdi3) <pre> Model data (cmo3) Basic motions (can3) Background image (png) Set of files for embedding (runtime folder) • Model data (moc3) • Motion data (motion3.json) • Model settings file (model3.json) • Physics settings file (physics3.json) • Display auxiliary file (cdi3.json) </pre> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->VR chatting chatters .VRML models - standardized 3D file format for VR avatars |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->V-tubers V-tubing like Vseeface with Openseeface tracker or Vpuppr (virtual puppet project) for online live 2d / 3d art models rigging rigged LIV |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. [[#top|...to the top]] ==Misc Application== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1 (68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->File Management |<!--AROS-->DOpus4, [https://github.com/BlitterStudio/dopus5 DOpus Magellan aka DOpus 5], [ Scalos], [ Diskmaster], |<!--Amiga OS-->DOpus2, DOpus 4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], ClassAction, FileMaster, [http://www.amiga.org/forums/showthread.php?t=4897 DirWork 2]*, [https://github.com/RudolphRiedel/DiskMaster2 DiskMaster2 src], |<!--AmigaOS4-->DOpus4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], Filer, AmiDisk |<!--MorphOS-->DOpus4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], |- |<!--Sub Menu-->File Verification / Repair |<!--AROS-->[https://arosarchives.os4depot.net/index.php?function=browse&cat=utility md5sum], [https://arosarchives.os4depot.net/index.php?function=browse&cat=utility/filetool asum], [http://archives.arosworld.org/index.php?function=browse&cat=utility/filetool workpar2] (PAR2), [http://zakalwe.fi/~shd/foss/cksfv/files/ compile cksfv from website], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->Par2, |- |Application Installer |<!--AROS-->[], [ InstallerNG], |<!--Amiga OS-->InstallerNG, Grunch, |<!--AmigaOS4-->Jack |<!--MorphOS-->Jack |- |<!--Sub Menu-->Compression archiver [https://github.com/FS-make-simple/paq9a paq9a], [], |<!--AROS-->XAD system is a toolkit designed for handling various file and disk archiver |<!--Amiga OS--> |<!--AmigaOS4-->[https://aminet.net/package/util/pack/decrunchmania_os4 Crunchmania CrM2 depacker], |<!--MorphOS--> |- |<!--Sub Menu-->Binary Hexadecimal Editor |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=development/edit Zaphod], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Filesystem Partition Editor formatter Disk Management |<!--AROS-->[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1440&highlight=partition&pid=8821#post_8821 QuickPart], [ HDToolBox] |<!--Amiga OS-->[https://github.com/stefanskotte/hdpart hdpart], [https://github.com/ChuckyGang/AmiPart AmiPart], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Filesystem Repair and backups |<!--AROS-->ArSFSDoctor, |<!--Amiga OS-->[https://aminet.net/package/disk/bakup/quarterback_src Quarterback Tools C and asm src], [ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->System Disk check, integrity and history [https://github.com/smartmontools/smartmontools smart tools], [], |<!--AROS--> |<!--Amiga OS-->[], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Multiple File renaming |<!--AROS-->DOpus 4 or 5, |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Anti Virus |<!--AROS--> |<!--Amiga OS-->VChecker, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Random Wallpaper Desktop changer [ DOpus5], [ Scalos], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Alarm Clock, Timer, Stopwatch, Countdown |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/workbench DClock], [http://aminet.net/util/time/AlarmClockAROS.lha AlarmClock], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} ==Misc Application 2== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->C/C++ IDE Integrated Development |<!--AROS-->[https://sourceforge.net/projects/aidea/ AIDEa], [ Murks], [], |<!--Amiga OS-->[http://devplex.awardspace.biz/cubic/index.html Cubic IDE]*, [ StormC], [https://github.com/jens-maus/amide amide], [], |<!--AmigaOS4-->CodeBench , [https://gitlab.com/boemann/codecraft CodeCraft], |<!--MorphOS-->[http://devplex.awardspace.biz/cubic/index.html Cubic IDE]*, |- |<!--Sub Menu-->C/C++ Text Editors |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit FrexxEd], [https://github.com/vidarh/FrexxEd FrexxEd src], [http://archives.arosworld.org/index.php?function=browse&cat=utility/text/edit Annotate] with [https://www.onyxsoft.se/files/annotate_src.lha src], |<!--Amiga OS-->[ Protext], [ CED], [], |<!--AmigaOS4--> |<!--MorphOS-->[https://www.onyxsoft.se/annotate.html Annotate], |- |<!--Sub Menu-->Repository |<!--AROS-->[ Git] |<!--Amiga OS--> |<!--AmigaOS4-->Git |<!--MorphOS--> |- |<!--Sub Menu-->BASIC Computer Language |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=development/language Basic4SDL], [ Ace Basic], [ X-AMOS], [SDLBasic], [ Alvyn], |<!--Amiga OS-->[http://www.amiforce.de/main.php Amiblitz 3] with [https://github.com/AmiBlitz/AmiBlitz3 Asm src], [http://amos.condor.serverpro3.com/AmosProManual/contents/c1.html Amos Pro] with [https://github.com/AmiDARK/AmosProfessionalUnity-Official-Releases Asm src], [http://aminet.net/package/dev/basic/ace24dist ACE Basic], [https://github.com/gooofy/aqb aqb], [], |<!--AmigaOS4--> |<!--MorphOS-->sdlBasic |- |<!--Sub Menu-->Computer Languages Translation [https://tetracorp.github.io/guide/reverse-engineering-amiga.html], [https://amigasourcecodepreservation.gitlab.io/amiga-assembler-insider-guide/], [https://github.com/kermitfrog/Amiga-Re-Engineering Rust, Ghidra and FS-UAE], |<!--AROS--> |<!--Amiga OS-->[https://bitbucket.org/rhinoid/convert68000toc/src/main/ convert m68k seka asm-one to c], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Gui Creators |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=development/guitool MuiBuilder], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS-->[ MuiBuilder], |- |<!--Sub Menu-->Catalog .cd .ct Custom App Language Editors |<!--AROS-->FlexCat, [https://archives.arosworld.org/index.php?function=browse&cat=utility Flexcat GUI], [], |<!--Amiga OS-->[http://www.geit.de/deu_simplecat.html SimpleCat], FlexCat |<!--AmigaOS4-->[http://aminet.net/package/dev/misc/simplecat SimpleCat], FlexCat |<!--MorphOS-->[http://www.geit.de/deu_simplecat.html SimpleCat], FlexCat |- |<!--Sub Menu-->Cross Development |<!--AROS-->[], [], |<!--Amiga OS-->[https://github.com/geekychris/amiga_mcp amiga_mcp], [https://github.com/mbergmann-sh/AmigaED4-IDE AmigaED4-IDE], [https://lemonspawn.com/turbo-rascal-syntax-error-expected-but-begin/ Turbo Rascal], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. ==Misc Application 3== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->System |<!--AROS-->[ SysExplorer], [ SysMon], [ Scout], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Terminals Shells CLIs |<!--AROS-->[https://tomaszstaniak.com/aros-term/ aros-term], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->OSK On Screen Keyboard |<!--AROS-->[], |<!--Amiga OS-->[https://aminet.net/util/wb/OSK.lha OSK] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Screen Magnifier Magnifying Glass Magnification |<!--AROS-->[http://www.onyxsoft.se/files/zoomit.lha ZoomIT], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Comic Book CBR CBZ format reader viewer |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer comics], [http://archives.arosworld.org/index.php?function=browse&cat=graphics/viewer comicon], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Ebook Reader |<!--AROS-->[https://blog.alb42.de/programs/#legadon Legadon EPUB],[] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Ebook Converter |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Text to Speech tts [https://github.com/JonathanFly/bark-installer Bark], [], |<!--AROS-->[ Echo " " >SPEAK:A1 inbuilt], [http://archives.arosworld.org/index.php?function=browse&cat=audio/misc flite], |<!--Amiga OS-->[http://www.text2speech.com translator], [https://github.com/sidick/narrator.wyoming narrator.wyoming], [], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=search&tool=simple FLite] |<!--MorphOS-->[http://se.aminet.net/pub/aminet/mus/misc/ FLite] |- |<!--Sub Menu-->Speech Voice Recognition Dictation - [http://sourceforge.net/projects/cmusphinx/files/ CMU Sphinx], [http://julius.sourceforge.jp/en_index.php?q=en/index.html Julius], [http://www.isip.piconepress.com/projects/speech/index.html ISIP], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Speech Voice Changer [], [], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Screen Display Blanker screensaver |<!--AROS-->Blanker Commodity (built in), [https://archives.arosworld.org/index.php?function=browse&cat=graphics/screenblanker GarshneBlanker], [http://sourceforge.net/projects/gblanker/ GBlanker Src], [], |<!--Amiga OS-->MultiCX, |<!--AmigaOS4--> |<!--MorphOS-->ModernArt Blanker, |- |<!--Sub Menu-->Fortune Cookie Quotes Sayings |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/misc AFortune], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} ==Misc Application 4== {| class="wikitable sortable" |- !width:30%;|Misc Application !width:10%;|AROS(x86) !width:10%;|Commodore-Amiga OS 3.1(68k) !width:10%;|Hyperion OS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Fractals mandelbrot, etc |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=graphics/misc], |<!--Amiga OS-->ZoneXplorer, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Landscape Rendering |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=graphics/raytrace WCS World Construction Set], |<!--Amiga OS-->[ Vista Pro], [http://en.wikipedia.org/wiki/World_Construction_Set World Construction Set] |<!--AmigaOS4-->[ WCS World Construction Set], |<!--MorphOS-->[ WCS World Construction Set], |- |<!--Sub Menu-->Astronomy [https://sourceforge.net/projects/skychart/ skychart freepascal], [], [], |<!--AROS-->[ Digital Almanac (ABIv0 only)], |<!--Amiga OS-->[http://aminet.net/search?query=planetarium Aminet search], [http://aminet.net/misc/sci/DA3V56ISO.zip Digital Almanac], [https://aminet.net/package/misc/sci/da3sourceV58 Src c V58], [ Galileo renamed to Distant Suns]*, [], |<!--AmigaOS4-->[http://sourceforge.net/projects/digital-almanac/ Digital Almanac], Distant Suns*, [http://www.digitaluniverse.org.uk/ Digital Universe]*, |<!--MorphOS-->[http://www.aminet.net/misc/sci/da3.lha Digital Almanac], [http://www.aminet.net/package/misc/sci/da3-mos-src Src c V56], |- |<!--Sub Menu-->Astrology [https://sourceforge.net/projects/skylendar/ skylendar], [https://github.com/CruiserOne/Astrolog Astrolog], [https://www.astrolog.org/astrolog/astfile.htm Astrology alt site], [https://saravali.github.io/download.html Maitreya], [https://github.com/alamahant/Asteria Asteria], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Genealogy History Family Tree Ancestry Records (FreeBMD, FreeREG, and FreeCEN file formats or GEDCOM GenTree) |<!--AROS--> |<!--Amiga OS--> [ Origins], [ Your Family Tree], [ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Languages |<!--AROS--> |<!--Amiga OS-->Fun School, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Mathematics ([http://www-fourier.ujf-grenoble.fr/~parisse/install_en.html Xcas], etc.), |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/scientific mathX] |<!--Amiga OS-->Maple V, mathX, Fun School, GCSE Maths, [ ], [ ], [ ], |<!--AmigaOS4-->Yacas |<!--MorphOS-->Yacas |- |<!--Sub Menu-->Maths Graph Function Plotting |<!--AROS-->[https://blog.alb42.de/programs/#MUIPlot MUIPlot], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->App Utility Launcher Dock toolbar |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=utility/docky BoingBar], [], |<!--Amiga OS-->[https://github.com/adkennan/DockBot Dockbot], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->3D Printer [https://github.com/OrcaSlicer/OrcaSlicer OrcaSlicer] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->PCB design |<!--AROS--> |<!--Amiga OS-->[ ], [ ], [ ], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Digital Signage |<!--AROS-->Hollywood, Hollywood Designer |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->HAM radio, amateur radio, packet radio, [], [], [], [https://cemaxecuter.com/ Dragon OS], [https://github.com/km4ack/73Linux with 73 link update], [https://www.youtube.com/watch?v=YAL5KNePRSg video for], |<!--AROS--> |<!--Amiga OS-->[https://github.com/punktniklas/NiKom NiKom], [https://www.amigarealm.com/amiga/amicomms/comm4.htm Comm4], [https://www.amigarealm.com/archives/comms/aarug/ TNC Terminal Node Controller with packets over serial connections on Yaesu or Woxum handheld], [https://aminet.net/comm/misc AmiCom], [ with 7Plus file encoder/decoder], [ mksstv], [ RTTYam], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->modern smart home network like Home Assistant Automation Yellow, Green, Mosquitto, EMQX, |<!--AROS--> |<!--Amiga OS-->[https://github.com/evil4dmin/ami2ha HA], [https://github.com/sidick/midge mtqq.lib], [https://aminet.net/package/comm/tcp/AmiHomeassist-0.7 AmiHomeassist], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Teaching classroom learning training [https://github.com/moodle/moodle moodle], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} <nowiki>*</nowiki> Commercial product. ==Games & Emulation== Some emulators/games require OpenGL to function and to adjust ahi prefs channels, frequency and unit0 and unit1 and [http://aros.sourceforge.net/documentation/users/shell/changetaskpri.php changetaskpri -1] Rom patching https://www.marcrobledo.com/RomPatcher.js/ https://www.romhacking.net/patch/ (ips, ups, bps, etc) and this other site supports the latter formats https://hack64.net/tools/patcher.php Free public domain roms for use with emulators can be found [http://www.pdroms.de/ here] as most of the rest are covered by copyright rules. If you like to read about old games see [http://retrogamingtimes.com/ here] and [http://www.armchairarcade.com/neo/ here] and a [http://www.vintagecomputing.com/ blog] about old computers. Possibly some of the [http://www.answers.com/topic/list-of-best-selling-computer-and-video-games best selling] of all time. [http://en.wikipedia.org/wiki/List_of_computer_system_emulators Wiki] with emulated systems list. [https://archive.gamehistory.org/ Archive of VGHF], [https://library.gamehistory.org/ Video Game History Foundation Library search] {| class="wikitable sortable" |- !width:10%;|Games [http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Emulation] !width:10%;|AROS(x86) !width:10%;|AmigaOS3(68k) !width:10%;|AmigaOS4(PPC) !width:10%;|MorphOS(PPC) |- |<!--Sub Menu-->Games Emulation Amstrad CPC |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [ Caprice32 (OpenGL & pure SDL)], [ Arnold], [https://retroshowcase.gr/cpcbox-master/], |<!--Amiga OS--> |<!--AmigaOS4-->[http://os4depot.net/index.php?function=browse&cat=emulation/computer] |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2], |- |<!--Sub Menu-->Games Emulation Apple2 and 2GS |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Arcade |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Mame], [ SI Emu (ABIv0 only)], |<!--Amiga OS-->Mame, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem xmame], amiarcadia, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2 Mame], |- |<!--Sub Menu-->Games Emulation Atari 2600 [], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Stella], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 5200 [https://github.com/wavemotion-dave/A5200DS A5200DS], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 7800 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari 400 800 130XL [https://github.com/wavemotion-dave/A8DS A8DS], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Atari800], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari Lynx |<!--AROS-->[http://myfreefilehosting.com/f/6366e11bdf_1.93MB Handy (ABIv0 only)], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Atari Jaguar |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Bandai Wonderswan |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation BBC Micro and Acorn Electron [http://beehttps://bem-unix.bbcmicro.com/download.html BeebEm], [http://b-em.bbcmicro.com/ B-Em], [http://elkulator.acornelectron.co.uk/ Elkulator], [http://electrem.emuunlim.com/ ElectrEm], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Dragon 32 and Tandy CoCo [http://www.6809.org.uk/xroar/ xroar], [], |<!--AROS-->[], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Commodore C16 Plus4 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Commodore C64 |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Vice (ABIv0 only)], [], |<!--Amiga OS-->Frodo, |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem viceplus], |<!--MorphOS-->Vice, |- |<!--Sub Menu-->Games Emulation Commodore Amiga |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Janus UAE], Emumiga, |<!--Amiga OS--> |<!--AmigaOS4-->[http://os4depot.net/index.php?function=browse&cat=emulation/computer UAE], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=2 UAE], |- |<!--Sub Menu-->Games Emulation Japanese MSX MSX2 |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Mattel Intelivision |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Mattel Colecovision and Adam |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Milton Bradley (MB) Vectrex [ Vectrex OpenGL], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation PICO8 Pico-8 fantasy video game console [https://github.com/egordorichev/pemsa-sdl/ pemsa-sdl], [https://github.com/jtothebell/fake-08 fake-08], [https://github.com/Epicpkmn11/fake-08/tree/wip fake-08 fork], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo Gameboy |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem vba no sound], [], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem vba] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo NES |<!--AROS-->[ EmiNES], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Fceu], [https://github.com/takahirox/nes-js?tab=readme-ov-file nes-js], [https://github.com/bfirsh/jsnes jsnes], [https://github.com/angelo-wf/NesJs NesJs], |<!--Amiga OS-->AmiNES, [http://www.dridus.com/~nyef/darcnes/ darcNES], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem amines] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Nintendo SNES |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Zsnes], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem warpsnes] |<!--MorphOS-->[http://fabportnawak.free.fr/snes/ Snes9x], |- |<!--Sub Menu-->Games Emulation Nintendo N64 *HLE and plugins [ mupen64], [https://github.com/ares-emulator/ares ares], [https://github.com/N64Recomp/N64Recomp N64Recomp], [https://github.com/rt64/rt64 rt64], [https://github.com/simple64/simple64 Simple64], *LLE [], |<!--AROS-->[http://code.google.com/p/mupen64plus/ Mupen64+], |<!--Amiga OS-->[http://code.google.com/p/mupen64plus/ Mupen64+], [http://aminet.net/package/misc/emu/tr-981125_src TR64], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Nintendo Gamecube Wii] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Nintendo Wii U] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://github.com/yuzu-emu Nintendo Switch] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation NEC PC Engine |<!--AROS-->[], [], [https://github.com/yhzmr442/jspce js-pce], |[http://www.hugo.fr.fm/ Hugo], [http://mednafen.sourceforge.net/ Mednafen], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem tgemu] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Master System (SMS) |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem Dega], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem sms], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem osmose] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Genesis/Megadrive |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem gp no sound], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem DGen], |<!--Amiga OS-->[http://code.google.com/p/genplus-gx/ Genplus], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem genesisplus] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Saturn *HLE [https://mednafen.github.io/ mednafen], [http://yabause.org/ yabause], [], *LLE [], [], |<!--AROS-->? |<!--Amiga OS-->[http://yabause.org/ Yabause], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sega Dreamcast *HLE [https://github.com/flyinghead/flycast flycast], [https://code.google.com/archive/p/nulldc/downloads NullDC], *LLE [], [], |<!--AROS-->? |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair ZX80 and ZX81 |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair Spectrum |[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Fuse (crackly sound)], [http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer SimCoupe], [ FBZX slow], [https://jsspeccy.zxdemo.org/ jsspeccy], [http://torinak.com/qaop/games qaop], |<!--Amiga OS-->[http://www.lasernet.plus.com/ Asp], [http://www.zophar.net/sinclair.html Speculator], [http://www.worldofspectrum.org/x128/index.html X128], |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/computer] |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sinclair QL |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], [], |<!--Amiga OS-->[http://aminet.net/package/misc/emu/QDOS4amiga1 QDOS4amiga] |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation SNK NeoGeo Pocket |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem gngeo], NeoPop, |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation Sony PlayStation |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/gamesystem FPSE], |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem FPSE] |<!--MorphOS--> |- |<!--Sub Menu-->[ Sony PS2] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[ Sony PS3] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://vita3k.org/ Sony Vita] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->[https://github.com/shadps4-emu/shadPS4 PS4] |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation [http://en.wikipedia.org/wiki/Tangerine_Computer_Systems Tangerine] Oric and Atmos |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer Oricutron] |<!--Amiga OS--> |<!--AmigaOS4-->[http://www.os4depot.net/index.php?function=browse&cat=emulation/gamesystem Oricutron] |<!--MorphOS-->[http://aminet.net/package/misc/emu/oricutron Oricutron] |- |<!--Sub Menu-->Games Emulation TI 99/4 99/4A [https://github.com/wavemotion-dave/DS994a DS994a], [], [https://js99er.net/#/ js99er], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=emulation/computer], |<!--Amiga OS-->[http://aminet.net/package/misc/emu/TI4Amiga TI4Amiga], [http://aminet.net/package/misc/emu/TI4Amiga_src TI4Amiga src in c], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation HP 38G 40GS 48 49G/50G Graphing Calculators |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Emulation TI 58 83 84 85 86 - 89 92 Graphing Calculators |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu--> |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |} {| class="wikitable sortable" |- !width:10%;|Games [https://www.rockpapershotgun.com/ General] !width:10%;|AROS(x86) !width:10%;|AmigaOS3(68k) !width:10%;|AmigaOS4(PPC) !width:10%;|MorphOS(PPC) |- style="background:lightgrey;{{text default color}}; text-align:center; font-weight:bold;" | Games [https://www.trackawesomelist.com/michelpereira/awesome-open-source-games/ Open Source and others] || AROS || Amiga OS || Amiga OS4 || Morphos |- |<!--Sub Menu-->Games Action like [https://github.com/opentomb/OpenTomb opentomb], [https://github.com/LostArtefacts/TRX TRX formerly Tomb1Main], [https://github.com/TombEngine TombEngine], [http://archives.arosworld.org/index.php?function=browse&cat=game/action Thrust], [https://github.com/fragglet/sdl-sopwith sdl sopwith], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/action], [https://archives.arosworld.org/index.php?function=browse&cat=game/action BOH], [], |<!--Amiga OS-->[https://github.com/BSzili/OpenLara/tree/amiga/src source of openlara SDL2], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Adventure like [http://dotg.sourceforge.net/ DMJ], [https://github.com/kromenak/gengine Gabriel Knight 3], [http://www.sarien.net/ Sierra Sarien], [https://github.com/klembot/twinejs twine js], [https://github.com/QSPFoundation/qspgui Quest Soft Player QSP], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/adventure dmagnetic], [https://archives.arosworld.org/?function=browse&cat=emulation/misc ScummVM], [https://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying frotz infocom], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Board like [https://github.com/aperture-software/colditz-escape escape from colditz], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/board], [http://amigan.1emu.net/releases Africa] |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Cards |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/card], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=180&pid=12934#post_12934 Balatro], |<!--AmigaOS-->[http://home.arcor.de/amigasolitaire/e/welcome.html Reko], [https://github.com/samskivert/beschei-en beschei Src], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Misc [https://github.com/michelpereira/awesome-open-source-games Awesome open], [https://github.com/bobeff/open-source-games General Open Source], [https://github.com/SAT-R/sa2 Sonic Advance 2], [https://github.com/velorek1/cwordle Wordle type], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/misc], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games FPS like [https://aminet.net/package/game/shoot/D1X_Rebirth_AGA Descent D1X src], [https://github.com/DescentDevelopers/Descent3 Descent 3], [https://github.com/Fewnity/Counter-Strike-Nintendo-DS Counter-Strike-Nintendo-DS], [https://github.com/Aleph-One-Marathon/alephone Bungie Marathon 1994], [https://zdoom.org/downloads UzDoom opengl 3.3], [https://github.com/ZDoom/gzdoom gzdoom opengl 3+], [https://zdoom.org/downloads LZDoom opengl 2.1], [https://github.com/OpenXRay/xray-16 S.T.A.L.K.E.R Xray], |<!--AROS-->Doom, Quake, [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Quake 3 Arena (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Cube (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Assault Cube (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Cube 2 Sauerbraten (OpenGL)], [http://fodquake.net/test/ FodQuake QuakeWorld], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Duke Nukem 3D], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Darkplaces Nexuiz Xonotic], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Doom 3 SDL (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/fps Hexenworld and Hexen 2], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Aliens vs Predator Gold 2000 avp (openGL)], [https://archives.arosworld.org/index.php?function=browse&cat=game/fps Odamex (openGL doom)], [https://archives.arosworld.org/?function=showfile&file=game/fps/ zgloom], [], [https://archives.arosworld.org/?function=showfile&file=game/fps/ ab3dhd], [], |<!--Amiga OS-->Doom, Quake, AB3D, Fears, Breathless, Gloom, |<!--AmigaOS4-->Doom, Quake, |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12 Doom], Quake, Quake 3 Arena, |- |<!--Sub Menu-->Games MMORG like |<!--AROS-->[ Eternal Lands (OpenGL)], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Platform like |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/platform], [ Maze of Galious], [ Gish]*(openGL), [ Mega Mario], [https://archives.arosworld.org/?function=showfile&file=game/platform/ thextech SMBX], [http://www.gianas-return.de/ Giana's Return], [http://www.sqrxz.de/ Sqrxz], [www.sqrxz2.de/ Sqrxz 2], [http://www.sqrxz.de/sqrxz-3/ Sqrxz 3], [http://www.sqrxz.de/sqrxz-4/ Sqrxz 4], [http://archives.arosworld.org/index.php?function=browse&cat=game/platform Cave Story], [https://bszili.morphos.me/ Frogatto], [https://bszili.morphos.me/ OpenJazz], [https://archives.arosworld.org/?function=showfile&file=game/platform/ pekkakana2], [ Aquaria], [https://archives.arosworld.org/?function=showfile&file=game/platform/ sonic CD], [], |<!--Amiga OS-->[ Giana Sisters], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Puzzle [https://github.com/mariopartyrd/marioparty4/tree/port Party], [https://github.com/mdodis/OpenSolomonsKey OpenSolomonsKey], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/puzzle], [ Cubosphere (OpenGL)], [http://archives.arosworld.org/index.php?function=browse&cat=game/puzzle Candy Crisis], [http://bszili.morphos.me/ TailTale], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Racing [ Trigger Rally], [ VDrift], [http://www.ultimatestunts.nl/index.php?page=2&lang=en Ultimate Stunts], [http://maniadrive.raydium.org/ Mania Drive], [https://github.com/plowteam/donut Simpsons Hit and Run], [], |<!--AROS-->[ Super Tux Kart (OpenGL)], [http://www.dusabledanslherbe.eu/AROSPage/F1Spirit.30.html F1 Spirit (OpenGL)], [http://bszili.morphos.me/index.html MultiRacer], [https://bszili.morphos.me/ Speed Dreams], [https://archives.arosworld.org/?function=showfile&file=game/driving/dethrace-0.10.1.x86_64-aros-v11.zip Carmageddon dethrace 64bit], [http://maniadrive.raydium.org/index.php?downloads=yes maniadrive like trackmania], |<!--AmigaOS--> |<!--AmigaOS4-->[http://bszili.morphos.me/index.html Speed Dreams], |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12], [http://bszili.morphos.me/index.html TORCS], |- |<!--Sub Menu-->Games 1st first person DRPG [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/OpenEnroth/OpenEnroth OpenEnroth MM], [] |<!--AROS-->[https://github.com/BSzili/aros-stuff Arx Libertatis], [http://www.playfuljs.com/a-first-person-engine-in-265-lines/ js raycaster], [https://github.com/Dorthu/es6-crpg webgl], [https://github.com/sonountaleban/AmiShockolate System Shock], [], [], |<!--AmigaOS-->Phantasie, Faery Tale, Dungeon Master, |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games 3rd third person action CRPG [https://sourceforge.net/projects/sumwars/ Summoning Wars], [https://www.solarus-games.org/ Solarus], [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/alexbatalov/fallout1-ce fallout ce], [https://github.com/rwengine/openrw gta3], [https://github.com/gta-reversed/gta-reversed gta3 sa], [https://github.com/mrxenginner/reVC gta3 vc revc], [https://github.com/jakobharder/burntime/tree/main Burntime], |<!--AROS-->[https://archives.arosworld.org/?function=showfile&file=game/strategy/ fheroes2 homm2], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ breakhack], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ devilutionx diablo 1 hellfire], [https://archives.arosworld.org/?function=showfile&file=game/roleplaying/ fallout 1], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ stratagus], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ hostile-takeover], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games isometric RPG [https://sourceforge.net/projects/sumwars/ Summoning Wars], [https://www.solarus-games.org/ Solarus], [https://wiki.rpg.net/index.php/Open_Game_Systems Misc], [https://github.com/topics/dungeon?l=javascript Dungeon], [], [https://github.com/clintbellanger/heroine-dusk JS Dusk], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying nethack], [https://archives.arosworld.org/index.php?function=browse&cat=game/roleplaying GemRB], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games card based RPG [https://github.com/open-duelyst/duelyst Duelyst], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games turn based tactics RPG [], [], [], [], [], [], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/strategy UFO AI], [http://play.freeciv.org/ FreeCiv], [], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Strategy [http://rtsgus.org/ RTSgus], [http://stargus.sourceforge.net/ Stargus], [https://github.com/KD-lab-Open-Source/Perimeter Perimeter], [https://matty77.itch.io/conflict-3049 conflict-3049], [https://github.com/ZeroK-RTS/Zero-K Zero-K multi player rts lua], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=game/strategy MegaGlest (OpenGL)], [https://archives.arosworld.org/?function=showfile&file=game/strategy/ signus], [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=140&pid=12446#post_12446 Wargus warcraft 2 setup], |<!--Amiga OS-->[https://aminet.net/package/game/strat/OpenDUNE_RTG OpenDUNE_RTG src] |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12] |- |<!--Sub Menu-->Games Rhythm, Beat, Step [], [], [https://clonehero.net/ clonehero], [https://github.com/MatteoGodzilla/Dj-Engine Dj-Engine], |<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/misc Frets on Fire], [], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Shoot Em Ups [http://www.mhgames.org/oldies/formido/ Formido], [http://code.google.com/p/violetland/ Violetland], ||<!--AROS-->[https://archives.arosworld.org/index.php?function=browse&cat=game/action Open Tyrian], [http://www.parallelrealities.co.uk/projects/starfighter.php Starfighter], [ Alien Blaster], [https://github.com/OpenFodder/openfodder OpenFodder], [https://archives.arosworld.org/?function=showfile&file=game/action/ tbftss The Battle for the Solar System: the Pandora War] |<!--AmigaOS--> |<!--AmigaOS4-->[http://www.parallelrealities.co.uk/projects/starfighter.php Starfighter], [ The Battle for the Solar System: the Pandora War] |<!--MorphOS--> |- |<!--Sub Menu-->Games Simulations [http://scp.indiegames.us/ Freespace 2], [http://www.heptargon.de/gl-117/gl-117.html GL117], [http://code.google.com/p/corsix-th/ Theme Hospital], [http://code.google.com/p/freerct/ Rollercoaster Tycoon], [http://hedgewars.org/ Hedgewars], [https://github.com/raceintospace/raceintospace raceintospace], [https://github.com/Return-To-The-Roots RTTR Settlers 2], [https://github.com/OoliteProject/oolite oolite elite], [https://github.com/fesh0r/newkind newkind elite], [https://github.com/bohemiainteractive/cwr Arma Cold War Src], [https://github.com/endless-sky/endless-sky endless-sky], [https://github.com/pioneerspacesim/pioneer pioneer space command], |<!--AROS--> |<!--Amiga OS-->SimCity, SimAnt, Sim Hospital, Theme Park, [https://github.com/angree/openttd_amiga_68k openttd amiga_68k], |<!--AmigaOS4--> |<!--MorphOS-->[http://morphos.lukysoft.cz/en/vypis.php?kat=12] |- |<!--Sub Menu-->Games Life Sim [https://github.com/ACreTeam/forest Animal Crossing], [ ], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Horror [https://github.com/Mikompilation/MikuPan Fatal Frame], [ ], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Sandbox Voxel Open World Exploration [https://github.com/ClassiCube/ Classicube],[http://www.michaelfogleman.com/craft/ Craft], [https://github.com/tothpaul/DelphiCraft DelphiCraft],[https://www.minetest.net/ Luanti formerly Minetest], [ infiniminer], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Battle Royale [https://bruh.io/ Play.Bruh.io], [https://www.coolmathgames.com/0-copter Copter Royale], [https://surviv.io/ Surviv.io], [https://nuggetroyale.io/#Ketchup Nugget Royale], [https://miniroyale2.io/ Miniroyale2.io], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Tower Defense [https://chriscourses.github.io/tower-defense/ HTML5], [https://github.com/SBardak/Tower-Defense-Game TD C++], [https://github.com/bdoms/love_defense LUA and LOVE], [https://github.com/HyOsori/Osori-WebGame HTML5], [https://github.com/PascalCorpsman/ConfigTD ConfigTD Pascal], [https://github.com/GloriousEggroll/wine-ge-custom Wine], [] |<!--AROS-->[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=1443&rowstart=180&pid=12871#post_12871 Plants vs Zombies PvZ], |<!--Amiga OS-->[https://github.com/boingball/miggy-tower-defense miggy-tower-defense], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Visual Novel Engines [https://github.com/diane1f0cd/VisualNovelTemplate Visual Novel Template], [https://github.com/Kirilllive/tuesday-js Tuesday JS], [https://github.com/tejasnayak25/vnsutra vnsutra], [https://github.com/weetabix-su/renpsp-dev RenPSP], [https://github.com/Galladite27/ONScripter-EN ONScripter-EN], [https://github.com/NathanGuilhot/VNES-Raylib https://github.com/NathanGuilhot/VNES VNES in Raylib], [https://www.renpy.org/latest.html renpy ren'py python based], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Reality VR [https://gitlab.com/madsbuvi/openmw openmw vr], [https://github.com/Team-Beef-Studios/BeefRaiderXR BeefRaiderXR], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Table Top VTT [ Roll20], [https://www.owlbear.rodeo/ owlbear rodeo], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Computer assisted TableTop TTRPG OSR [https://www.rpgsolo.com/play.php RPGSolo], [https://github.com/fpsvogel/solo-ttrpgs Solo TTRPG], [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games 2D 3D Engines [https://github.com/fegennari/3DWorld 3DWorld], [https://github.com/GarageGames/Torque3D Torque3D], [https://github.com/gameplay3d/GamePlay GamePlay 3D], [https://www.babylonjs.com/ BabylonJS ], [ Godot], [ Ogre], [ Crystal Space], [https://github.com/JacobHess03/ Dragon-Quest like], [https://github.com/bjornbytes/lovr Lua LOVE for 2D LOVR for 3D], [], |<!--AROS-->[https://www.arkhamdev.net/wiki.htm?id=agx Arkham Development antiryadgx 8.9 lts with register], [], |<!--Amiga OS-->[https://github.com/alpyre/Sevgi_Engine Sevgi Engine], [], [], |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games C based game frameworks [https://github.com/orangeduck/Corange Corange], [https://github.com/scottcgi/Mojoc Mojoc], [https://orx-project.org/ Orx], [https://github.com/ioquake/ioq3 Quake 3], [https://www.mapeditor.org/ Tiled], [https://www.raylib.com/ 2d Raylib], [https://github.com/Rabios/awesome-raylib other raylib], [https://github.com/MrFrenik/gunslinger Gunslinger], [https://o3de.org/ o3d], [http://archives.aros-exec.org/index.php?function=browse&cat=development/library GLFW], [], |<!--AROS-->[http://archives.arosworld.org/index.php?function=browse&cat=development/library Raylib 5], |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games RPGMaker MV/MZ-compatible projects [https://github.com/Psychronic-Games/RPGReactor RPGReactor js], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games Virtual Pinball [https://github.com/vpinball/vpinball vpinball], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |- |<!--Sub Menu-->Games unpack unarc [], [], |<!--AROS--> |<!--Amiga OS--> |<!--AmigaOS4--> |<!--MorphOS--> |} ==Application Guides== [[#top|...to the top]] ===Web Browser=== OWB is now at version 2.0 (which got an engine refresh, from July 2015 to February 2019) and 3.0. This latest version has a good support for many/most web sites, even YouTube web page now works. [https://www.bilibili.tv/en/search untested] This improved compatibility comes at the expense of higher RAM usage (now 1GB RAM is the absolute minimum). Also, keep in mind that the lack of a JIT (Just-In-Time) JS compiler on the 32 bit version, makes the web surfing a bit slow. Only the 64 bit version of OWB 2.0 will have JIT enabled, thus benefitting of more speed. There are tooltypes that can be added to the icon to provide further features JIT, MSE etc Certificates from [https://curl.se/docs/caextract.html ca certs], DNS tracking blocking with [https://easylist.to/easylist/easylist.txt easylist.txt] in PROGDIR:Conf before starting browser with enabled AdBlock [https://github.com/easylist/easylist/tree/master easylist], [https://gitlab.com/eyeo anti abp], [https://firebog.net/ big blocklist], [https://github.com/StevenBlack/hosts Steves], [], [], This can be enabled with OWB Odyssey with Windows -> Content Blocking and Windows -> Messages and enter https://www.youtube.com/api/stats/ads* https://www.youtube.com/pagead/adview* https://www.youtube.com#@##player-ads* into your custom filters Element blocker browser extension might be needed for [https://github.com/easylist/easylist/wiki/Youtube-Issues youtube], [ mid roll], [ pre roll], [ ], OWB speed is much better when running from RAM Disk, the best way is to add the below into your S:User-Startup which copies OWB drawer from Extras:Internet/OWB to RAM Disk: So add this : <pre> copy Extras:Internet/OWB Ram:OWB/ ALL CLONE >NIL: copy Extras:Internet/OWB.info Ram: >NIL: </pre> Open RAM Disk and open OWB drawer and double click on OWB icon so that the above icon tooltypes are activated Problems are that the copy time is long (around 20 seconds added in the background), but we can make it faster if we delete useless files from the OWB drawer (docs, …) If you don’t copy the drawer back onto the HD, you won’t save your cache, cookies, passwords… So you need a script for it. copy Extras:Internet/Amelinium/#? Ram:Amelinium/ ALL CLONE >NIL: Error messages SSL error "cant verify with ca-certificates", check bios clock time date is correct Error 6, try checking networking prefs settings and Save / Use preferences again or a '''few times''' otherwise the network chipset may not be compatible with Aros [https://www.google.com/search?q=%s&udm=14 Google search without AI overview] [ DuckDuckGo] [ Ecosia] [ Qwant] [ Swisscows] [ Mojeek] [ Brave Search] [ PreSearch] [ Startpage] ===E-mail=== Emailinium is now available for IMAP and POP3 based accounts YAM does not support SSL and most mail providers now switched to encrypted SMTP/POP3 connections ====SimpleMail==== SimpleMail supports IMAP and appears to work with GMail, but it's never been reliable enough, it can crash with large mailboxes. Please read more on this [http://www.freelists.org/list/simplemail-usr User list] GMail Be sure to activate the pop3 usage in your gmail account setup / configuration first. pop3: pop.gmail.com Use SSL: Yes Port: 995 smtp: smtp.gmail.com (with authentication) Use Authentication: Yes Use SSL: Yes Port: 465 or 587 Hotmail/MSN/outlook/Microsoft Mail mid-2017, all outlook.com accounts will be migrated to Office 365 / Exchange Most users are currently on POP which does not allow showing folders and many other features (technical limitations of POP3). With Microsoft IMAP you will get folders, sync read/unread, and show flags. You still won't get push though, as Microsoft has not turned on the IMAP Idle command as at Sept 2013. If you want to try it, you need to first remove (you can't edit) your pop account (long-press the account on the accounts screen, delete account). Then set it up this way: 1. Email/Password 2. Manual 3. IMAP 4. * Incoming: imap-mail.outlook.com, port 993, SSL/TLS should be checked * Outgoing: smtp-mail.outlook.com, port 587, SSL/TLS should be checked * POP server name pop-mail.outlook.com, port 995, POP encryption method SSL Yahoo Mail On April 24, 2002 Yahoo ceased to offer POP access to its free mail service. Introducing instead a yearly payment feature, allowing users POP3 and IMAP server support, along with such benefits as larger file attachment sizes and no adverts. Sorry to see Yahoo leaving its users to cough up for the privilege of accessing their mail. Understandable, when competing against rivals such as Gmail and Hotmail who hold a large majority of users and were hacked in 2014 as well. Incoming Mail (IMAP) Server * Server - imap.mail.yahoo.com * Port - 993 * Requires SSL - Yes Outgoing Mail (SMTP) Server * Server - smtp.mail.yahoo.com * Port - 465 or 587 * Requires SSL - Yes * Requires authentication - Yes Your login info * Email address - Your full email address (name@domain.com) * Password - Your account's password * Requires authentication - Yes Note that you need to enable “Web & POP Access” in your Yahoo Mail account to send and receive Yahoo Mail messages through any other email program. You will have to enable “Allow your Yahoo Mail to be POPed” under “POP and Forwarding”, to send and receive Yahoo mails through any other email client. Cannot be done since 2002 unless the customer pays Yahoo a subscription subs fee to have access to SMTP and POP3 * Set the POP server for incoming mails as pop.mail.yahoo.com. You will have to enable “SSL” and use 995 for Port. * “Account Name or Login Name” – Your Yahoo Mail ID i.e. your email address without the domain “@yahoo.com”. * “Email Address” – Your Yahoo Mail address i.e. your email address including the domain “@yahoo.com”. E.g. myname@yahoo.com * “Password” – Your Yahoo Mail password. Yahoo! Mail Plus users may have to set POP server as plus.pop.mail.yahoo.com and SMTP server as plus.smtp.mail.yahoo.com. * Set the SMTP server for outgoing mails as smtp.mail.yahoo.com. You will also have to make sure that “SSL” is enabled and use 465 for port. you must also enable “authentication” for this to work. ====YAM Yet Another Mailer==== YAM does not support SSL and most mail providers have now switched to encrypted SMTP/POP3 connections This email client is POP3 only if the SSL library is available [http://www.freelists.org/list/yam YAM Freelists] One of the downsides of using a POP3 mailer unfortunately - you have to set an option not to delete the mail if you want it left on the server. IMAP keeps all the emails on the server. Possible issues Sending mail issues is probably a matter of using your ISP's SMTP server, though it could also be an SSL issue. getting a "Couldn't initialise TLSv1 / SSL error Use of on-line e-mail accounts with this email client is not possible as it lacks the OpenSSL AmiSSl v3 compatible library GMail Incoming Mail (POP3) Server - requires SSL: pop.gmail.com Use SSL: Yes Port: 995 Outgoing Mail (SMTP) Server - requires TLS: smtp.gmail.com (use authentication) Use Authentication: Yes Use STARTTLS: Yes (some clients call this SSL) Port: 465 or 587 Account Name: your Gmail username (including '@gmail.com') Email Address: your full Gmail email address (username@gmail.com) Password: your Gmail password Anyway, the SMTP is pop.gmail.com port 465 and it uses SSLLv3 Authentication. The POP3 settings are for the same server (pop.gmail.com), only on port 995 instead. Outlook.com access <pre > Outlook.com SMTP server address: smtp.live.com Outlook.com SMTP user name: Your full Outlook.com email address (not an alias) Outlook.com SMTP password: Your Outlook.com password Outlook.com SMTP port: 587 Outlook.com SMTP TLS/SSL encryption required: yes </pre > Yahoo Mail <pre > “POP3 Server” – Set the POP server for incoming mails as pop.mail.yahoo.com. You will have to enable “SSL” and use 995 for Port. “SMTP Server” – Set the SMTP server for outgoing mails as smtp.mail.yahoo.com. You will also have to make sure that “SSL” is enabled and use 465 for port. you must also enable “authentication” for this to work. “Account Name or Login Name” – Your Yahoo Mail ID i.e. your email address without the domain “@yahoo.com”. “Email Address” – Your Yahoo Mail address i.e. your email address including the domain “@yahoo.com”. E.g. myname@yahoo.com “Password” – Your Yahoo Mail password. </pre > Yahoo! Mail Plus users may have to set POP server as plus.pop.mail.yahoo.com and SMTP server as plus.smtp.mail.yahoo.com. Note that you need to enable “Web & POP Access” in your Yahoo Mail account to send and receive Yahoo Mail messages through any other email program. You will have to enable “Allow your Yahoo Mail to be POPed” under “POP and Forwarding”, to send and receive Yahoo mails through any other email client. Cannot be done since 2002 unless the customer pays Yahoo a monthly fee to have access to SMTP and POP3 Microsoft Outlook Express Mail 1. Get the files to your PC. By whatever method get the files off your Amiga onto your PC. In the YAM folder you have a number of different folders, one for each of your folders in YAM. Inside that is a file usually some numbers such as 332423.283. YAM created a new file for every single email you received. 2. Open up a brand new Outlook Express. Just configure the account to use 127.0.0.1 as mail servers. It doesn't really matter. You will need to manually create any subfolders you used in YAM. 3. You will need to do a mass rename on all your email files from YAM. Just add a .eml to the end of it. Amazing how PCs still rely mostly on the file name so it knows what sort of file it is rather than just looking at it! There are a number of multiple renamers online to download and free too. 4. Go into each of your folders, inbox, sent items etc. And do a select all then drag the files into Outlook Express (to the relevant folder obviously) Amazingly the file format that YAM used is very compatible with .eml standard and viola your emails appear. With correct dates and working attachments. 5. If you want your email into Microsoft Outlook. Open that up and create a new profile and a new blank PST file. Then go into File Import and choose to import from Outlook Express. And the mail will go into there. And viola.. you have your old email from your Amiga in a more modern day format. ===FTP=== Magellan has a great FTP module. It allows transferring files from/to a FTP server over the Internet or the local network and, even if FTP is perceived as a "thing of the past", its usability is all inside the client. The FTP thing has a nice side effect too, since every Icaros machine can be a FTP server as well, and our files can be easily transferred from an Icaros machine to another with a little configuration effort. First of all, we need to know the 'server' IP address. Server is the Icaros machine with the file we are about to download on another Icaros machine, that we're going to call 'client'. To do that, move on the server machine and 1) run Prefs/Services to be sure "FTP file transfer" is enabled (if not, enable it and restart Icaros); 2) run a shell and enter this command: ifconfig -a Make a note of the IP address for the network interface used by the local area network. For cabled devices, it usually is net0:. Now go on the client machine and run Magellan: Perform these actions: 1) click on FTP; 2) click on ADDRESS BOOK; 3) click on "New". You can now add a new entry for your Icaros server machine: 1) Choose a name for your server, in order to spot it immediately in the address book. Enter the IP address you got before. 2) click on Custom Options: 1) go to Miscellaneous in the left menu; 2) Ensure "Passive Transfers" is NOT selected; 3) click on Use. We need to deactivate Passive Transfers because YAFS, the FTP server included in Icaros, only allows active transfers at the current stage. Now, we can finally connect to our new file source: 1) Look into the address book for the newly introduced server, be sure that name and IP address are right, and 2) click on Connect. A new lister with server's "MyWorkspace" contents will appear. You can now transfer files over the network choosing a destination among your local (client's) volumes. Can be adapted to any FTP client on any platform of your choice, just be sure your client allows Active Transfers as well. ===IRC Internet Relay Chat=== Jabberwocky is ideal for one-to-one social media communication, use IRC if you require one to many. Just type a message in ''lowercase''' letters and it will be posted to all in the [ AROS irc channel]. Please do not use UPPER CASE as it is a sign of SHOUTING which is annoying. Other things to type in - replace <message> with a line of text and <nick> with a person's name <pre> /help /list /who /whois <nick> /msg <nick> <message> /query <nick> <message>s /query /away <message> /away /quit <going away message> </pre> [http://irchelp.org/irchelp/new2irc.html#smiley Intro guide here]. IRC Primer can be found here in [http://www.irchelp.org/irchelp/ircprimer.html html], [http://www.irchelp.org/irchelp/text/ircprimer.txt TXT], [http://www.kei.com/irc/IRCprimer1.1.ps PostScript]. Issue the command /me <text> where <text> is the text that should follow your nickname. Example: /me slaps ajk around a bit with a large trout /nick <newNick> /nickserv register <password> <email address> /ns instead of /nickserv, while others might need /msg nickserv /nickserv identify <password> Alternatives: /ns identify <password> /msg nickserv identify <password> ==== IRC WookieChat ==== WookieChat is the most complete internet client for communication across the IRC Network. WookieChat allows you to swap ideas and communicate in real-time, you can also exchange Files, Documents, Images and everything else using the application's DCC capabilities. add smilies drawer/directory run wookiechat from the shell and set stack to 1000000 e.g. wookiechat stack 1000000 select a server / server window * nickname * user name * real name - optional Once you configure the client with your preferred screen name, you'll want to find a channel to talk in. servers * New Server - click on this to add / add extra - change details in section below this click box * New Group * Delete Entry * Connect to server * connect in new tab * perform on connect Change details * Servername - change text in this box to one of the below Server: * Port number - no need to change * Server password * Channel - add #channel from below * auto join - can click this * nick registration password, Click Connect to server button above <pre> Server: irc.freenode.net Channel: #aros </pre> irc://irc.freenode.net/aros <pre> Server: chat.amigaworld.net Channel: #amigaworld or #amigans </pre> <pre> On Sunday evenings USA time usually starting around 3PM EDT (1900 UTC) Server:irc.superhosts.net Channel #team*amiga </pre> <pre> BitlBee and Minbif are IRCd-like gateways to multiple IM networks Server: im.bitlbee.org Port 6667 Seems to be most useful on WookieChat as you can be connected to several servers at once. One for Bitlbee and any messages that might come through that. One for your normal IRC chat server. </pre> [http://www.bitlbee.org/main.php/servers.html Other servers], <pre> #Amiga.org - irc.synirc.net eu.synirc.net dissonance.nl.eu.synirc.net (IPv6: 2002:5511:1356:0:216:17ff:fe84:68a) twilight.de.eu.synirc.net zero.dk.eu.synirc.net us.synirc.net avarice.az.us.synirc.net envy.il.us.synirc.net harpy.mi.us.synirc.net liberty.nj.us.synirc.net snowball.mo.us.synirc.net - Ports 6660-6669 7001 (SSL) </pre> <pre> Multiple server support "Perform on connect" scripts and channel auto-joins Automatic Nickserv login Tabs for channels and private conversations CTCP PING, TIME, VERSION, SOUND Incoming and Outgoing DCC SEND file transfers Colours for different events Logging and automatic reloading of logs mIRC colour code filters Configurable timestamps GUI for changing channel modes easily Configurable highlight keywords URL Grabber window Optional outgoing swear word filter Event sounds for tabs opening, highlighted words, and private messages DCC CHAT support Doubleclickable URL's Support for multiple languages using LOCALE Clone detection Auto reconnection to Servers upon disconnection Command aliases Chat display can be toggled between AmIRC and mIRC style Counter for Unread messages Graphical nicklist and graphical smileys with a popup chooser </pre> ====IRC Aircos ==== Double click on Aircos icon in Extras:Networking/Apps/Aircos. It has been set up with a guest account for trial purposes. Though ideally, choose a nickname and password for frequent use of irc. ====IRC and XMPP Jabberwocky==== Servers are setup and close down at random You sign up to a server that someone else has setup and access chat services through them. The two ways to access chat from jabberwocky <pre > Jabberwocky -> Server -> XMPP -> open and ad-free Jabberwocky -> Server -> Transports (Gateways) -> Proprietary closed systems </pre > The Jabber.org service connects with all IM services that use XMPP, the open standard for instant messaging and presence over the Internet. The services we connect with include Google Talk (closed), Live Journal Talk, Nimbuzz, Ovi, and thousands more. However, you can not connect from Jabber.org to proprietary services like AIM, ICQ, MSN, Skype, or Yahoo because they don’t yet use XMPP components (XEP-0114) '''but''' you can use Jabber.com's servers and IM gateways (MSN, ICQ, Yahoo etc.) instead. The best way to use jabberwocky is in conjunction with a public jabber server with '''transports''' to your favorite services, like gtalk, Facebook, yahoo, ICQ, AIM, etc. You have to register with one of the servers, [https://list.jabber.at/ this list] or [http://www.jabberes.org/servers/ another list], [http://xmpp.net/ this security XMPP list], Unfortunately jabberwocky can only connect to one server at a time so it is best to check what services each server offers. If you set it up with separate Facebook and google talk accounts, for example, sometimes you'll only get one or the other. Jabberwocky open a window where the Jabber server part is typed in as well as your Nickname and Password. Jabber ID (JID) identifies you to the server and other users. Once registered the next step is to goto Jabberwocky's "Windows" menu and select the "Agents" option. The "Agents List" window will open. Roster (contacts list) [http://search.wensley.org.uk/ Chatrooms] (MUC) are available File Transfer - can send and receive files through the Jabber service but not with other services like IRC, ICQ, AIM or Yahoo. All you need is an installed webbrowser and OpenURL. Clickable URLs - The message window uses Mailtext.mcc and you can set a URL action in the MUI mailtext prefs like SYS:Utils/OpenURL %s NEWWIN. There is no consistent Skype like (H.323 VoIP) video conferencing available over Jabber. The move from xmpp to Jingle should help but no support on any amiga-like systems at the moment. [http://aminet.net/package/dev/src/AmiPhoneSrc192 AmiPhone] and [http://www.lysator.liu.se/%28frame,faq,nobg,useframes%29/ahi/v4-site/ Speak Freely] was an early attempt voice only contact. SIP and Asterisk are other PBX options. Facebook If you're using the XMPP transport provided by Facebook themselves, chat.facebook.com, it looks like they're now requiring SSL transport. This means jabberwocky method below will no longer work. The best thing to do is to create an ID on a public jabber server which has a Facebook gateway. <pre > 1. launch jabberwocky 2. if the login window doesn't appear on launch, select 'account' from the jabberwocky menu 3. your jabber ID will be user@chat.facebook.com where user is your user ID 4. your password is your normal facebook password 5. to save this for next time, click the popup gadget next to the ID field 6. click the 'add' button 7. click the 'close' button 8. click the 'connect' button </pre > you're done. you can also click the 'save as default account' button if you want. jabberwocky configured to auto-connect when launching the program, but you can configure as you like. there is amigaguide documentation included with jabberwocky. [http://amigaworld.net/modules/newbb/viewtopic.php?topic_id=37085&forum=32 Read more here] for Facebook users, you can log-in directly to Facebook with jabberwocky. just sign in as @chat.facebook.com with your Facebook password as the password Twitter For a few years, there has been added a twitter transport. Servers include [http://jabber.hot-chilli.net/ jabber.hot-chili.net], and . An [http://jabber.hot-chilli.net/tag/how-tos/ How-to] :Read [http://jabber.hot-chilli.net/2010/05/09/twitter-transport-working/ more] Instagram no support at the moment best to use a web browser based client ICQ The new version (beta) of StriCQ uses a newer ICQ protocol. Most of the ICQ Jabber Transports still use an older ICQ protocol. You can only talk one-way to StriCQ using the older Transports. Only the newer ICQv7 Transport lets you talk both ways to StriCQ. Look at the server lists in the first section to check. Register on a Jabber server, e.g. this one works: http://www.jabber.de/ Then login into Jabberwocky with the following login data e.g. xxx@jabber.de / Password: xxx Now add your ICQ account under the window->Agents->"Register". Now Jabberwocky connects via the Jabber.de server with your ICQ account. Yahoo Messenger although yahoo! does not use xmpp protocol, you should be able to use the transport methods to gain access and post your replies MSN early months of 2013 Microsoft will ditch MSN Messenger client and force everyone to use Skype...but MSN protocol and servers will keep working as usual for quite a long time.... Occasionally the Messenger servers have been experiencing problems signing in. You may need to sign in at www.outlook.com and then try again. It may also take multiple tries to sign in. (This also affects you if you’re using Skype.) You have to check each servers' Agents List to see what transports (MSN protocol, ICQ protocol, etc.) are supported or use the list address' provided in the section above. Then register with each transport (IRC, MSN, ICQ, etc.) to which you need access. After registering you can Connect to start chatting. msn.jabber.com/registered should appear in the window. From this [http://tech.dir.groups.yahoo.com/group/amiga-jabberwocky/message/1378 JW group] guide which helps with this process in a clear, step by step procedure. 1. Sign up on MSN's site for a passport account. This typically involves getting a Hotmail address. 2. Log on to the Jabber server of your choice and do the following: * Select the "Windows/Agents" menu option in Jabberwocky. * Select the MSN Agent from the list presented by the server. * Click the Register button to open a new window asking for: **Username = passort account email address, typically your hotmail address. **Nick = Screen name to be shown to anyone you add to your buddy list. **Password = Password for your passport account/hotmail address. * Click the Register button at the bottom of the new window. 3. If all goes well, you will see the MSN Gateway added to your buddy list. If not, repeat part 2 on another server. Some servers may show MSN in their list of available agents, but have not updated their software for the latest protocols used by MSN. 4. Once you are registered, you can now add people to your buddy list. Note that you need to include the '''msn.''' ahead of the servername so that it knows what gateway agent to use. Some servers may use a slight variation and require '''msg.gate.''' before the server name, so try both to see what works. If my friend's msn was amiga@hotmail.co.uk and my jabber server was @jabber.meta.net.nz.. then amiga'''%'''hotmail.com@'''msn.'''jabber.meta.net.nz or another the trick to import MSN contacts is that you don't type the hotmail URL but the passport URL... e.g. Instead of: goodvibe%hotmail.com@msn.jabber.com You type: goodvibe%passport.com@msn.jabber.com And the thing about importing contacts I'm afraid you'll have to do it by hand, one at the time... Google Talk any XMPP server will work, but you have to add your contacts manually. a google talk user is typically either @gmail.com or @talk.google.com. a true gtalk transport is nice because it brings your contacts to you and (can) also support file transfers to/from google talk users. implement Jingle a set of extensions to the IETF's Extensible Messaging and Presence Protocol (XMPP) support ended early 2014 as Google moved to Google+ Hangouts which uses it own proprietary format ===Video Player MPlayer=== Many of the menu features (such as doubling) do not work with the current version of mplayer but using 4:3 mplayer -vf scale=800:600 file.avi 16:9 mplayer -vf scale=854:480 file.avi if you want gui use; mplayer -gui 1 <other params> file.avi <pre > stack 1000000 ; using AspireOS 1.xx ; copy FROM SYS:Extras/Multimedia/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: ; using Icaros Desktop 1.x ; copy FROM SYS:Tools/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: ; using Icaros Desktop 2.x ; copy FROM SYS:Utilities/MPlayer/ TO RAM:MPlayer ALL CLONE > Nil: cd RAM:MPlayer run MPlayer -gui > Nil: ;run MPlayer -gui -ao ahi_dev -playlist http://www.radio-paralax.de/listen.pls > Nil: </pre > $ mplayer rtsp://127.0.0.1:554/sample_300kbit.mp4 MPlayer supports multicast streaming, and rtp/rtsp protocols (it might require [http://www.live555.com/openRTSP/ live555 library] to work with some streams). But you might have to build it where it's disabled. Also, multicast won't work with some AmiTCP-likes. MIAMI supported it, though. AROS supports IPv4 (old but works) and this includes the needed address space for RTP. If you mean multicast via RTP - mplayer handles it. You can even force UDP over TCP -rtsp-stream-over-tcp If the rtsp Real Time Streaming Protocol server needs authentification: -user -passwd MPlayer - Menu - Open Playlist and load already downloaded .pls or .m3u file - auto starts around 4 percent cache MPlayer - Menu - Open Stream and copy one of the .pls lines below into space allowed, press OK and press play button on main gui interface Old 8bit 16bit remixes chip tune game music http://www.radio-paralax.de/listen.pls http://scenesat.com/ http://www.shoutcast.com/radio/Amiga http://www.theoldcomputer.com/retro_radio/RetroRadio_Main.htm http://www.kohina.com/ http://www.remix64.com/ http://retrogamer.net/forum/ http://retroasylum.podomatic.com/rss2.xml http://retrogamesquad.com/ http://www.retronauts.com/ http://monsterfeet.com/noquarter/ http://www.retrogamingradio.com/ http://www.radiofeeds.co.uk/mp3.asp [[#top|...to the top]] ====ZunePaint==== simplified typical workflow * importing and organizing and photo management * making global and regional local correction(s) - recalculation is necessary after each adjustment as it is not in real-time * exporting your images in the best format available with the preservation of metadata Whilst achieving 80% of a great photo with just a filter, the remaining 20% comes from a manual fine-tuning of specific image attributes. For photojournalism, documentary, and event coverage, minimal touching is recommended. Stick to Camera Raw for such shots, and limit changes to level adjustment, sharpness, noise reduction, and white balance correction. For fashion or portrait shoots, a large amount of adjustment is allowed and usually ends up far from the original. Skin smoothing, blemish removal, eye touch-ups, etc. are common. Might alter the background a bit to emphasize the subject. Product photography usually requires a lot of sharpening, spot removal, and focus stacking. For landscape shots, best results are achieved by doing the maximum amount of preparation before/while taking the shot. No amount of processing can match timing, proper lighting, correct gear, optimal settings, etc. Excessive post-processing might give you a dramatic shot but best avoided in the long term. * White Balance - Left Amiga or F12 and K and under "Misc color effects" tab with a pull down for White Balance - color temperature also known as AKA tint (movies) or tones (painting) - warm temp raise red reduce green blue - cool raise blue lower red green * Exposure - exposure compensation, highlight/shadow recovery * Noise Reduction - during RAW development or using external software * Lens Corrections - distortion, vignetting, chromatic aberrations * Detail - capture sharpening and local contrast enhancement * Contrast - black point, levels (sliders) and curves tools (F12 and K) * Framing - straighten () and crop (F12 and F) * Refinements - color adjustments and selective enhancements - Left Amiga or F12 and K for RGB and YUV histogram tabs - * Resizing - enlarge for a print or downsize for the web or email (F12 and D) * Output Sharpening - customized for your subject matter and print/screen size White Balance - F12 and K scan your image for a shade which was meant to be white (neutral with each RGB value being equal) like paper or plastic which is in the same light as the subject of the picture. Use the dropper tool to select this color, similar colours will shift and you will have selected the perfect white balance for your part of the image - for the whole picture make sure RAZ or CLR button at the bottom is pressed before applying to the image above. Exposure correction F12 and K - YUV Y luminosity - RGB extra red tint - move red curve slightly down and move blue green curves slightly up Workflows in practice * Undo - Right AROS key or F12 and Z * Redo - Right AROS key or F12 and R First flatten your image (if necessary) and then do a rotation until the picture looks level. * Crop the picture. Click the selection button and drag a box over the area of the picture you want to keep. Press the crop button and the rest of the photo will be gone. * Adjust your saturation, exposure, hue levels, etc., (right AROS Key and K for color correction) until you are happy with the photo. Make sure you zoom in all of the way to 100% and look the photo over, zoom back out and move around. Look for obvious problems with the picture. * After coloring and exposure do a sharpen (Right AROS key and E for Convolution and select drop down option needed), e.g. set the matrix to 5x5 (roughly equivalent Amount to 60%) and set the Radius to 1.0. Click OK. And save your picture Implemented or would like to see for simplification and ease of use basic filters (presets) like black and white, monochrome, edge detection (sobel), motion/gaussian blur, * negative, sepiatone, retro vintage, night vision, colour tint, color gradient, color temperature, glows, fire, lightning, lens flare, emboss, filmic, pixelate mezzotint, antialias, etc. adjust / cosmetic tools such as crop, * reshaping tools, straighten, smear, smooth, perspective, liquify, bloat, pucker, push pixels in any direction, dispersion, transform like warp, blending with soft light, page-curl, whirl, ripple, fisheye, neon, etc. * red eye fixing, blemish remover, skin smoothing, teeth whitener, make eyes look brighter, desaturate, effects like oil paint, cartoon, pencil sketch, charcoal, noise/matrix like sharpen/unsharpen, (right AROS key with A for Artistic effects) * blend two image, gradient blend, masking blend, explode, implode, custom collage, surreal painting, comic book style, needlepoint, stained glass, watercolor, mosaic, stencil/outline, crayon, chalk, etc. borders such as * dropshadow, rounded, blurred, color tint, picture frame, film strip polaroid, bevelled edge, etc. brushes e.g. * frost, smoke, etc. and manual control of fix lens issues including vignetting (darkening), color fringing and barrel distortion, and chromatic and geometric aberration - lens and body profiles perspective correction levels - directly modify the levels of the tone-values of an image, by using sliders for highlights, midtones and shadows curves - Color Adjustment and Brightness/Contrast color balance one single color transparent (alpha channel (color information/selections) for masking and/or blending ) for backgrounds, etc. Threshold indicates how much other colors will be considered mixture of the removed color and non-removed colors decompose layer into a set of layers with each holding a different type of pattern that is visible within the image any selection using any selecting tools like lasso tool, marquee tool etc. the selection will temporarily be save to alpha If you create your image without transparency then the Alpha channel is not present, but you can add later. File formats like .psd (Photoshop file has layers, masks etc. contains edited sensor data. The original sensor data is no longer available) .xcf .raw .hdr Image Picture Formats * low dynamic range (JPEG, PNG, TIFF 8-bit), 16-bit (PPM, TIFF), typically as a 16-bit TIFF in either ProPhoto or AdobeRGB colorspace - TIFF files are also fairly universal – although, if they contain proprietary data, such as Photoshop Adjustment Layers or Smart Filters, then they can only be opened by Photoshop making them proprietary. * linear high dynamic range (HDR) images (PFM, [http://www.openexr.com/ ILM .EXR], jpg, [http://aminet.net/util/dtype cr2] (canon tiff based), hdr, NEF, CRW, ARW, MRW, ORF, RAF (Fuji), PEF, DCR, SRF, ERF, DNG files are RAW converted to an Adobe proprietary format - a container that can embed the raw file as well as the information needed to open it) An old version of [http://archives.aros-exec.org/index.php?function=browse&cat=graphics/convert dcraw] There is no single RAW file format. Each camera manufacturer has one or more unique RAW formats. RAW files contain the brightness levels data captured by the camera sensor. This data cannot be modified. A second smaller file, separate XML file, or within a database with instructions for the RAW processor to change exposure, saturation etc. The extra data can be changed but the original sensor data is still there. RAW is technically least compatible. A raw file is high-bit (usually 12 or 14 bits of information) but a camera-generated TIFF file will be usually converted by the camera (compressed, downsampled) to 8 bits. The raw file has no embedded color balance or color space, but the TIFF has both. These three things (smaller bit depth, embedded color balance, and embedded color space) make it so that the TIFF will lose quality more quickly with image adjustments than the raw file. The camera-generated TIFF image is much more like a camera processed JPEG than a raw file. A strong advantage goes to the raw file. The power of RAW files, such as the ability to set any color temperature non-destructively and will contain more tonal values. The principle of preserving the maximum amount of information to as late as possible in the process. The final conversion - which will always effectively represent a "downsampling" - should prevent as much loss as possible. Once you save it as TIFF, you throw away some of that data irretrievably. When saving in the lossy JPEG format, you get tremendous file size savings, but you've irreversibly thrown away a lot of image data. As long as you have the RAW file, original or otherwise, you have access to all of the image data as captured. Keyboard equivalence with Photoshop(tm) would help File PHOTOSHOP SHORTCUT GIMP New Ctrl+n New Open Ctrl+o Open Close Ctrl+w Close Save Ctrl+s Save Save as Shift+Ctrl+s Save as Revert F12 Revert Print Ctrl+p Print Exit Ctrl+q Quit Edit PHOTOSHOP SHORTCUT GIMP Undo/Redo (1 level) Ctrl+z Undo (Redo is Shift+Ctrl+z) Cut Ctrl+x Cut Copy Ctrl+c Copy Paste Ctrl+v Paste Paste Into Shift+Ctrl+v Paste Into Fill with FG color Alt+Backspace Fill with FG color Fill with BG color Control+Backspace Fill with BG color Image/Colors PHOTOSHOP SHORTCUT GIMP Levels Ctrl+l Levels Auto Contrast Shift+Ctrl+Alt+l Stretch Contrast (same?) Curves Ctrl+m Curves Color Balance Ctrl+b Color Balance Hue/Saturation Ctrl+u Hue-Saturation Desaturate Shift+Ctrl+u Desaturate Invert Ctrl+i Invert Default Colors d Default Colors Switch Colors x Switch Colors Layer PHOTOSHOP SHORTCUT GIMP New Layer Shift+Ctrl+n New Layer Layer via Copy Ctrl+j Duplicate Layer Bring (layer) to Front Shift+Ctrl+] Layer to Top Send (layer) to Back Shift+Ctrl+[ Layer to Bottom Bring (layer) Forward Ctrl+] Raise Layer Send (layer) Backward Ctrl+[ Lower Layer Select Top Layer Shift+Alt+] Select Top Layer Select Bottom Layer Shift+Alt+[ Select Bottom Layer Select One Layer Forward Alt+] Select Previous Layer Select One Layer Backward Alt+[ Select Next Layer Merge Down Ctrl+e Merge Down Merge Visible Shift+Ctrl+e Merge Visible Preserve Transparency / Keep Transparency Cycle Modes Forwards Shift+= Next Layer Mode Cycle Modes Backwards Shift+- Previous Layer Mode Select PHOTOSHOP SHORTCUT GIMP Select All Ctrl+a Select All Deselect Ctrl+d Select None Inverse Shift+Ctrl+i Invert Feather Ctrl+Alt+d Feather View PHOTOSHOP SHORTCUT GIMP Zoom In Ctrl+= Zoom In Zoom Out Ctrl+- Zoom Out Fit on Screen Ctrl+0 Zoom to Fit Window Actual Pixels Ctrl+Alt+0 Zoom 1:1 Show/Hide Extras Ctrl+h Toggle Show Selection (close enough?) Show/Hide Guides Ctrl+' Toggle Show Guides Show/Hide Grid Ctrl+Alt+' Toggle Show Grid Show/Hide Rulers Ctrl+r Toggle Show Rulers Snap Ctrl+; Snap to Guides Scroll View Up Page Up Scroll Page Up Scroll View Down Page Down Scroll Page Down Scroll View Left Ctrl+Page Up Scroll Page Left Scroll View Right Ctrl+Page Down Scroll Page Right Window/Dialogs PHOTOSHOP SHORTCUT GIMP ? F5 Tools Dialog Color Tab F6 Colors Dialog Layers Tab F7 Layers Dialog Info Tab F8 Image Information Tools PHOTOSHOP SHORTCUT GIMP Rectangular Marquee Tool m Rect Select Tool Elliptical Marquee Tool Shift+m Ellipse Select Tool *This is a toggle between 'Elliptical Marquee Tool' and 'Rectangular Marquee Tool' in Photoshop Move Tool v Move Tool Lasso Tool l Free Select Tool Magic Wand Tool w Fuzzy Select Tool Crop Tool c Crop & Resize Tool Airbrush Tool j Airbrush Tool Paintbrush Tool b Paintbrush Tool Clone Stamp Tool s Clone Stamp Tool Eraser Tool e Eraser Tool Gradient Tool g Blend Tool Paint Bucket Tool Shift+g Bucket Fill Tool *This is a toggle between 'Paint Bucket Tool' and 'Gradient Tool' in Photoshop Blur Tool r Convolve Tool Dodge Tool o DodgeBurn Tool Type Tool t Text Tool Pen Tool p Bezier Select Tool Eye Dropper Tool i Color Picker Tool Zoom Tool z Magnify Tool Previous Brush , Previous Brush Next Brush . Next Brush First Brush Shift+< First Brush Last Brush Shift+> Last Brush Decrease Brush Size [ Decrease Brush Size Increase Brush Size ] Increase Brush Size Decrease Brush Hardness { Decrease Brush Hardness Increase Brush Hardness } Increase Brush Hardness Help PHOTOSHOP SHORTCUT GIMP Help F1 Help Context Help Shift+F1 Context Help Misc. PHOTOSHOP SHORTCUT GIMP Last Filter Ctrl+f Repeat Last Filter ? Shift+Ctrl+f Reshow Last Filter Preferences Ctrl+k Preferences Liquify Shift+Ctrl+x IWarp (close enough?) Toggle Quick Mask q Toggle Quick Mask Spotlights - triangle of white opaque shape Cutting out and/or replacing unwanted background or features - select large areas with the selection option like the Magic Wand tool (aka Color Range) or the Lasso (quick and fast) with feather 2 to soften edge or the pen tool which adds points/lines/Bézier curves (better control but slower), hold down the shift button as you click to add extra points/areas of the subject matter to remove. Increase the tolerance to cover more areas. To subtract from your selection hold down alt as you're clicking. * Layer masks are a better way of working than Erase they clip (black hides/hidden white visible/reveal). Clone Stamp can be simulated by and brushes for other areas. * Leave the fine details like hair, fur, etc. to later with lasso and the shift key to draw a line all the way around your subject. Gradient Mapping - Inverse - Mask. i.e. Refine your selected image with edge detection and using the radius and edge options / adjuster (increase/decrease contrast) so that you will capture more fine detail from the background allowing easier removal. Remove fringe/halo saving image as png rather than jpg/jpeg to keep transparency background intact. Implemented [http://colorizer.org/ colour model representations] [http://paulbourke.net/texture_colour/colourspace/ Mathematical approach] - Photo stills are spatially 2d (h and w), but are colorimetrically 3d (r g and b, or H L S, or Y U V etc.) as well. * RGB - split cubed mapped color model for photos and computer graphics hardware using the light spectrum (adding and subtracting) * YUV - Y-Lightness U-blue/yellow V-red/cyan (similar to YPbPr and YCbCr) used in the PAL, NTSC, and SECAM composite digital TV color [http://crewofone.com/2012/chroma-subsampling-and-transcoding/#comment-7299 video] Histograms White balanced (neutral) if the spike happens in the same place in each channel of the RGB graphs. If not, you're not balanced. If you have sky you'll see the blue channel further off to the right. RGB is best one to change colours. These elements RGB is a 3-channel format containing data for Red, Green, and Blue in your photo scale between 0 and 255. The area in a picture that appears to be brighter/whiter contains more red color as compared to the area which is relatively darker. Similarly in the green channel the area that appears to be darker contains less amount of green color as compared to the area that appears to be brighter. Similarly in the blue channel the area appears to be darker contains less amount of blue color as compared to the area that appears to be brighter. Brightness luminance histogram also matches the green histogram more than any other color - human eye interprets green better e.g. RGB rough ratio 15/55/30% RGBA (RGB+A, A means alpha channel) . The alpha channel is used for "alpha compositing", which can mostly be associated as "opacity". AROS deals in RGB with two digits for every color (red, green, blue), in ARGB you have two additional hex digits for the alpha channel. The shadows are represented by the left third of the graph. The highlights are represented by the right third. And the midtones are, of course, in the middle. The higher the black peaks in the graph, the more pixels are concentrated in that tonal range (total black area). By moving the black endpoint, which identifies the shadows (darkness) and a white light endpoint (brightness) up and down either sides of the graph, colors are adjusted based on these points. By dragging the central one, can increased the midtones and control the contrast, raise shadows levels, clip or softly eliminate unsafe levels, alter gamma, etc... in a way that is much more precise and creative . RGB Curves * Move left endpoint (black point) up or right endpoint (white point) up brightens * Move left endpoint down or right endpoint down darkens Color Curves * Dragging up on the Red Curve increases the intensity of the reds in the image but * Dragging down on the Red Curve decreases the intensity of the reds and thus increases the apparent intensity of its complimentary color, cyan. Green’s complimentary color is magenta, and blue’s is yellow. <pre> Red <-> Cyan Green <->Magenta Blue <->Yellow </pre> YUV Best option to analyse and pull out statistical elements of any picture (i.e. separate luminance data from color data). The line in Y luma tone box represents the brightness of the image with the point in the bottom left been black, and the point in the top right as white. A low-contrast image has a concentrated clump of values nearer to the center of the graph. By comparison, a high-contrast image has a wider distribution of values across the entire width of the Histogram. A histogram that is skewed to the right would indicate a picture that is a bit overexposed because most of the color data is on the lighter side (increase exposure with higher value F), while a histogram with the curve on the left shows a picture that is underexposed. This is good information to have when using post-processing software because it shows you not only where the color data exists for a given picture, but also where any data has been clipped (extremes on edges of either side): that is, it does not exist and, therefore, cannot be edited. By dragging the endpoints of the line and as well as the central one, can increased the dark/shadows, midtones and light/bright parts and control the contrast, raise shadows levels, clip or softly eliminate unsafe levels, alter gamma, etc... in a way that is much more precise and creative . The U and V chroma parts show color difference components of the image. It’s useful for checking whether or not the overall chroma is too high, and also whether it’s being limited too much Can be used to create a negative image but also With U (Cb), the higher value you are, the more you're on the blue primary color. If you go to the low values then you're on blue complementary color, i.e. yellow. With V (Cr), this is the same principle but with Red and Cyan. e.g. If you push U full blue and V full red, you get magenta. If you push U full yellow and V full Cyan then you get green. YUV simultaneously adds to one side of the color equation while subtracting from the other. using YUV to do color correction can be very problematic because each curve alters the result of each other: the mutual influence between U and V often makes things tricky. You may also be careful in what you do to avoid the raise of noise (which happens very easily). Best results are obtained with little adjustments sunset that looks uninspiring and needs some color pop especially for the rays over the hill, a subtle contrast raise while setting luma values back to the legal range without hard clipping. ====Lunapaint==== Pixel based drawing app with onion-skin animation function Blocking, Shading, Coloring, adding detail <pre> b BRUSH e ERASER alt eyedropper v layer tool z ZOOM / MAGNIFY < > n spc panning m marque q lasso w same color selection / region </pre> <pre> , LM RM v V f filter F . size p , pick color [] last / next color </pre> There is not much missing in Lunapaint to be as good as FlipBook and then you have to take into account that Flipbook is considered to be amongst the best and easiest to use animation software out there. Ok to be honest Flipbook has some nice features that require more heavy work but those aren't so much needed right away, things like camera effects, sound, smart fill, export to different movie file formats etc. Tried Flipbook with my tablet and compared it to Luna. The feeling is the same when sketching. LunaPaint is very responsive/fluent to draw with. Just as Flipbook is, and that responsiveness is something its users have mentioned as one of the positive sides of said software. author was learning MUI. Some parts just have to be rewritten with proper MUI classes before new features can be added. * add [Frame Add] / [Frame Del] * whole animation feature is impossible to use. If you draw 2 color maybe but if you start coloring your cells then you get in trouble * pickup the entire image as a brush, not just a selection ? And consequently remove the brush from memory when one doesn't need it anymore. can pick up a brush and put it onto a new image but cropping isn't possible, nor to load/save brushes. * Undo is something I longed for ages in Lunapaint. * to import into the current layer, other types of images (e.g. JPEG) besides RAW64. * implement graphic tablet features support **GENERAL DRAWING** Miss it very much: UNDO ERASER COLORPICKER - has to show on palette too which color got picked. BACKGROUND COLOR -Possibility to select from "New project screen" Miss it somewhat: ICON for UNDO ICON for ERASER ICON for CLEAR SCREEN ( What can I say? I start over from scratch very often ) BRUSH - possibility to cut out as brush not just copy off image to brush **ANIMATING** Miss it very much: NUMBER OF CELLS - Possibity to change total no. of cells during project ANIM BRUSH - Possibility to pick up a selected part of cells into an animbrush Miss it somewhat: ADD/REMOVE FRAMES: Add/remove single frame In general LunaPaint is really well done and it feels like a new DeluxePaint version. It works with my tablet. Sure there's much missing of course but things can always be added over time. So there is great potential in LunaPaint that's for sure. Animations could be made in it and maybe put together in QuickVideo, saving in .gif or .mng etc some day. LAYERS -Layers names don't get saved globally in animation frames -Layers order don't change globally in an animation (perhaps as default?). EXPORTING IMAGES -Exporting frames to JPG/PNG gives problems with colors. (wrong colors. See my animatiopn --> My robot was blue now it's "gold" ) I think this only happens if you have layers. -Trying to flatten the layers before export doesn't work if you have animation frames only the one you have visible will flatten properly all other frames are destroyed. (Only one of the layers are visible on them) -Exporting images filenames should be for example e.g. file0001, file0002...file0010 instead as of now file1, file2...file10 LOAD/SAVE (Preferences) -Make a setting for the default "Work" folder. * Destroyed colors if exported image/frame has layers * mystic color cycling of the selected color while stepping frames back/forth (annoying) <pre> Deluxe Paint II enhanced key shortcuts NOTE: @ denotes the ALT key [Technique] F1 - Paint F2 - Single Colour F3 - Replace F4 - Smear F5 - Shade F6 - Cycle F7 - Smooth M - Colour Cycle [Brush] B - Restore O - Outline h - Halve brush size H - Double brush size x - Flip brush on X axis X - Double brush size on X axis only y - Flip on Y Y - Double on Y z - Rotate brush 90 degrees Z - Stretch [Stencil] ` - Stencil On [Miscellaneous] F9 - Info Bar F10 - Selection Bar @o - Co-Ordinates @a - Anti-alias @r - Colourise @t - Translucent TAB - Colour Cycle [Picture] L - Load S - Save j - Page to Spare(Flip) J - Page to Spare(Copy) V - View Page Q - Quit [General Keys] m - Magnify < - Zoom In > - Zoom Out [ - Palette Colour Up ] - Palette Colour Down ( - Palette Colour Left ) - Palette Colour Right , - Eye Dropper . - Pixel / Brush Toggle / - Symmetry | - Co-Ordinates INS - Perspective Control +/- - Brush Size (Fine Control) w - Unfilled Polygon W - Filled Polygon e - Unfilled Ellipse E - Filled Ellipse r - Unfilled Rectangle R - Filled Rectangle t - Type/text tool a - Select Font u/U - Undo d - Brush D - Filled Non-Uniform Polygon f/F - Fill Options g/G - Grid h/H - Brush Size (Coarse Control) K - Clear c - Unfilled Circle C - Filled Circle v - Line b - Scissor Select and Toggle B - Brush {,} - Toggle between two background colours </pre> ====Lodepaint==== Pixel based painting artwork app ====Grafx2==== Pixel based painting artwork app aesprite like [https://www.youtube.com/watch?v=59Y6OTzNrhk aesprite workflow keys and tablet use], [], ====Vector Graphics ZuneFIG==== Vector Image Editing of files .svg .ps .eps *Objects - raise lower rotate flip aligning snapping *Path - unify subtract intersect exclude divide *Colour - fill stroke *Stroke - size *Brushes - *Layers - *Effects - gaussian bevels glows shadows *Text - *Transform - AmiFIG ([http://epb.lbl.gov/xfig/frm_introduction.html xfig manual]) [[File:MyScreen.png|thumb|left|alt=Showing all Windows open in AmiFIG.|All windows available to AmiFIG.]] for drawing simple to intermediate vector graphic images for scientific and technical uses and for illustration purposes for those with talent ;Menu options * Load - fig format but import(s) SVG * Save - fig format but export(s) eps, ps, pdf, svg and png * PAN = Ctrl + Arrow keys * Deselect all points There is no selected object until you apply the tool, and the selected object is not highlighted. ;Metrics - to set up page and styles - first window to open on new drawings ;Tools - Drawing Primitives - set Attributes window first before clicking any Tools button(s) * Shapes - circles, ellipses, arcs, splines, boxes, polygon * Lines - polylines * Text "T" button * Photos - bitmaps * Compound - Glue, Break, Scale * POINTs - Move, Add, Remove * Objects - Move, Copy, Delete, Mirror, Rotate, Paste use right mouse button to stop extra lines, shapes being formed and the left mouse to select/deselect tools button(s) * Rotate - moves in 90 degree turns centered on clicked POINT of a polygon or square ;Attributes which provide change(s) to the above primitives * Color * Line Width * Line Style * arrowheads ;Modes Choose from freehand, charts, figures, magnet, etc. ;Library - allows .fig clip-art to be stored * compound tools to add .fig(s) together ;FIG 3.2 [http://epb.lbl.gov/xfig/fig-format.html Format] as produced by xfig version 3.2.5 <pre> Landscape Center Inches Letter 100.00 Single -2 1200 2 4 0 0 50 -1 0 12 0.0000 4 135 1050 1050 2475 This is a test.01 </pre> # change the text alignment within the textbox. I can choose left, center, or right aligned by either changing the integer in the second column from 0 (left) to 1 or 2 (center, or right). # The third integer in the row specifies fontcolor. For instance, 0 is black, but blue is 1 and Green3 is 13. # The sixth integer in the bottom row specifies fontface. 0 is Times-Roman, but 16 is Helvetica (a MATLAB default). # The seventh number is fontsize. 12 represents a 12pt fontsize. Changing the fontsize of an item really is as easy as changing that number to 20. # The next number is the counter-clockwise angle of the text. Notice that I have changed the angle to .7854 (pi/4 rounded to four digits=45 degrees). # twelfth number is the position according to the standard “x-axis” in Xfig units from the left. Note that 1200 Xfig units is equivalent to once inch. # thirteenth number is the “y-position” from the top using the same unit convention as before. * The nested text string is what you entered into the textbox. * The “01″ present at the end of that line in the .fig file is the closing tag. For instance, a change to \100 appends a @ symbol at the end of the period of that sentence. ; Just to note there are no layers, no 3d functions, no shading, no transparency, no animation [[#top|...to the top]] ===Audio=== # AHI uses linear panning/balance, which means that in the center, you will get -6dB. If an app uses panning, this is what you will get. Note that apps like Audio Evolution need panning, so they will have this problem. # When using AHI Hifi modes, mixing is done in 32-bit and sent as 32-bit data to the driver. The Envy24HT driver uses that to output at 24-bit (always). # For the Envy24/Envy24HT, I've made 16-bit and 24-bit inputs (called Line-in 16-bit, Line-in 24-bit etc.). There is unfortunately no app that can handle 24-bit recording. ====Music Mods==== Digital module (mods) trackers are music creation software using samples and sometimes soundfonts, audio plugins (VST, AU or RTAS), MIDI. Generally, MODs are similar to MIDI in that they contain note on/off and other sequence messages that control the mod player. Unlike (most) midi files, however, they also contain sound samples that the sequence information actually plays. MOD files can have many channels (classic amiga mods have 4, corresponding to the inbuilt sound channels), but unlike MIDI, each channel can typically play only one note at once. However, since that note might be a sample of a chord, a drumloop or other complex sound, this is not as limiting as it sounds. Like MIDI, notes will play indefinitely if they're not instructed to end. Most trackers record this information automatically if you play your music in live. If you're using manual note entry, you can enter a note-off command with a keyboard shortcut - usually Caps Lock. In fact when considering file size MOD is not always the best option. Even a dummy song wastes few kilobytes for nothing when a simple SID tune could be few hundreds bytes and not bigger than 64kB. AHX is another small format, AHX tunes are never larger than 64kB excluding comments. [https://www.youtube.com/watch?v=rXXsZfwgil Protrekkr] (previously aka [w:Juan_Antonio_Arguelles_Rius|NoiseTrekkr]) If Protrekkr does not start, please check if the Unit 0 has been setup in the AHI prefs and still not, go to the directory utilities/protrekkr and double click on the Protrekkr icon *Sample *Note - Effect *Track (column) - Pattern - Order It all starts with the Sample which is used to create Note(s) in a Track (column of a tracker) The Note can be changed with an Effect. A Track of Note(s) can be collected into a Pattern (section of a song) and these can be given Order to create the whole song. Patience (notes have to be entered one at a time) or playing the bassline on a midi controller (faster - see midi section above). Best approach is to wait until a melody popped into your head. *Up-tempo means the track should be reasonably fast, but not super-fast. *Groovy and funky imply the track should have some sort of "swing" feel, with plenty of syncopation or off beat emphasis and a recognizable, melodic bass line. *Sweet and happy mean upbeat melodies, a major key and avoiding harsh sounds. *Moody - minor key First, create a quick bass sound, which is basically a sine wave, but can be hand drawn for a little more variance. It could also work for the melody part, too. This is usually a bass guitar or some kind of synthesizer bass. The bass line is often forgotten by inexperienced composers, but it plays an important role in a musical piece. Together with the rhythm section the bass line forms the groove of a song. It's the glue between the rhythm section and the melodic layer of a song. The drums are just pink noise samples, played at different frequencies to get a slightly different sound for the kick, snare, and hihats. Instruments that fall into the rhythm category are bass drums, snares, hi-hats, toms, cymbals, congas, tambourines, shakers, etc. Any percussive instrument can be used to form part of the rhythm section. The lead is the instrument that plays the main melody, on top of the chords. There are many instruments that can play a lead section, like a guitar, a piano, a saxophone or a flute. The list is almost endless. There is a lot of overlap with instruments that play chords. Often in one piece an instrument serves both roles. The lead melody is often played at a higher pitch than the chords. Listened back to what was produced so far, and a counter-melody can be imagined, which can be added with a triangle wave. To give the ends of phrases some life, you can add a solo part with a crunchy synth. By hitting random notes in the key of G, then edited a few of them. For the climax of the song, filled out the texture with a gentle high-pitch pad… …and a grungy bass synth. The arrow at A points at the pattern order list. As you see, the patterns don't have to be in numerical order. This song starts with pattern "00", then pattern "02", then "03", then "01", etcetera. Patterns may be repeated throughout a song. The B arrow points at the song title. Below it are the global BPM and speed parameters. These determine the tempo of the song, unless the tempo is altered through effect commands during the song. The C arrow points at the list of instruments. An instrument may consist of multiple samples. Which sample will be played depends on the note. This can be set in the Instrument Editing screen. Most instruments will consist of just one sample, though. The sample list for the selected instrument can be found under arrow D. Here's a part of the main editing screen. This is where you put in actual notes. Up to 32 channels can be used, meaning 32 sounds can play simultaneously. The first six channels of pattern "03" at order "02" are shown here. The arrow at A points at the row number. The B arrow points at the note to play, in this case a C4. The column pointed at by the C arrow tells us which instrument is associated with that note, in this case instrument #1 "Kick". The column at D is used (mainly) for volume commands. In this case it is left empty which means the instrument should play at its default volume. You can see the volume column being used in channel #6. The E column tells us which effect to use and any parameters for that effect. In this case it holds the "F" effect, which is a tempo command. The "04" means it should play at tempo 4 (a smaller number means faster). Base pattern When I create a new track I start with what I call the base pattern. It is worthwhile to spend some time polishing it as a lot of the ideas in the base pattern will be copied and used in other patterns. At least, that's how I work. Every musician will have his own way of working. In "Wild Bunnies" the base pattern is pattern "03" at order "02". In the section about selecting samples I talked about the four different categories of instruments: drums, bass, chords and leads. That's also how I usually go about making the base pattern. I start by making a drum pattern, then add a bass line, place some chords and top it off with a lead. This forms the base pattern from which the rest of the song will grow. Drums Here's a screenshot of the first four rows of the base pattern. I usually reserve the first four channels or so for the drum instruments. Right away there are a couple of tricks shown here. In the first channel the kick, or bass drum, plays some notes. Note the alternating F04 and F02 commands. The "F" command alters the tempo of the song and by quickly alternating the tempo; the song will get some kind of "swing" feel. In the second channel the closed hi-hat plays a fairly simple pattern. Further down in the channel, not shown here, some open hi-hat notes are added for a bit of variation. In the third and fourth channel the snare sample plays. The "8" command is for panning. One note is panned hard to the left and the other hard to the right. One sample is played a semitone lower than the other. This results in a cool flanging effect. It makes the snare stand out a little more in the mix. Bass line There are two different instruments used for the bass line. Instrument #6 is a pretty standard synthesized bass sound. Instrument #A sounds a bit like a slap bass when used with a quick fade out. By using two different instruments the bass line sounds a bit more ”human”. The volume command is used to cut off the notes. However, it is never set to zero. Setting the volume to a very small value will result in a reverb-like effect. This makes the song sound more "live". The bass line hints at the chords that will be played and the key the song will be in. In this case the key of the song is D-major, a positive and happy key. Chords The D major chords that are being played here are chords stabs; short sounds with a quick decay (fade out). Two different instruments (#8 and #9) are used to form the chords. These instruments are quite similar, but have a slightly different sound, panning and volume decay. Again, the reason for this is to make the sound more human. The volume command is used on some chords to simulate a delay, to achieve more of a live feel. The chords are placed off-beat making for a funky rhythm. Lead Finally the lead melody is added. The other instruments are invaluable in holding the track together, but the lead melody is usually what catches people's attention. A lot of notes and commands are used here, but it looks more complex than it is. A stepwise ascending melody plays in channel 13. Channel 14 and 15 copy this melody, but play it a few rows later at a lower volume. This creates an echo effect. A bit of panning is used on the notes to create some stereo depth. Like with the bass line, instead of cutting off notes the volume is set to low values for a reverb effect. The "461" effect adds a little vibrato to the note, which sounds nice on sustained notes. Those paying close attention may notice the instrument used here for the lead melody is the same as the one used for the bass line (#6 "Square"), except played two or three octaves higher. This instrument is a looped square wave sample. Each type of wave has its own quirks, but the square wave (shown below) is a really versatile wave form. Song structure Good, catchy songs are often carefully structured into sections, some of which are repeated throughout the song with small variations. A typical pop-song structure is: Intro - Verse - Chorus - Verse - Chorus - Bridge - Chorus. Other single sectional song structures are <pre> Strophic or AAA Song Form - oldest story telling with refrain (often title of the song) repeated in every verse section melody AABA Song Form - early popular, jazz and gospel fading during the 1960s AB or Verse/Chorus Song Form - songwriting format of choice for modern popular music since the 1960s Verse/Chorus/Bridge Song Form ABAB Song Form ABAC Song Form ABCD Song Form AAB 12-Bar Song Form - three four-bar lines or sub-sections 8-Bar Song Form 16-Bar Song Form Hybrid / Compound Song Forms </pre> The most common building blocks are: #INTRODUCTION(INTRO) #VERSE #REFRAIN #PRE-CHORUS / RISE / CLIMB #CHORUS #BRIDGE #MIDDLE EIGHT #SOLO / INSTRUMENTAL BREAK #COLLISION #CODA / OUTRO #AD LIB (OFTEN IN CODA / OUTRO) The chorus usually has more energy than the verse and often has a memorable melody line. As the chorus is repeated the most often during the song, it will be the part that people will remember. The bridge often marks a change of direction in the song. It is not uncommon to change keys in the bridge, or at least to use a different chord sequence. The bridge is used to build up tension towards the big finale, the last repetition of chorus. Playing RCTRL: Play song from row 0. LSHIFT + RCTRL: Play song from current row. RALT: Play pattern from row 0. LSHIFT + RALT: Play pattern from current row. Left mouse on '>': Play song from row 0. Right mouse on '>': Play song from current row. Left mouse on '|>': Play pattern from row 0. Right mouse on '|>': Play pattern from current row. Left mouse on 'Edit/Record': Edit mode on/off. Right mouse on 'Edit/Record': Record mode on/off. Editing LSHIFT + ESCAPE: Switch large patterns view on/off TAB: Go to next track LSHIFT + TAB: Go to prev. track LCTRL + TAB: Go to next note in track LCTRL + LSHIFT + TAB: Go to prev. note in track SPACE: Toggle Edit mode On & Off (Also stop if the song is being played) SHIFT SPACE: Toggle Record mode On & Off (Wait for a key note to be pressed or a midi in message to be received) DOWN ARROW: 1 Line down UP ARROW: 1 Line up LEFT ARROW: 1 Row left RIGHT ARROW: 1 Row right PREV. PAGE: 16 Arrows Up NEXT PAGE: 16 Arrows Down HOME / END: Top left / Bottom right of pattern LCTRL + HOME / END: First / last track F5, F6, F7, F8, F9: Jump to 0, 1/4, 2/4, 3/4, 4/4 lines of the patterns + - (Numeric keypad): Next / Previous pattern LCTRL + LEFT / RIGHT: Next / Previous pattern LCTRL + LALT + LEFT / RIGHT: Next / Previous position LALT + LEFT / RIGHT: Next / Previous instrument LSHIFT + M: Toggle mute state of the current channel LCTRL + LSHIFT + M: Solo the current track / Unmute all LSHIFT + F1 to F11: Select a tab/panel LCTRL + 1 to 4: Select a copy buffer Tracking 1st and 2nd keys rows: Upper octave row 3rd and 4th keys rows: Lower octave row RSHIFT: Insert a note off / and * (Numeric keypad) or F1 F2: -1 or +1 octave INSERT / BACKSPACE: Insert or Delete a line in current track or current selected block. LSHIFT + INSERT / BACKSPACE: Insert or Delete a line in current pattern DELETE (NOT BACKSPACE): Empty a column or a selected block. Blocks (Blocks can also be selected with the mouse by holding the right button and scrolling the pattern with the mouse wheel). LCTRL + A: Select entire current track LCTRL + LSHIFT + A: Select entire current pattern LALT + A: Select entire column note in a track LALT + LSHIFT + A: Select all notes of a track LCTRL + X: Cut the selected block and copy it into the block-buffer LCTRL + C: Copy the selected block into the block-buffer LCTRL + V: Paste the data from the block buffer into the pattern LCTRL + I: Interpolate selected data from the first to the last row of a selection LSHIFT + ARROWS PREV. PAGE NEXT PAGE: Select a block LCTRL + R: Randomize the select columns of a selection, works similar to CTRL + I (interpolating them) LCTRL + U: Transpose the note of a selection to 1 seminote higher LCTRL + D: Transpose the note of a selection to 1 seminote lower LCTRL + LSHIFT + U: Transpose the note of a selection to 1 seminote higher (only for the current instrument) LCTRL + LSHIFT + D: Transpose the note of a selection to 1 seminote lower (only for the current instrument) LCTRL + H: Transpose the note of a selection to 1 octave higher LCTRL + L: Transpose the note of a selection to 1 octave lower LCTRL + LSHIFT + H: Transpose the note of a selection to 1 octave higher (only for the current instrument) LCTRL + LSHIFT + L: Transpose the note of a selection to 1 octave lower (only for the current instrument) LCTRL + W: Save the current selection into a file Misc LALT + ENTER: Switch between full screen / windowed mode LALT + F4: Exit program (Windows only) LCTRL + S: Save current module LSHIFT + S: Switch top right panel to synths list LSHIFT + I: Switch top right panel to instruments list <pre> C-x xh xx xx hhhh Volume B-x xh xx xx hhhh Jump to A#x xh xx xx hhhh hhhh Slide F-x xh xx xx hhhh Tempo D-x xh xx xx hhhh Pattern Break G#x xh xx xx hhhh </pre> h Hex 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 d Dec 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 The Set Volume command: C. Input a note, then move the cursor to the effects command column and type a C. Play the pattern, and you shouldn't be able to hear the note you placed the C by. This is because the effect parameters are 00. Change the two zeros to a 40(Hex)/64(Dec), depending on what your tracker uses. Play back the pattern again, and the note should come in at full volume. The Position Jump command next. This is just a B followed by the position in the playing list that you want to jump to. One thing to remember is that the playing list always starts at 0, not 1. This command is usually in Hex. Onto the volume slide command: A. This is slightly more complex (much more if you're using a newer tracker, if you want to achieve the results here, then set slides to Amiga, not linear), due to the fact it depends on the secondary tempo. For now set a secondary tempo of 06 (you can play around later), load a long or looped sample and input a note or two. A few rows after a note type in the effect command A. For the parameters use 0F. Play back the pattern, and you should notice that when the effect kicks in, the sample drops to a very low volume very quickly. Change the effect parameters to F0, and use a low volume command on the note. Play back the pattern, and when the slide kicks in the volume of the note should increase very quickly. This because each part of the effect parameters for command A does a different thing. The first number slides the volume up, and the second slides it down. It's not recommended that you use both a volume up and volume down at the same time, due to the fact the tracker only looks for the first number that isn't set to 0. If you specify parameters of 8F, the tracker will see the 8, ignore the F, and slide the volume up. Using a slide up and down at same time just makes you look stupid. Don't do it... The Set Tempo command: F, is pretty easy to understand. You simply specify the BPM (in Hex) that you want to change to. One important thing to note is that values of lower than 20 (Hex) sets the secondary tempo rather than the primary. Another useful command is the Pattern Break: D. This will stop the playing of the current pattern and skip to the next one in the playing list. By using parameters of more than 00 you can also specify which line to begin playing from. Command 3 is Portamento to Note. This slides the currently playing note to another note, at a specified speed. The slide then stops when it reaches the desired note. <pre> C-2 1 000 - Starts the note playing --- 000 C-3 330 - Starts the slide to C-3 at a speed of 30. --- 300 - Continues the slide --- 300 - Continues the slide </pre> Once the parameters have been set, the command can be input again without any parameters, and it'll still perform the same function unless you change the parameters. This memory function allows certain commands to function correctly, such as command 5, which is the Portamento to Note and Volume Slide command. Once command 3 has been set up command 5 will simply take the parameters from that and perform a Portamento to Note. Any parameters set up for command 5 itself simply perform a Volume Slide identical to command A at the same time as the Portamento to Note. This memory function will only operate in the same channel where the original parameters were set up. There are various other commands which perform two functions at once. They will be described as we come across them. C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 00 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 02 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 05 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 08 C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 0A C-3 04 .. .. 09 00 ---> C-3 04 .. .. 09 0D C-3 04 .. .. 09 10 ---> C-3 04 .. .. 09 10 (You can also switch on the Slider Rec to On, and perform parameter-live-recording, such as cutoff transitions, resonance or panning tweaking, etc..) Note: this command only works for volume/panning and fx datas columns. The next command we'll look at is the Portamento up/down: 1 and 2. Command 1 slides the pitch up at a specified speed, and 2 slides it down. This command works in a similar way to the volume slide, in that it is dependent on the secondary tempo. Both these commands have a memory dependent on each other, if you set the slide to a speed of 3 with the 1 command, a 2 command with no parameters will use the speed of 3 from the 1 command, and vice versa. Command 4 is Vibrato. Vibrato is basically rapid changes in pitch, just try it, and you'll see what I mean. Parameters are in the format of xy, where x is the speed of the slide, and y is the depth of the slide. One important point to remember is to keep your vibratos subtle and natural so a depth of 3 or less and a reasonably fast speed, around 8, is usually used. Setting the depth too high can make the part sound out of tune from the rest. Following on from command 4 is command 6. This is the Vibrato and Volume Slide command, and it has a memory like command 5, which you already know how to use. Command 7 is Tremolo. This is similar to vibrato. Rather than changing the pitch it slides the volume. The effect parameters are in exactly the same format. vibrato effect (0x1dxy) x = speed y = depth (can't be used if arpeggio (0x1b) is turned on) <pre> C-7 00 .. .. 1B37 <- Turn Arpeggio effect on --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 1B38 <- Change datas --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 0000 --- .. .. .. 1B00 <- Turn it off </pre> Command 9 is Sample Offset. This starts the playback of the sample from a different place than the start. The effect parameters specify the sample offset, but only very roughly. Say you have a sample which is 8765(Hex) bytes long, and you wanted it to play from position 4321(Hex). The effect parameter could only be as accurate as the 43 part, and it would ignore the 21. Command B is the Playing List/Order Jump command. The parameters specify the position in the Playing List/Order to jump to. When used in conjunction with command D you can specify the position and the line to play from. Command E is pretty complex, as it is used for a lot of different things, depending on what the first parameter is. Let's take a trip through each effect in order. Command E0 controls the hardware filter on an Amiga, which, as a low pass filter, cuts off the highest frequencies being played back. There are very few players and trackers on other system that simulate this function, not that you should need to use it. The second parameter, if set to 1, turns on the filter. If set to 0, the filter gets turned off. Commands E1/E2 are Fine Portamento Up/Down. Exactly the same functions as commands 1/2, except that they only slide the pitch by a very small amount. These commands have a memory the same as 1/2 as well. Command E3 sets the Glissando control. If parameters are set to 1 then when using command 3, any sliding will only use the notes in between the original note and the note being slid to. This produces a somewhat jumpier slide than usual. The best way to understand is to try it out for yourself. Produce a slow slide with command 3, listen to it, and then try using E31. Command E4 is the Set Vibrato Waveform control. This command controls how the vibrato command slides the pitch. Parameters are 0 - Sine, 1 - Ramp Down (Saw), 2 - Square. By adding 4 to the parameters, the waveform will not be restarted when a new note is played e.g. 5 - Sine without restart. Command E5 sets the Fine Tune of the instrument being played, but only for the particular note being played. It will override the default Fine Tune for the instrument. The parameters range from 0 to F, with 0 being -8 and F being +8 Fine Tune. A parameter of 8 gives no Fine Tune. If you're using a newer tracker that supports more than -8 to +8 e.g. -128 to +128, these parameters will give a rough Fine Tune, accurate to the nearest 16. Command E6 is the Jump Loop command. You mark the beginning of the part of a pattern that you want to loop with E60, and then specify with E6x the end of the loop, where x is the number of times you want it to loop. Command E7 is the Set Tremolo Waveform control. This has exactly the same parameters as command E4, except that it works for Tremolo rather than Vibrato. Command E9 is for Retriggering the note quickly. The parameter specifies the interval between the retrigs. Use a value of less than the current secondary tempo, or else the note will not get retrigged. Command EA/B are for Fine Volume Slide Up/Down. Much the same as the normal Volume Slides, except that these are easier to control since they don't depend on the secondary tempo. The parameters specify the amount to slide by e.g. if you have a sample playing at a volume of 08 (Hex) then the effect EA1 will slide this volume to 09 (Hex). A subsequent effect of EB4 would slide this volume down to 05 (Hex). Command EC is the Note Cut. This sets the volume of the currently playing note to 0 at a specified tick. The parameters should be lower than the secondary tempo or else the effect won't work. Command ED is the Note Delay. This should be used at the same time as a note is to be played, and the parameters will specify the number of ticks to delay playing the note. Again, keep the parameters lower than the secondary tempo, or the note won't get played! Command EE is the Pattern Delay. This delays the pattern for the amount of time it would take to play a certain number of rows. The parameters specify how many rows to delay for. Command EF is the Funk Repeat command. Set the sample loop to 0-1000. When EFx is used, the loop will be moved to 1000- 2000, then to 2000-3000 etc. After 9000-10000 the loop is set back to 0- 1000. The speed of the loop "movement" is defined by x. E is two times as slow as F, D is three times as slow as F etc. EF0 will turn the Funk Repeat off and reset the loop (to 0-1000). effects 0x41 and 0x42 to control the volumes of the 2 303 units There is a dedicated panel for synth parameter editing with coherent sections (osc, filter modulation, routing, so on) the interface is much nicer, much better to navigate with customizable colors, the reverb is now customizable (10 delay lines), It accepts newer types of Waves (higher bit rates, at least 24). Has a replay routine. It's pretty much your basic VA synth. The problem isn't with the sampler being to high it's the synth is tuned two octaves too low, but if you want your samples tuned down just set the base note down 2 octaves (in the instrument panel). so the synth is basically divided into 3 sections from left to right: oscillators/envelopes, then filter and LFO's, and in the right column you have mod routings and global settings. for the oscillator section you have two normal oscillators (sine, saw, square, noise), the second of which is tunable, the first one tunes with the key pressed. Attached to OSC 1 is a sub-oscillator, which is a sawtooth wave tuned one octave down. The phase modulation controls the point in the duty cycle at which the oscillator starts. The ADSR envelope sliders (grouped with oscs) are for modulation envelope 1 and 2 respectively. you can use the synth as a sampler by choosing the instrument at the top. In the filter column, the filter settings are: 1 = lowpass, 2 = highpass, 3 = off. cutoff and resonance. For the LFOs they are LFO 1 and LFO 2, the ADSR sliders in those are for the LFO itself. For the modulation routings you have ENV 1, LFO 1 for the first slider and ENV 2, LFO 2 for the second, you can cycle through the individual routings there, and you can route each modulation source to multiple destinations of course, which is another big plus for this synth. Finally the glide time is for portamento and master volume, well, the master volume... it can go quite loud. The sequencer is changed too, It's more like the one in AXS if you've used that, where you can mute tracks to re-use patterns with variation. <pre> Support for the following modules formats: 669 (Composer 669, Unis 669), AMF (DSMI Advanced Module Format), AMF (ASYLUM Music Format V1.0), APUN (APlayer), DSM (DSIK internal format), FAR (Farandole Composer), GDM (General DigiMusic), IT (Impulse Tracker), IMF (Imago Orpheus), MOD (15 and 31 instruments), MED (OctaMED), MTM (MultiTracker Module editor), OKT (Amiga Oktalyzer), S3M (Scream Tracker 3), STM (Scream Tracker), STX (Scream Tracker Music Interface Kit), ULT (UltraTracker), UNI (MikMod), XM (FastTracker 2), Mid (midi format via timidity) </pre> Possible plugin options include [http://lv2plug.in/ LV2], ====Midi - Musical Instrument Digital Interface==== A midi file typically contains music that plays on up to 16 channels (as per the midi standard), but many notes can simultaneously play on each channel (depending on the limit of the midi hardware playing it). '''Timidity''' Although usually already installed, you can uncompress the [http://www.libsdl.org/projects/SDL_mixer/ timidity.tar.gz (14MB)] into a suitable drawer like below's SYS:Extras/Audio/ assign timidity: SYS:Extras/Audio/timidity added to SYSːs/User-Startup '''WildMidi playback''' '''Audio Evolution 4 (2003) 4.0.23 (from 2012)''' *Sync Menu - CAMD Receive, Send checked *Options Menu - MIDI Machine Control - Midi Bar Display - Select CAMD MIDI in / out - Midi Remote Setup MCB Master Control Bus *Sending a MIDI start-command and a Song Position Pointer, you can synchronize audio with an external MIDI sequencer (like B&P). *B&P Receive, start AE, add AudioEvolution.ptool in Bars&Pipes track, press play / record in AE then press play in Pipes *CAMD Receive, receive MIDI start or continue commands via camd.library sync to AE *MIDI Machine Control *Midi Bar Display *Select CAMD MIDI in / out *Midi Remote Setup - open requester for external MIDI controllers to control app mixer and transport controls cc remotely Channel - mixer(vol, pan, mute, solo), eq, aux, fx, Subgroup - Volume, Mute, Solo Transport - Start, End, Play, Stop, Record, Rewind, Forward Misc - Master vol., Bank Down, Bank up <pre> q - quit First 3 already opened when AE started F1 - timeline window F2 - mixer F3 - control F4 - subgroups F5 - aux returns F6 - sample list i - Load sample to use space - start/stop play b - reset time 0:00 s - split mode r - open recording window a - automation edit mode with p panning, m mute and v volume [ / ] - zoom in / out : - previous track * - next track x c v f - cut copy paste cross-fade g - snap grid </pre> '''[http://bnp.hansfaust.de/ Bars n Pipes sequencer]''' BarsnPipes debug ... in shell Menu (right mouse) *Song - Songs load and save in .song format but option here to load/save Midi_Files .mid in FORMAT0 or FORMAT1 *Track - *Edit - *Tool - *Timing - SMTPE Synchronizing *Windows - *Preferences - Multiple MIDI-in option Windows (some of these are usually already opened when Bars n Pipes starts up for the first time) *Workflow -> Tracks, .... Song Construction, Time-line Scoring, Media Madness, Mix Maestro, *Control -> Transport (or mini one), Windows (which collects all the Windows icons together-shortcut), .... Toolbox, Accessories, Metronome, Once you have your windows placed on the screen that suits your workflow, Song -> Save as Default will save the positions, colors, icons, etc as you'd like them If you need a particular setup of Tracks, Tools, Tempos etc, you save them all as a new song you can load each time Right mouse menu -> Preferences -> Environment... -> ScreenMode - Linkages for Synch (to Slave) usbmidi.out.0 and Send (Master) usbmidi.in.0 - Clock MTC '''Tracks''' #Double-click on B&P's icon. B&P will then open with an empty Song. You can also double-click on a song icon to open a song in B&P. #Choose a track. The B&P screen will contain a Tracks Window with a number of tracks shown as pipelines (Track 1, Track 2, etc...). To choose a track, simply click on the gray box to show an arrow-icon to highlight it. This icon show whether a track is chosen or not. To the right of the arrow-icon, you can see the icon for the midi-input. If you double-click on this icon you can change the MIDI-in setup. #Choose Record for the track. To the right of the MIDI-input channel icon you can see a pipe. This leads to another clickable icon with that shows either P, R or M. This stands for Play, Record or Merge. To change the icon, simply click on it. If you choose P, this track can only play the track (you can't record anything). If you choose R, you can record what you play and it overwrites old stuff in the track. If you choose M, you merge new records with old stuff in the track. Choose R now to be able to make a record. #Chose MIDI-channel. On the most right part of the track you can see an icon with a number in it. This is the MIDI-channel selector. Here you must choose a MIDI-channel that is available on your synthesizer/keyboard. If you choose General MIDI channel 10, most synthesizer will play drum sounds. To the left of this icon is the MIDI-output icon. Double-click on this icon to change the MIDI-output configuration. #Start recording. The next step is to start recording. You must then find the control buttons (they look like buttons on a CD-player). To be able to make a record. you must click on the R icon. You can simply now press the play button (after you have pressed the R button) and play something on you keyboard. To playback your composition, press the Play button on the control panel. #Edit track. To edit a track, you simply double click in the middle part of a track. You will then get a new window containing the track, where you can change what you have recorded using tools provided. Take also a look in the drop-down menus for more features. Videos to help understand [https://www.youtube.com/watch?v=A6gVTX-9900 small intro], [https://www.youtube.com/watch?v=abq_rUTiSA4&t=3s Overview], [https://www.youtube.com/watch?v=ixOVutKsYQo Workplace Setup CC PC Sysex], [https://www.youtube.com/watch?v=dDnJLYPaZTs Import Song], [https://www.youtube.com/watch?v=BC3kkzPLkv4 Tempo Mapping], [https://www.youtube.com/watch?v=sd23kqMYPDs ptool Arpeggi-8], [https://www.youtube.com/watch?v=LDJq-YxgwQg PlayMidi Song], [https://www.youtube.com/watch?v=DY9Pu5P9TaU Amiga Midi], [https://www.youtube.com/watch?v=abq_rUTiSA4 Learning Amiga bars and Pipes], Groups like [https://groups.io/g/barsnpipes/topics this] could help '''Tracks window''' * blue "1 2 3 4 5 6 7 8 Group" and transport tape deck VCR-type controls * Flags * [http://theproblem.alco-rhythm.com/org/bp.html Track 1, Track2, to Track 16, on each Track there are many options that can be activated] Each Track has a *Left LHS - Click in grey box to select what Track to work on, Midi-In ptool icon should be here (5pin plug icon), and many more from the Toolbox on the Input Pipeline *Middle - (P, R, M) Play, Record, Merge/Multi before the sequencer line and a blue/red/yellow (Thru Mute Play) Tap *Right RHS - Output pipeline, can have icons placed uopn it with the final ptool icon(s) being the 5pin icon symbol for Midi-OUT Clogged pipelines may need Esc pressed several times '''Toolbox (tools affect the chosen pipeline)''' After opening the Toolbox window you can add extra Tools (.ptool) for the pipelines like keyboard(virtual), midimonitor, quick patch, transpose, triad, (un)quantize, feedback in/out, velocity etc right mouse -> Toolbox menu option -> Install Tool... and navigate to Tool drawer (folder) and select requried .ptool Accompany B tool to get some sort of rythmic accompaniment, Rythm Section and Groove Quantize are examples of other tools that make use of rythms [https://aminet.net/search?query=bars Bars & Pipes pattern format .ptrn] for drawer (folder). Load from the Menu as Track or Group '''Accessories (affect the whole app)''' Accessories -> Install... and goto the Accessories drawer for .paccess like adding ARexx scripting support '''Song Construction''' <pre> F1 Pencil F2 Magic Wand F3 Hand F4 Duplicator F5 Eraser F6 Toolpad F7 Bounding box F8 Lock to A-B-A A-B-A strip, section, edit flags, white boxes, </pre> Bars&Pipes Professional offers three track formats; basic song tracks, linear tracks — which don't loop — and finally real‑time tracks. The difference between them is that both song and linear tracks respond to tempo changes, while real‑time tracks use absolute timing, always trigger at the same instant regardless of tempo alterations '''Tempo Map''' F1 Pencil F2 Magic Wand F3 Hand F4 Eraser F5 Curve F6 Toolpad Compositions Lyrics, Key, Rhythm, Time Signature '''Master Parameters''' Key, Scale/Mode '''Track Parameters''' Dynamics '''Time-line Scoring''' '''Media Madness''' '''Mix Maestro''' *ACCESSORIES Allows the importation of other packages and additional modules *CLIPBOARD Full cut, copy and paste operations, enabling user‑definable clips to be shared between tracks. *INFORMATION A complete rundown on the state of the current production and your machine. *MASTER PARAMETERS Enables global definition of time signatures, lyrics, scales, chords, dynamics and rhythm changes. *MEDIA MADNESS A complete multimedia sequencer which allows samples, stills, animation, etc *METRONOME Tempo feedback via MIDI, internal Amiga audio and colour cycling — all three can be mixed and matched as required. *MIX MAESTRO Completely automated mixdown with control for both volume and pan. All fader alterations are memorised by the software *RECORD ACTIVATION Complete specification of the data to be recorded/merged. Allows overdubbing of pitch‑bend, program changes, modulation etc *SET FLAGS Numeric positioning of location and edit flags in either SMPTE or musical time *SONG CONSTRUCTION Large‑scale cut and paste of individual measures, verses or chorus, by means of bounding box and drag‑n‑drop mouse selections *TEMPO MAP Tempo change using a variety of linear and non‑linear transition curves *TEMPO PALETTE Instant tempo changes courtesy of four user‑definable settings. *TIMELINE SCORING Sequencing of a selection of songs over a defined period — ideal for planning an entire set for a live performance. *TOOLBOX Selection screen for the hundreds of signal‑processing tools available *TRACKS Opens the main track window to enable recording, editing and the use of tools. *TRANSPORT Main playback control window, which also provides access to user‑ defined flags, loop and punch‑in record modes. Bars and Pipes Pro 2.5 is using internal 4-Byte IDs, to check which kind of data are currently processed. Especially in all its files the IDs play an important role. The IDs are stored into the file in the same order they are laid out in the memory. In a Bars 'N' Pipes file (no matter which kind) the ID "NAME" (saved as its ANSI-values) is stored on a big endian system (68k-computer) as "NAME". On a little endian system (x86 PC computer) as "EMAN". The target is to make the AROS-BnP compatible to songs, which were stored on a 68k computer (AMIGA). If possible, setting MIDI channels for Local Control for your keyboard http://www.fromwithin.com/liquidmidi/archive.shtml MIDI files are essentially a stream of event data. An event can be many things, but typically "note on", "note off", "program change", "controller change", or messages that instruct a MIDI compatible synth how to play a given bit of music. * Channel - 1 to 16 - * Messages - PC presets, CC effects like delays, reverbs, etc * Sequencing - MIDI instruments, Drums, Sound design, * Recording - * GUI - Piano roll or Tracker, Staves and Notes MIDI events/messages like step entry e.g. Note On, Note Off MIDI events/messages like PB, PC, CC, Mono and Poly After-Touch, Sysex, etc MIDI sync - Midi Clocks (SPS Measures), Midi Time Code (h, m, s and frames) SMPTE Individual track editing with audition edits so easier to test any changes. Possible to stop track playback, mix clips from the right edit flag and scroll the display using arrow keys. Step entry, to extend a selected note hit the space bar and the note grows accordingly. Ability to cancel mouse‑driven edits by simply clicking the right mouse button — at which point everything snaps back into its original form. Lyrics can now be put in with syllable dividers, even across an entire measure or section. Autoranging when you open a edit window, the notes are automatically displayed — working from the lowest upwards. Flag editing, shift‑click on a flag immediately open the bounds window, ready for numeric input. Ability to cancel edits using the right‑hand mouse button, plus much improved Bounding Box operations. Icons other than the BarsnPipes icon -> PUBSCREEN=BarsnPipes (cannot choose modes higher than 8bit 256 colors) Preferences -> Menu in Tracks window - Send MIDI defaults OFF Prefs -> Environment -> screenmode (saved to BarsnPipes.prefs binary file) Customization -> pics in gui drawer (folder) - Can save as .song files and .mid General Midi SMF is a “Standard Midi File” ([http://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html SMF0, SMF1 and SMF2]), [https://github.com/stump/libsmf libsmf], [https://github.com/markc/midicomp MIDIcomp], [https://github.com/MajicDesigns/MD_MIDIFile C++ src], [], [https://github.com/newdigate/midi-smf-reader Midi player], * SMF0 All MIDI data is stored in one track only, separated exclusively by the MIDI channel. * SMF1 The MIDI data is stored in separate tracks/channels. * SMF2 (rarely used) The MIDI data is stored in separate tracks, which are additionally wrapped in containers, so it's possible to have e.g. several tracks using the same MIDI channels. Would it be possible to enrich Bars N’Pipes with software synth and sample support along with audio recording and mastering tools like in the named MAC or PC music sequencers? On the classic AMIGA-OS this is not possible because of missing CPU-power. The hardware of the classic AMIGA is not further developed. So we must say (unfortunately) that those dreams can’t become reality BarsnPipes is best used with external MIDI-equipment. This can be a keyboard or synthesizer with MIDI-connectors. <pre> MIDI can control 16 channels There are USB-MIDI-Interfaces on the market with 16 independent MIDI-lines (multi-port), which can handle 16 MIDI devices independently – 16×16 = 256 independent MIDI-channels or instruments handle up to 16 different USB-MIDI-Interfaces (multi-device). That is: 16X16X16 = 4096 independent MIDI-channels – theoretically </pre> <pre> Librarian MIDI SYStem EXplorer (sysex) - PatchEditor and used to be supplied as a separate program like PatchMeister but currently not at present It should support MIDI.library (PD), BlueRibbon.library (B&P), TriplePlayPlus, and CAMD.library (DeluxeMusic) and MIDI information from a device's user manual and configure a custom interface to access parameters for all MIDI products connected to the system Supports ALL MIDI events and the Patch/Librarian data is stored in MIDI standard format Annette M.Crowling, Missing Link Software, Inc. </pre> Composers <pre> [https://x.com/hirasawa/status/1403686519899054086 Susumu Hirasawa] </pre> <pre> 1988 Todor Fay and his wife Melissa Jordan Gray, who founded the Blue Ribbon Inc 1992 Bars&Pipes Pro published November 2000, Todor Fay announcement to release the sourcecode of Bars&Pipes Pro 2.5c beta end of May 2001, the source of the main program and the sources of some tools and accessories were in a complete and compileable state end of October 2009 stop further development of BarsnPipes New for now on all supported systems and made freeware 2013 Alfred Faust diagnosed with incureable illness, called „Myastenia gravis“ (weak muscles) </pre> Protrekkr How to use Midi In/Out in Protrekkr ? First of all, midi in & out capabilities of this program are rather limited. # Go to Misc. Setup section and select a midi in or out device to use (ptk only supports one device at a time). # Go to instrument section, and select a MIDI PRG (the default is N/A, which means no midi program selected). # Go to track section and here you can assign a midi channel to each track of ptk. # Play notes :]. Note off works. F'x' note cut command also works too, and note-volume command (speed) is supported. Also, you can change midicontrollers in the tracker, using '90' in the panning row: <pre> C-3 02 .. .. 0000.... --- .. .. 90 xxyy.... << This will set the value --- .. .. .. 0000.... of the controller n.'xx' to 'yy' (both in hex) --- .. .. .. 0000.... </pre> So "--- .. .. 90 2040...." will set the controller number $20(32) to $40(64). You will need the midi implementation table of your gear to know what you can change with midi controller messages. N.B. Not all MIDI devices are created equal! Although the MIDI specification defines a large range of MIDI messages of various kinds, not every MIDI device is required to work in exactly the same way and respond to all the available messages and ways of working. For example, we don't expect a wind synthesiser to work in the same way as a home keyboard. Some devices, the older ones perhaps, are only able to respond to a single channel. With some of those devices that channel can be altered from the default of 1 (probably) to another channel of the 16 possible. Other devices, for instance monophonic synthesisers, are capable of producing just one note at a time, on one MIDI channel. Others can produce many notes spread across many channels. Further devices can respond to, and transmit, "breath controller" data (MIDI controller number 2 (CC#2)) others may respond to the reception of CC#2 but not be able to create and to send it. A controller keyboard may be capable of sending "expression pedal" data, but another device may not be capable of responding to that message. Some devices just have the basic GM sound set. The "voice" or "instrument" is selected using a "Program Change" message on its own. Other devices have a greater selection of voices, usually arranged in "banks", and the choice of instrument is made by responding to "Bank Select MSB" (MIDI controller 0 (CC#0)), others use "Bank Select LSB" (MIDI controller number 32 (CC#32)), yet others use both MSB and LSB sent one after the other, all followed by the Program Change message. The detailed information about all the different voices will usually be available in a published MIDI Data List. MIDI Implementation Chart But in the User Manual there is sometimes a summary of how the device works, in terms of MIDI, in the chart at the back of the manual, the MIDI Implementation Chart. If you require two devices to work together you can compare the two implementation charts to see if they are "compatible". In order to do this we will need to interpret that chart. The chart is divided into four columns headed "Function", "Transmitted" (or "Tx"), "Received" (or "Rx"), or more correctly "Recognised", and finally, "Remarks". <pre> The left hand column defines which MIDI functions are being described. The 2nd column defines what the device in question is capable of transmitting to another device. The 3rd column defines what the device is capable of responding to. The 4th column is for explanations of the values contained within these previous two columns. </pre> There should then be twelve sections, with possibly a thirteenth containing extra "Notes". Finally there should be an explanation of the four MIDI "modes" and what the "X" and the "O" mean. <pre> Mode 1: Omni On, Poly; Mode 2: Omni On, Mono; Mode 3: Omni Off, Poly; Mode 4: Omni Off, Mono. </pre> O means "yes" (implemented), X means "no" (not implemented). Sometimes you will find a row of asterisks "**************", these seem to indicate that the data is not applicable in this case. Seen in the transmitted field only (unless you've seen otherwise). Lastly you may find against some entries an asterisk followed by a number e.g. *1, these will refer you to further information, often on a following page, giving more detail. Basic Channel But the very first set of boxes will tell us the "Basic Channel(s)" that the device sends or receives on. "Default" is what happens when the device is first turned on, "changed" is what a switch of some kind may allow the device to be set to. For many devices e.g. a GM sound module or a home keyboard, this would be 1-16 for both. That is it can handle sending and receiving on all MIDI channels. On other devices, for example a synthesiser, it may by default only work on channel 1. But the keyboard could be "split" with the lower notes e.g. on channel 2. If the synth has an arppegiator, this may be able to be set to transmit and or receive on yet another channel. So we might see the default as "1" but the changed as "1-16". Modes. We need to understand Omni On and Off, and Mono and Poly, then we can decipher the four modes. But first we need to understand that any of these four Mode messages can be sent to any MIDI channel. They don't necessarily apply to the whole device. If we send an "Omni On" message (CC#125) to a MIDI channel of a device, we are, in effect, asking it to respond to e.g. a Note On / Off message pair, received on any of the sixteen channels. Sound strange? Read it again. Still strange? It certainly is. We normally want a MIDI channel to respond only to Note On / Off messages sent on that channel, not any other. In other words, "Omni Off". So "Omni Off" (CC#124) tells a channel of our MIDI device to respond only to messages sent on that MIDI channel. "Poly" (CC#127) is for e.g. a channel of a polyphonic sound module, or a home keyboard, to be able to respond to many simultaneous Note On / Off message pairs at once and produce musical chords. "Mono" (CC#126) allows us to set a channel to respond as if it were e.g. a flute or a trumpet, playing just one note at a time. If the device is capable of it, then the overlapping of notes will produce legato playing, that is the attack portion of the second note of two overlapping notes will be removed resulting in a "smoother" transition. So a channel with a piano voice assigned to it will have Omni Off, Poly On (Mode 3), a channel with a saxophone voice assigned could be Omni Off, Mono On (Mode 4). We call these combinations the four modes, 1 to 4, as defined above. Most modern devices will have their channels set to Mode 3 (Omni Off, Poly) but be switchable, on a per channel basis, to Mode 4 (Omni Off, Mono). This second section of data will include first its default value i.e. upon device switch on. Then what Mode messages are acceptable, or X if none. Finally, in the "Altered" field, how a Mode message that can't be implemented will be interpreted. Usually there will just be a row of asterisks effectively meaning nothing will be done if you try to switch to an unimplemented mode. Note Number <pre> The next row will tell us which MIDI notes the device can send or receive, normally 0-127. The second line, "True Voice" has the following in the MIDI specification: "Range of received note numbers falling within the range of true notes produced by the instrument." My interpretation is that, for instance, a MIDI piano may be capable of sending all MIDI notes (0 to 127) by transposition, but only responding to the 88 notes (21 to 108) of a real piano. </pre> Velocity This will tell us whether the device we're looking at will handle note velocity, and what range from 1-127, or maybe just 64, it transmits or will recognise. So usually "O" plus a range or "X" for not implemented. After touch This may have one or two lines two it. If a one liner the either "O" or "X", yes or no. If a two liner then it may include "Keys" or "Poly" and "Channel". This will show whether the device will respond to Polyphonic after touch or channel after touch or neither. Pitch Bend Again "O" for implemented, "X" for not implemented. (Many stage pianos will have no pitch bend capability.) It may also, in the notes section, state whether it will respond to the full 14 bits, or not, as usually encoded by the pitch bend wheel. Control Change This is likely to be the largest section of the chart. It will list all those controllers, starting from CC#0, Bank Select MSB, which the device is capable of sending, and those that it will respond to using "O" or "X" respectively. You will, almost certainly, get some further explanation of functionality in the remarks column, or in more detail elsewhere in the documentation. Of course you will need to know what all the various controller numbers do. Lots of the official technical specifications can be found at the [www.midi.org/techspecs/ MMA], with the table of messages and control change [www.midi.org/techspecs/midimessages.php message numbers] Program Change Again "O" or "X" in the Transmitted or Recognised column to indicate whether or not the feature is implemented. In addition a range of numbers is shown, typically 0-127, to show what is available. True # (number): "The range of the program change numbers which correspond to the actual number of patches selected." System Exclusive Used to indicate whether or not the device can send or recognise System Exclusive messages. A short description is often given in the Remarks field followed by a detailed explanation elsewhere in the documentation. System Common - These include the following: <pre> MIDI Time Code Quarter Frame messages (device synchronisation). Song Position Pointer Song Select Tune Request </pre> The section will indicate whether or not the device can send or respond to any of these messages. System Real Time These include the following: <pre> Timing Clock - often just written as "Clock" Start Stop Continue </pre> These three are usually just referred to as "Commands" and listed. Again the section will indicate which, if any, of these messages the device can send or respond to. <pre> Aux. Messages Again "O" or "X" for implemented or not. Aux. = Auxiliary. Active Sense = Active Sensing. </pre> Often with an explanation of the action of the device. Notes The "Notes" section can contain any additional comments to clarify the particular implementation. Some of the explanations have been drawn directly from the MMA MIDI 1.0 Detailed Specification. And the detailed explanation of some of the functions will be found there, or in the General MIDI System Level 1 or General MIDI System Level 2 documents also published by the MMA. OFFICIAL MIDI SPECIFICATIONS SUMMARY OF MIDI MESSAGES Table 1 - Summary of MIDI Messages The following table lists the major MIDI messages in numerical (binary) order (adapted from "MIDI by the Numbers" by D. Valenti, Electronic Musician 2/88, and updated by the MIDI Manufacturers Association.). This table is intended as an overview of MIDI, and is by no means complete. WARNING! Details about implementing these messages can dramatically impact compatibility with other products. We strongly recommend consulting the official MIDI Specifications for additional information. MIDI 1.0 Specification Message Summary Channel Voice Messages [nnnn = 0-15 (MIDI Channel Number 1-16)] {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->1000nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Note Off event. This message is sent when a note is released (ended). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. |- |<!--Status-->1001nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Note On event. This message is sent when a note is depressed (start). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. |- |<!--Status-->1010nnnn || <!--Data-->0kkkkkkk 0vvvvvvv || <!--Description-->Polyphonic Key Pressure (Aftertouch). This message is most often sent by pressing down on the key after it "bottoms out". (kkkkkkk) is the key (note) number. (vvvvvvv) is the pressure value. |- |<!--Status-->1011nnnn || <!--Data-->0ccccccc 0vvvvvvv || <!--Description-->Control Change. This message is sent when a controller value changes. Controllers include devices such as pedals and levers. Controller numbers 120-127 are reserved as "Channel Mode Messages" (below). (ccccccc) is the controller number (0-119). (vvvvvvv) is the controller value (0-127). |- |<!--Status-->1100nnnn || <!--Data-->0ppppppp || <!--Description-->Program Change. This message sent when the patch number changes. (ppppppp) is the new program number. |- |<!--Status-->1101nnnn || <!--Data-->0vvvvvvv || <!--Description-->Channel Pressure (After-touch). This message is most often sent by pressing down on the key after it "bottoms out". This message is different from polyphonic after-touch. Use this message to send the single greatest pressure value (of all the current depressed keys). (vvvvvvv) is the pressure value. |- |<!--Status-->1110nnnn || <!--Data-->0lllllll 0mmmmmmm || <!--Description-->Pitch Bend Change. This message is sent to indicate a change in the pitch bender (wheel or lever, typically). The pitch bender is measured by a fourteen bit value. Center (no pitch change) is 2000H. Sensitivity is a function of the receiver, but may be set using RPN 0. (lllllll) are the least significant 7 bits. (mmmmmmm) are the most significant 7 bits. |} Channel Mode Messages (See also Control Change, above) {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->1011nnnn || <!--Data-->0ccccccc 0vvvvvvv || <!--Description-->Channel Mode Messages. This the same code as the Control Change (above), but implements Mode control and special message by using reserved controller numbers 120-127. The commands are: *All Sound Off. When All Sound Off is received all oscillators will turn off, and their volume envelopes are set to zero as soon as possible c = 120, v = 0: All Sound Off *Reset All Controllers. When Reset All Controllers is received, all controller values are reset to their default values. (See specific Recommended Practices for defaults) c = 121, v = x: Value must only be zero unless otherwise allowed in a specific Recommended Practice. *Local Control. When Local Control is Off, all devices on a given channel will respond only to data received over MIDI. Played data, etc. will be ignored. Local Control On restores the functions of the normal controllers. c = 122, v = 0: Local Control Off c = 122, v = 127: Local Control On * All Notes Off. When an All Notes Off is received, all oscillators will turn off. c = 123, v = 0: All Notes Off (See text for description of actual mode commands.) c = 124, v = 0: Omni Mode Off c = 125, v = 0: Omni Mode On c = 126, v = M: Mono Mode On (Poly Off) where M is the number of channels (Omni Off) or 0 (Omni On) c = 127, v = 0: Poly Mode On (Mono Off) (Note: These four messages also cause All Notes Off) |} System Common Messages System Messages (0xF0) The final status nybble is a “catch all” for data that doesn’t fit the other statuses. They all use the most significant nybble (4bits) of 0xF, with the least significant nybble indicating the specific category. The messages are denoted when the MSB of the second nybble is 1. When that bit is a 0, the messages fall into two other subcategories. System Common If the MSB of the second second nybble (4 bits) is not set, this indicates a System Common message. Most of these are messages that include some additional data bytes. System Common Messages Type Status Byte Number of Data Bytes Usage <pre> Time Code Quarter Frame 0xF1 1 Indicates timing using absolute time code, primarily for synthronization with video playback systems. A single location requires eight messages to send the location in an encoded hours:minutes:seconds:frames format*. Song Position 0xF2 2 Instructs a sequencer to jump to a new position in the song. The data bytes form a 14-bit value that expresses the location as the number of sixteenth notes from the start of the song. Song Select 0xF3 1 Instructs a sequencer to select a new song. The data byte indicates the song. Undefined 0xF4 0 Undefined 0xF5 0 Tune Request 0xF6 0 Requests that the receiver retunes itself**. </pre> *MIDI Time Code (MTC) is significantly complex. Please see the MIDI Specification **While modern digital instruments are good at staying in tune, older analog synthesizers were prone to tuning drift. Some analog synthesizers had an automatic tuning operation that could be initiated with this command. System Exclusive If you’ve been keeping track, you’ll notice there are two status bytes not yet defined: 0xf0 and 0xf7. These are used by the System Exclusive message, often abbreviated at SysEx. SysEx provides a path to send arbitrary data over a MIDI connection. There is a group of predefined messages for complex data, like fine grained control of MIDI Time code machinery. SysEx is also used to send manufacturer defined data, such as patches, or even firmware updates. System Exclusive messages are longer than other MIDI messages, and can be any length. The messages are of the following format: 0xF0, 0xID, 0xdd, ...... 0xF7 The message is bookended with distinct bytes. It opens with the Start Of Exclusive (SOX) data byte, 0xF0. The next one to three bytes after the start are an identifier. Values from 0x01 to 0x7C are one-byte vendor IDs, assigned to manufacturers who were involved with MIDI at the beginning. If the ID is 0x00, it’s a three-byte vendor ID - the next two bytes of the message are the value. <pre> ID 0x7D is a placeholder for non-commercial entities. ID 0x7E indicates a predefined Non-realtime SysEx message. ID 0x7F indicates a predefined Realtime SysEx message. </pre> After the ID is the data payload, sent as a stream of bytes. The transfer concludes with the End of Exclusive (EOX) byte, 0xF7. The payload data must follow the guidelines for MIDI data bytes – the MSB must not be set, so only 7 bits per byte are actually usable. If the MSB is set, it falls into three possible scenarios. An End of Exclusive byte marks the ordinary termination of the SysEx transfer. System Real Time messages may occur within the transfer without interrupting it. The recipient should handle them independently of the SysEx transfer. Other status bytes implicitly terminate the SysEx transfer and signal the start of new messages. Some inexpensive USB-to-MIDI interfaces aren’t capable of handling messages longer than four bytes. {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->11110000 || <!--Data-->0iiiiiii [0iiiiiii 0iiiiiii] 0ddddddd --- --- 0ddddddd 11110111 || <!--Description-->System Exclusive. This message type allows manufacturers to create their own messages (such as bulk dumps, patch parameters, and other non-spec data) and provides a mechanism for creating additional MIDI Specification messages. The Manufacturer's ID code (assigned by MMA or AMEI) is either 1 byte (0iiiiiii) or 3 bytes (0iiiiiii 0iiiiiii 0iiiiiii). Two of the 1 Byte IDs are reserved for extensions called Universal Exclusive Messages, which are not manufacturer-specific. If a device recognizes the ID code as its own (or as a supported Universal message) it will listen to the rest of the message (0ddddddd). Otherwise, the message will be ignored. (Note: Only Real-Time messages may be interleaved with a System Exclusive.) |- |<!--Status-->11110001 || <!--Data-->0nnndddd || <!--Description-->MIDI Time Code Quarter Frame. nnn = Message Type dddd = Values |- |<!--Status-->11110010 || <!--Data-->0lllllll 0mmmmmmm || <!--Description-->Song Position Pointer. This is an internal 14 bit register that holds the number of MIDI beats (1 beat= six MIDI clocks) since the start of the song. l is the LSB, m the MSB. |- |<!--Status-->11110011 || <!--Data-->0sssssss || <!--Description-->Song Select. The Song Select specifies which sequence or song is to be played. |- |<!--Status-->11110100 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11110101 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11110110 || <!--Data--> || <!--Description-->Tune Request. Upon receiving a Tune Request, all analog synthesizers should tune their oscillators. |- |<!--Status-->11110111 || <!--Data--> || <!--Description-->End of Exclusive. Used to terminate a System Exclusive dump. |} System Real-Time Messages {| class="wikitable sortable" width="90%" ! width="10%" |Status D7----D0 ! width="10%" |Data Byte(s) D7----D0 ! width="20%" |Description |- |<!--Status-->11111000 || <!--Data--> || <!--Description-->Timing Clock. Sent 24 times per quarter note when synchronization is required. |- |<!--Status-->11111001 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11111010 || <!--Data--> || <!--Description-->Start. Start the current sequence playing. (This message will be followed with Timing Clocks). |- |<!--Status-->11111011 || <!--Data--> || <!--Description-->Continue. Continue at the point the sequence was Stopped. |- |<!--Status-->11111100 || <!--Data--> || <!--Description-->Stop. Stop the current sequence. |- |<!--Status-->11111101 || <!--Data--> || <!--Description-->Undefined. (Reserved) |- |<!--Status-->11111110 || <!--Data--> || <!--Description-->Active Sensing. This message is intended to be sent repeatedly to tell the receiver that a connection is alive. Use of this message is optional. When initially received, the receiver will expect to receive another Active Sensing message each 300ms (max), and if it does not then it will assume that the connection has been terminated. At termination, the receiver will turn off all voices and return to normal (non- active sensing) operation. |- |<!--Status-->11111111 || <!--Data--> || <!--Description-->Reset. Reset all receivers in the system to power-up status. This should be used sparingly, preferably under manual control. In particular, it should not be sent on power-up. |} Advanced Messages Polyphonic Pressure (0xA0) and Channel Pressure (0xD0) Some MIDI controllers include a feature known as Aftertouch. While a key is being held down, the player can press harder on the key. The controller measures this, and converts it into MIDI messages. Aftertouch comes in two flavors, with two different status messages. The first flavor is polyphonic aftertouch, where every key on the controller is capable of sending its own independent pressure information. The messages are of the following format: <pre> 0xnc, 0xkk, 0xpp n is the status (0xA) c is the channel nybble kk is the key number (0 to 127) pp is the pressure value (0 to 127) </pre> Polyphonic aftertouch is an uncommon feature, usually found on premium quality instruments, because every key requires a separate pressure sensor, plus the circuitry to read them all. Much more commonly found is channel aftertouch. Instead of needing a discrete sensor per key, it uses a single, larger sensor to measure pressure on all of the keys as a group. The messages omit the key number, leaving a two-byte format <pre> 0xnc, 0xpp n is the status (0xD) c is the channel number pp is the pressure value (0 to 127) </pre> Pitch Bend (0xE0) Many keyboards have a wheel or lever towards the left of the keys for pitch bend control. This control is usually spring-loaded, so it snaps back to the center of its range when released. This allows for both upward and downward bends. Pitch Bend Wheel The wheel sends pitch bend messages, of the format <pre> 0xnc, 0xLL, 0xMM n is the status (0xE) c is the channel number LL is the 7 least-significant bits of the value MM is the 7 most-significant bits of the value </pre> You’ll notice that the bender data is actually 14 bits long, transmitted as two 7-bit data bytes. This means that the recipient needs to reassemble those bytes using binary manipulation. 14 bits results in an overall range of 214, or 0 to 16,383. Because it defaults to the center of the range, the default value for the bender is halfway through that range, at 8192 (0x2000). Control Change (0xB0) In addition to pitch bend, MIDI has provisions for a wider range of expressive controls, sometimes known as continuous controllers, often abbreviated CC. These are transmitted by the remaining knobs and sliders on the keyboard controller shown below. Continuous Controllers These controls send the following message format: <pre> 0xnc, 0xcc, 0xvv n is the status (0xB) c is the MIDI channel cc is the controller number (0-127) vv is the controller value (0-127) </pre> Typically, the wheel next to the bender sends controller number one, assigned to modulation (or vibrato) depth. It is implemented by most instruments. The remaining controller number assignments are another point of confusion. The MIDI specification was revised in version 2.0 to assign uses for many of the controllers. However, this implementation is not universal, and there are ranges of unassigned controllers. On many modern MIDI devices, the controllers are assignable. On the controller keyboard shown in the photos, the various controls can be configured to transmit different controller numbers. Controller numbers can be mapped to particular parameters. Virtual synthesizers frequently allow the user to assign CCs to the on-screen controls. This is very flexible, but it might require configuration on both ends of the link and completely bypasses the assignments in the standard. Program Change (0xC0) Most synthesizers have patch storage memory, and can be told to change patches using the following command: <pre> 0xnc, 0xpp n is the status (0xc) c is the channel pp is the patch number (0-127) </pre> This allows for 128 sounds to be selected, but modern instruments contain many more than 128 patches. Controller #0 is used as an additional layer of addressing, interpreted as a “bank select” command. Selecting a sound on such an instrument might involve two messages: a bank select controller message, then a program change. Audio & Midi are not synchronized, what I can do ? Buy a commercial software package but there is a nasty trick to synchronize both. It's a bit hardcore but works for me: Simply put one line down to all midi notes on your pattern (use Insert key) and go to 'Misc. Setup', adjust the latency and just search a value that will make sound sync both audio/midi. The stock Sin/Saw/Pulse and Rnd waveforms are too simple/common, is there a way to use something more complex/rich ? You have to ability to redirect the waveforms of the instruments through the synth pipe by selecting the "wav" option for the oscillator you're using for this synth instrument, samples can be used as wavetables to replace the stock signals. Sound banks like soundfont (sf2) or Kontakt2 are not supported at the moment ====DAW Audio Evolution 4==== Audio Evolution 4 gives you unsurpassed power for digital audio recording and editing on the Amiga. The latest release focusses on time-saving non-linear and non-destructive editing, as seen on other platforms. Besides editing, Audio Evolution 4 offers a wide range of realtime effects, including compression, noise gate, delays, reverb, chorus and 3-band EQ. Whether you put them as inserts on a channel or use them as auxillaries, the effect parameters are realtime adjustable and can be fully automated. Together with all other mixing parameters, they can even be controlled remotely, using more ergonomic MIDI hardware. Non-linear editing on the time line, including cut, copy, paste, move, split, trim and crossfade actions The number of tracks per project(s) is unlimited .... AHI limits you to recording only two at a time. i.e. not on 8 track sound cards like the Juli@ or Phase 88. sample file import is limited to 16bit AIFF (not AIFC, important distinction as some files from other sources can be AIFC with aiff file extension). and 16bit WAV (pcm only) Most apps use the Music Unit only but a few apps also use Unit (0-3) instead or as well. * Set up AHI prefs so that microphone is available. (Input option near the bottom) stereo++ allows the audio piece to be placed anywhere and the left-right adjusted to sound positionally right hifi best for music playback if driver supports this option Load 16bit .aif .aiff only sample(s) to use not AIFC which can have the same ending. AIFF stands for Audio Interchange File Format sox recital.wav recital.aiff sox recital.wav −b 16 recital.aiff channels 1 rate 16k fade 3 norm sox input.wav output.aiff bass −b 16 rate 48k performs the same format translation, but also applies four effects (down-mix to one channel, sample rate change, fade-in, nomalize), and stores the result at a bit-depth of 16. rec −c 2 radio.aiff trim 0 30:00 records half an hour of stereo audio play existing-file.wav 24bit PCM WAV or AIFF do not work *No stream format handling. So no way to pass on an AC3 encoded stream unmodified to the digital outputs through AHI. *No master volume handling. Each application has to set its own volume. So each driver implements its own custom driver-mixer interface for handling master volumes, mute and preamps. *Only one output stream. So all input gets mixed into one output. *No automatic handling of output direction based on connected cables. *No monitor input selection. Only monitor volume control. select the correct input (Don't mistake enabled sound for the correct input.) The monitor will feedback audio to the lineout and hp out no matter if you have selected the correct input to the ADC. The monitor will provide sound for any valid input. This will result in free mixing when recording from the monitor input instead of mic/line because the monitor itself will provide the hardware mixing for you. Be aware that MIC inputs will give two channel mono. Only Linein will give real stereo. Now for the not working part. Attempt to record from linein in the AE4 record window, the right channel is noise and the left channel is distorted. Even with the recommended HIFI 16bit Stereo++ mode at 48kHz. Channels Monitor Gain Inout Output Advanced settings - Debugging via serial port * Options -> Soundcard In/Out * Options -> SampleRate * Options -> Preferences F6 for Sample File List Setting a grid is easy as is measuring the BPM by marking a section of the sample. Is your kick drum track "not in time" ? If so, you're stumped in AE4 as it has no fancy variable time signatures and definitely no 'track this dodgy rhythm' function like software of the nature of Logic has. So if your drum beat is freeform you will need to work in freeform mode. (Real music is free form anyway). If the drum *is* accurate and you are just having trouble measuring the time, I usually measure over a range of bars and set the number of beats in range to say 16 as this is more accurate, Then you will need to shift the drum track to match your grid *before* applying the grid. (probably an iterative process as when the grid is active samples snap to it, and when inactive you cannot see it). AE4 does have ARexx but the functions are more for adding samples at set offsets and starting playback / recording. These are the usual features found in DAWs... * Recording digital audio, midi sequencer and mixer * virtual VST instruments and plug-ins * automation, group channels, MIDI channels, FX sends and returns, audio and MIDI editors and music notation editor * different track views * mixer and track layout (but not the same as below) * traditional two windows (track and mixer) Mixing - mixdown Could not figure out how to select what part I wanted to send to the aux, set it to echo and return. Pretty much the whole echo effect. Or any effect. Take look at page17 of the manual. When you open the EQ / Aux send popup window you will see 4 sends. Now from the menu choose the windows menu. Menus->Windows-> Aux Returns Window or press F5 You will see a small window with 4 volume controls and an effects button for each. Click a button and add an effects to that aux channel, then set it up as desired (note the reverb effect has a special AUX setting that improves its use with the aux channel, not compulsory but highly useful). You set the amount of 'return' on the main mix in the Aux Return window, and the amount sent from each main mixer channel in the popup for that channel. Again the aux sends are "prefade" so the volume faders on each channel do not affect them. Tracking Effects - fade in To add some echoes to some vocals, tried to add an effect on a track but did not come out. This is made more complicated as I wanted to mute a vocal but then make it echo at the muting point. Want to have one word of a vocal heard and then echoed off. But when the track is mute the echo is cancelled out. To correctly understand what is happening here you need to study the figure at the bottom of page 15 on the manual. You will see from that that the effects are applied 'prefade' So the automation you applied will naturally mute the entire signal. There would be a number of ways to achieve the goal, You have three real time effects slots, one for smoothing like so Sample -> Amplify -> Delay Then automate the gain of the amplify block so that it effectively mutes the sample just before the delay at the appropriate moment, the echo effect should then be heard. Getting the effects in the right order will require experimentation as they can only be added top down and it's not obvious which order they are applied to the signal, but there only two possibilities, so it wont take long to find out. Using MUTE can cause clicks to the Amplify can be used to mute more smoothly so that's a secondary advantage. Signal Processing - Overdub [[#top|...to the top]] ===Office=== ====Spreadsheet Leu==== Support for some xlsx, and ods functions ====Spreadsheet Ignition==== ; Needs ABIv1 to be completed before more can be done File formats supported * ascii #?.txt and #?.csv (single sheets with data only). * igs and TurboCalc(WIP) #?.tc for all sheets with data, formats and formulas. There is '''no''' support for xls, xlsx, ods or uos ([http://en.wikipedia.org/wiki/Uniform_Office_Format Uniform Unified Office Format]) at the moment. * Always use Esc key after editing Spreadsheet cells. * copy/paste seems to copy the first instance only so go to Edit -> Clipboard to manage the list of remembered actions. * Right mouse click on row (1 or 2 or 3) or column header (a or b or c) to access optimal height or width of the row or column respectively * Edit -> Insert -> Row seems to clear the spreadsheet or clears the rows after the inserted row until undo restores as it should be... Change Sheet name by Object -> Sheet -> Properties Click in the cell which will contain the result, and click '''down arrow button''' to the right of the formula box at the bottom of the spreadsheet and choose the function required from the list provided. Then click on the start cell and click on the bottom right corner, a '''very''' small blob, which allows stretching a bounding box (thick grey outlines) across many cells This grey bounding box can be used to '''copy a formula''' to other cells. Object -> Cell -> Properties to change cell format - Currency only covers DM and not $, Euro, Renminbi, Yen or Pound etc. Shift key and arrow keys selects a range of cells, so that '''formatting can be done to all highlighted cells'''. View -> Overview then select ALL with one click (in empty cell in the top left hand corner of the sheet). Default mode is relative cell referencing e.g. a1+a2 but absolute e.g. $a$1+$a$2 can be entered. * #sheet-name to '''absolute''' reference another sheet-name cell unless reference() function used. ;Graphs use shift key and arrow keys to select a bunch of cells to be graph'ed making sure that x axes represents and y axes represents * value() - 0 value, 1 percent, 2 date, 3 time, 4 unit ... ;Dates * Excel starts a running count from the 1st Jan 1900 and Ignition starts from 1st Jan 1AD '''(maybe this needs to change)''' Set formatting Object -> Cell -> Properties and put date in days ;Time Set formatting Object -> Cell -> Properties and put time in seconds taken ;Database (to be done by someone else) type - standard, reference (bezug), search criterion (suchkriterium), * select a bunch of cells and Object -> Database -> Define to set Datenbank (database) and Felder (fields not sure how?) * Neu (new) or loschen (delete) to add/remove database headings e.g. Personal, Start Date, Finish Date (one per row?) * Object -> Database -> Index to add fields (felder) like Surname, First Name, Employee ID, etc. to ? Filtering done with dbfilter(), dbproduct() and dbposition(). Activities with dbsum(), dbaverage(), dbmin() and dbmax(). Table sorting - ;Scripts (Arexx) ;Excel(TM) to Ignition - commas ''',''' replaced by semi-colons ''';''' to separate values within functions *SUM(), *AVERAGE(), MAX(), MIN(), INT(), PRODUCT(), MEDIAN(), VAR() becomes Variance(), Percentile(), *IF(), AND, OR, NOT *LEFT(), RIGHT(), MID() becomes MIDDLE(), LEN() becomes LENGTH(), *LOWER() becomes LOWERCASE(), UPPER() becomes UPPERCASE(), * DATE(yyyy,mm,dd) becomes COMPUTEDATE(dd;mm;yyyy), *TODAY(), DAY(),WEEK(), MONTH(),=YEAR(TODAY()), *EOMONTH() becomes MONTHLENGTH(), *NOW() should be date and time becomes time only, SECOND(), MINUTE(), HOUR(), *DBSUM() becomes DSUM(), ;Missing and possibly useful features/functions needed for ignition to have better support of Excel files There is no Merge and Join Text over many cells, no protect and/or freeze row or columns or books but can LOCK sheets, no define bunch of cells as a name, Macros (Arexx?), conditional formatting, no Solver, no Goal Seek, no Format Painter, no AutoFill, no AutoSum function button, no pivot tables, (30 argument limit applies to Excel) *HLOOKUP(), VLOOKUP(), [http://production-scheduling.com/excel-index-function-most-useful/ INDEX(), MATCH()], CHOOSE(), TEXT(), *TRIM(), FIND(), SUBSTITUTE(), CONCATENATE() or &, PROPER(), REPT(), *[https://acingexcel.com/excel-sumproduct-function/ SUMPRODUCT()], ROUND(), ROUNDUP(), *ROUNDDOWN(), COUNT(), COUNTA(), SUMIF(), COUNTIF(), COUNTBLANK(), TRUNC(), *PMT(), PV(), FV(), POWER(), SQRT(), MODE(), TRUE, FALSE, *MODE(), LARGE(), SMALL(), RANK(), STDEV(), *DCOUNT(), DCOUNTA(), WEEKDAY(), ;Excel Keyboard [http://dmcritchie.mvps.org/excel/shortx2k.htm shortcuts needed to aid usability in Ignition] <pre> Ctrl Z - Undo Ctrl D - Fill Down Ctrl R - Fill right Ctrl F - Find Ctrl H - Replace Ctrl 1 - Formatting of Cells CTRL SHIFT ~ Apply General Formatting ie a number Ctrl ; - Todays Date F2 - Edit cell F4 - toggle cell absolute / relative cell references </pre> ====Document Scanning - Scandal==== Scanner usually needs to be connected via a USB port and not via a hub or extension lead. Check in Trident Prefs -> Devices that the USB Scanner is not bound to anything (e.g. Bindings None) If not found then reboot the computer and recheck. Start Scandal, choose Settings from Menu strip at top of screen and in Scanner Driver choose the ?#.device of the scanner (e.g. epson2.device). The next two boxes - leave empty as they are for morphos SCSI use only or put ata.device (use the selection option in bigger box below) and Unit as 0 this is needed for gt68xx * gt68xx - no editing needed in s/gt68xx.conf but needs a firmware file that corresponds to the scanner [http://www.meier-geinitz.de/sane/gt68xx-backend/ gt68xx firmwares] in sys:s/gt68xx. * epson2 - Need to edit the file epson2.conf in sys/s that corresponds to the scanner being used '''Save''' the settings but do not press the Use button (aros freezes) Back to the Picture Scan window and the right-hand sections. Click on the '''Information''' tab and press Connect button and the scanner should now be detected. Go next to the '''Scanner''' tab next to Information Tab should have Color, Black and White, etc. and dpi settings now. Selecting an option Color, B/W etc. can cause dpi settings corruption (especially if the settings are in one line) so set '''dpi first'''. Make sure if Preview is set or not. In the '''Scan''' Tab, press Scan and the scanner will do its duty. Be aware that nothing is saved to disk yet. In the Save tab, change format JPEG, PNG or IFF DEEP. Tick incremental and base filename if necessary and then click the Save button. The image will now be saved to permanent storage. The driver ignores a device if it is already bond to another USB class, rejects it from being usable. However, open Trident prefs, select your device and use the right mouse button to open. Select "NONE" to prevent poseidon from touching the device. Now save settings. It should always work now. [[#top|...to the top]] ===Emulators=== ==== Amiberry ==== ==== Amiga Emu - Janus UAE ==== With Amibridge, AROS attempts to make the UAE emulator seem embedded within but it still is acting as an app There is no dynarec m68k for each hardware that Aros supports or direct patching of motorola calls to AROS hardware accelerated ones unless the emulator has that included Try starting Janus with a priority of -1 like this little script: <pre> cd sys:system/AmiBridge/emulator changetaskpri -1 run janus-uae -f my_uaerc.config >nil: cd sys:prefs endcli </pre> This stops Janus hogging all the CPU time. ===Miscellaneous=== ====Screensaver Blanker==== Most blankers on the amiga (i.e. aros) run as commodities (they are in the tools/commodities drawer). Double click on blanker. Control is with an app called Exchange, which you need to run first (double click on app) or run QUIET sys:tools/commodities/Exchange >NIL: but subsequently can use (Cntrl Alt h). Icon tool types (may be broken) or command line options <pre> seconds=number </pre> Once the timing is right then add the following to s:icaros-sequence or s:user-startup e.g. for 5 minutes run QUIET sys:tools/commodities/Blanker seconds=300 >NIL: *[http://archives.aros-exec.org/index.php?function=showfile&file=graphics/screenblanker/gblanker.i386-aros.zip Garshneblanker] can make Aros unstable or slow. Certain blankers crashes in Icaros 2.0.x like Dragon, Executor. *[ Acuario AROS version], the aquarium screen saver. Startup: extras:acuariofv-aros/acuario Kill: c:break name=extras:acuariofv-aros/acuario Managed to start Acuario by the Executor blanker. <pre> cx_priority= cx_popkey= ie CX_POPKEY="Shift F1" cx_popup=Yes or No </pre> <pre> Qualifier String Input Event Class ---------------- ----------------- "lshift" IEQUALIFIER_LSHIFT "rshift" IEQUALIFIER_RSHIFT "capslock" IEQUALIFIER_CAPSLOCK "control" IEQUALIFIER_CONTROL "lalt" IEQUALIFIER_LALT "ralt" IEQUALIFIER_RALT "lcommand" IEQUALIFIER_LCOMMAND "rcommand" IEQUALIFIER_RCOMMAND "numericpad" IEQUALIFIER_NUMERICPAD "repeat" IEQUALIFIER_REPEAT "midbutton" IEQUALIFIER_MIDBUTTON "rbutton" IEQUALIFIER_RBUTTON "leftbutton" IEQUALIFIER_LEFTBUTTON "relativemouse" IEQUALIFIER_RELATIVEMOUSE </pre> <pre> Synonym Synonym String Identifier ------- ---------- "shift" IXSYM_SHIFT /* look for either shift key */ "caps" IXSYM_CAPS /* look for either shift key or capslock */ "alt" IXSYM_ALT /* look for either alt key */ Highmap is one of the following strings: "space", "backspace", "tab", "enter", "return", "esc", "del", "up", "down", "right", "left", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "help". </pre> [[#top|...to the top]] ==== World Construction Set WCS (Version 2.031) ==== WCS is a fractal landscape software such as Scenery Animator, Vista Pro and Panorama. Open sourced February 2022, World Construction Set [https://3dnature.com/downloads/legacy-software/ legally and for free] and [https://github.com/AlphaPixel/3DNature c source]. Announced August 1994 this version dates from April 1996 developed by Gary R. Huber and Chris "Xenon" Hanson" from Questar <pre> Assign "WCSProjects:" "Volume:Dir/Dir/WCSProjects" Assign "WCSFrames:" "Volume:Dir/Dir/WCSFrames" </pre> <pre> Load projects .proj by accessing pull down menu Project -> Open then click on CanyonSunset.proj OK to changing .par file and enlarge Status Log window to show what is happening Render by pull down menu Modules -> Render with End equal 1 not 300 then click bottom middle button Render </pre> [https://www.youtube.com/watch?v=CxQDmf1ZWG0 Youtube walkthrough of above], [], [], Also try working with the already built file ColoDemo - Then open with the drop-down menu: Project/Open, then WCSProject:ColoDemo.proj Which allows you to use altimetric DEM files already included and Loading scene parameters from ColoDemo.par Once this is done, save everything with a new name to start working exclusively on your project. Then drop-down menu and select Save As ("NewName".proj name), then drop-down menu to open parameter and select Save All ( .par name) After launching the software, there is a the Module Control Panel composed of five icons. It is a dock type shortcut of the first few functions of the drop-down menu *Database - Load (#?.proj), Append, Create, Edit, Save, Dir List (of WCSProject drawer), *Data Ops - Extract / Convert Interp DEM, Import DLG, DXF, WDB and export LW map 3d formats *Map View - Database file Loader leading to Map View Control with option to the Database Editor *Parameters - Editor for Motion, Color, Ecosystem, Clouds, Waves, management of altimeter files DEM, sclock settings etc *Render - rendering terrain These are more in the pull down menu but not in the dock *Motion Editor *Color Editor *Ecosys Editor Simple minimal workflow *Load database (1st icon - 1st) *Set parameters and save .par file (4th icon) *Render scene (5th icon) [https://www.youtube.com/watch?v=ZbTwwR2qcc4 Youtube], [], <pre> .proj new project name which creates a drawer of additional files .binary array, ascii array .xyz , z buffer, DTED .dt0, vista 1990s dem, iff conversion .Obj with .elev, .frd with .hdr maps, - digital elevation model (DEM) is a 3D representation of elevation data in various formats USGS 7.5MinDEM, .par </pre> Since for the time being no project is loaded, a query window indicates a procedural error when clicking on the rendering icon (right end of the bar). The menu is quite traditional; it varies according to the activity of the windows. To display any altimetric file in the "Mapview" (third icon of the panel), There are three possibilities: * Loading of a demonstration project. * The import of a DEM file, followed by texturing and packaging from the "Database-Editor" and the "Color-Editor". * The creation of an altimetric file in WCS format, then texturing. The altimeter file editing (display in the menu) is only made possible if the "Mapview" window is active. The software is made up of many windows and won't be able to describe them all. Know that "Color-Editor" and the "Data-Editor" comprise sufficient functions for obtaining an almost real rendering quality. You have the possibility of inserting vector objects in the "Data-Editor" (creation of roads, railways, etc.) The Map View (MapView) window *Database - Objects and Topos *View - Align, Center, Zoom, Pan, Move *Draw - Maps and distance *Object - Find, highlight, add points, conform topo, duplicate *Motion - Camera, Focus, path, elevation *Windows - DEM designer, Cloud (.cld) and wave (.wve) editor, You will notice that by selecting this window and simply moving the pointer to various points on the map you will see latitude and longitude values ​​change, along with the height. Drop-down menu and Modules, then select MapView and change the width of the window with the map to arrange it in the best way on the screen. With the Auto button the center. Window that then displays the contents of my DEM file, in this case the Grand Canyon. MapView allows you to observe the shape of the landscape from above ZOOM button Press the Zoom button and then with the pointer position on a point on the map, press the left mouse button and then move to the opposite corner to circumscribe the chosen area and press the left mouse button again, then we will see the enlarged area selected on the map. Would add that there is a box next to the Zoom button that allows the direct insertion of a value which, the larger it is, the smaller the magnification and the smaller the value, the stronger the magnification. At each numerical change you will need to press the DRAW button to update the view. PAN button Under Zoom you will find the PAN button which allows you to move the map at will in all directions by the amount you want. This is done by drawing a line in one direction, then press PAN and point to an area on the map with the pointer and press the left mouse button. At this point, leave it and move the pointer in one direction by drawing a line and press the left mouse button again to trigger the movement of the map on the screen (origin and end points). Do some experiments and then use the Auto button immediately below to recenter everything. There are parameters such as TOPO, VEC to be left checked and immediately below one that allows different views of the map with the Style command (Single, Multi, Surface, Emboss, Slope, Contour), each with its own particularities to highlight different details. Now you have the first basics to manage your project visually on the map. Close the MapView window and go further... Let's start working on ECOSYSTEMS If we select Emboss from the MapView Style command we will have a clear idea of ​​how the landscape appears, realizing that it is a predominantly desert region of our planet. Therefore we will begin to act on any vegetation present and the appearance of the landscape. With WCS we will begin to break down the elements of the landscape by assigning defined characteristics. It will be necessary to determine the classes of the ecosystem (Class) with parameters of Elevation Line (maximum altitude), Relative Elevation (arrangement on basins or convexities with respectively positive or negative parameters), Min Slope and Max Slope (slope). WCS offers the possibility of making ecosystems coexist on the same terrain with the UnderEco function, by setting a Density value. Ecosys Ecosystem Editor Let's open it from Modules, then Ecosys Editor. In the left pane you will find the list of ecosystems referring to the files present in our project. It will be necessary to clean up that box to leave only the Water and Snow landscapes and a few other predefined ones. We can do this by selecting the items and pressing the Remove button (be careful not for all elements the button is activated, therefore they cannot all be eliminated). Once this is done we can start adding new ecosystems. Scroll through the various Unused and as soon as the Name item at the top is activated allowing you to write, type the name of your ecosystem, adding the necessary parameters. <pre> Ecosystem1: Name: RockBase Class: Rock Density: 80 MinSlope: 15 UnderEco: Terrain Ecosystem2: Name: RockIncl Clss: Rock Density: 80 MinSlope: 30 UnderEco: Terrain Ecosystem3: Name: Grass Class Low Veg Density: 50 Height: 1 Elev Line : 1500 Rel El Eff: 5 Max Slope: 10 – Min Slope: 0 UnderEco: Terrain Ecosistema4: Name: Shrubs Class: Low Veg Density: 40 Height: 8 Elev Line: 3000 Rel El Eff: -2 Max Slope: 20 Min Slope : 5 UnderEco: Terrain Ecosistema5: Name: Terrain Class: Ground Density: 100 UnderEco: Terrain </pre> Now we need to identify an intermediate ecosystem that guarantees a smooth transition between all, therefore we select as Understory Ecosystem the one called Terrain in all ecosystems, except Snow and Water . Now we need to 'emerge' the Colorado River in the Canyon and we can do this by raising the sea level to 900 (Sea Level) in the Ecosystem called Water. Please note that the order of the ecosystem list gives priority to those that come after. So our list must have the following order: Water, Snow, Shrubs, RockIncl, RockBase, Terrain. It is possible to carry out all movements with the Swap button at the bottom. To put order you can also press Short List. Press Keep to confirm all the work done so far with Ecosystem Editor. Remember every now and then to save both the Project 'Modules/Save' and 'Parameter/Save All' EcoModels are made up of .etp .fgp .iff8 for each model Color Editor Now it's time to define the colors of our scene and we can do this by going to Modules and then Color Editor. In the list we focus on our ecosystems, created first. Let's go to the bottom of the list and select the first white space, assigning the name 'empty1', with a color we like and then we will find this element again in other environments... It could serve as an example for other situations! So we move to 'grass' which already exists and assign the following colors: R 60 G 70 B50 <pre> 'shrubs': R 60 G 80 B 30 'RockIncl' R 110 G 65 B 60 'RockBase' R 110 G 80 B 80 ' Terrain' R 150 G 30 B 30 <pre> Now we can work on pre-existing colors <pre> 'SunLight' R 150 G 130 B 130 'Haze and Fog' R 190 G 170 B 170 'Horizon' R 209 G 185 B 190 'Zenith' R 140 G 150 B 200 'Water' R 90 G 125 B 170 </pre> Ambient R 0 G 0 B 0 So don't forget to close Color Editor by pressing Keep. Go once again to Ecosystem Editor and assign the corresponding color to each environment by selecting it using the Ecosystem Color button. Press it several times until the correct one appears. Then save the project and parameters again, as done previously. Motion Editor Now it's time to take care of the framing, so let's go to Modules and then to Motion Editor. An extremely feature-rich window will open. Following is the list of parameters regarding the Camera, position and other characteristics: <pre> -Camera Altitude: 7.0 -Camera Latitude: 36.075 -Camera Longitude: 112.133 -Focus Attitude: -2.0 -Focus Latitude: 36.275 -Focus Longitude: 112.386 -Camera : 512 → rendering window -Camera Y: 384 → rendering window -View Arc: 80 → View width in degrees -Sun Longitude: 172 -Sun Latitude: -0.9 -Haze Start: 3.8 -Haze Range: 78, 5 </pre> As soon as the values ​​shown in the relevant sliders have been modified, we will be ready to open the CamView window to observe the wireframe preview. Let's not consider all the controls that will appear. Well from the Motion Editor if you have selected Camera Altitude and open the CamView panel, you can change the height of the camera by holding down the right mouse button and moving the mouse up and down. To update the view, press the Terrain button in the adjacent window. As soon as you are convinced of the position, confirm again with Keep. You can carry out the same work with the other functions of the camera, such as Focus Altitude... Let's now see the next positioning step on the Camera map, but let's leave the CamView preview window open while we go to Modules to open the window at the same time MapView. We will thus be able to take advantage of the view from the other together with a subjective one. From the MapView window, select with the left mouse button and while it is pressed, move the Camera as desired. To update the subjective preview, always click on Terrain. While with the same procedure you can intervene on the direction of the camera lens, by selecting the cross and with the left button pressed you can choose the desired view. So with the pressure of Terrain I update the Preview. Possibly can enlarge or reduce the Map View using the Zoom button, for greater precision. Also write that the circle around the cameras indicates the beginning of the haze, there are two types (haze and fog) linked to the altitude. Would also add that the camera height is editable through the Motion Editor panel. The sun Let's see that changing the position of the sun from the Motion Editor. Press the SUN button at the bottom right and set the time and the date. Longitude and latitude are automatically obtained by the program. Always open the View Arc command from the Motion Editor panel, an item present in the Parameter List box. Once again confirm everything with Keep and then save again. Animation The animation part is not left-back and also occupies a window. The settings possibilities are enormous. A time line with dragging functions ("slide", "drag"...) comparable to that of LightWave completes this window. A small window is available for positioning the stars as a function of a date, in order to vary the seasons and their various events (and yes...). At the bottom of the "Motion-Editor", a "cam-view" function will give you access to a control panel. Different preview modes are possible. The rendering is also accessible through a window. No less than nine pages compose it. At this level, you will be able to determine the backup name of your images ("path"), the type of texture to be calculated, the resolution of the images, activate or deactivate functions such as the depth buffer ("zbuffer"), the blur, the background image, etc. Once all these parameters have been set, all you have to do is click on the "Render" button. For rendering go to Modules and then Render. Select the resolution, then under IMA select the name of the image. Move to FRA and indicate the level of fractal detail which of 4 is quite good. Then Keep to confirm and then reopen the window, pressing Render you will see the result. The image will be opened with any viewing program. Strengths: * Multi-window. * Quality of rendering. * Accuracy. * Opening, preview and rendering on CyberGraphX screen. * Extract / Convert Interp DEM, Import DLG, DXF, WDB and export LW map 3d formats * The "zbuffer" function. Weaknesses: * No OpenGL management * Calculation time. * No network computing tool. ====Writing CD / DVD - Frying Pan==== Can be backup DVDs (4GB ISO size limit due to use of FileInfoBlock), create audio cds from mp3's, and put .iso files on discs If using for the first time - click Drive button and Device set to ata.device and unit to 0 (zero) Click Tracks Button - Drive 1 - Create New Disc or Import Existing Disc Image (iso bin/cue etc.) - Session File open cue file If you're making a data cd, with files and drawers from your hard drive, you should be using the ISO Builder.. which is the MUI page on the left. ("Data/Audio Tracks" is on the right). You should use the "Data/Audio tracks" page if you want to create music cds with AIFF/WAV/MP3 files, or if you download an .iso file, and you want to put it on a cd. Click WRITE Button - set write speed - click on long Write button Examples Easiest way would be to burn a DATA CD, simply go to "Tracks" page "ISO Builder" and "ADD" everything you need to burn. On the "Write" page i have "Masterize Disc (DAO)", "Close Disc" and "Eject after Write" set. One must not "Blank disc before write" if one uses a CDR AUDIO CD from MP3's are as easy but tricky to deal with. FP only understands one MP3 format, Layer II, everything else will just create empty tracks Burning bootable CD's works only with .iso files. Go to "Tracks" page and "Data/Audio Tracks" and add the .iso ====odf==== Every ODF file is a collection of several subdocuments within a package (ZIP file), each of which stores part of the complete document. * content.xml – Document content and automatic styles used in the content. * styles.xml – Styles used in the document content and automatic styles used in the styles themselves. * meta.xml – Document meta information, such as the author or the time of the last save action. * settings.xml – Application-specific settings, such as the window size or printer information. To read document follow these steps: * Extracting .ods file. * Getting content.xml file (which contains sheets data). * Creating XmlDocument object from content.xml file. * Creating DataSet (that represent Spreadsheet file). * With XmlDocument select “table:table” elements, and then create adequate DataTables. * Parse child’s of “table:table” element and fill DataTables with those data. * At the end, return DataSet and show it in application’s interface. To write document follow these steps: * Extracting template.ods file (.ods file that we use as template). * Getting content.xml file. * Creating XmlDocument object from content.xml file. * Erasing all “table:table” elements from the content.xml file. * Reading data from our DataSet and composing adequate “table:table” elements. * Adding “table:table” elements to content.xml file. * Zipping that file as new .ods file. XLS file format The XLS file format contains streams, substreams, and records. These sheet substreams include worksheets, macro sheets, chart sheets, dialog sheets, and VBA module sheets. All the records in an XLS document start with a 2-byte unsigned integer to specify Record Type (rt), and another for Count of Bytes (cb). A record cannot exceed 8224 bytes. If larger than the rest is stored in one or more continue records. * Workbook stream **Globals substream ***BoundSheet8 record - info for Worksheet substream i.e. name, location, type, and visibility. (4bytes the lbPlyPos FilePointer, specifies the position in the Workbook stream where the sheet substream starts) **Worksheet substream (sheet) - Cell Table - Row record - Cells (2byte=row 2byte=column 2byte=XF format) ***Blank cell record ***RK cell record 32-bit number. ***BoolErr cell record (2-byte Bes structure that may be either a Boolean value or an error code) ***Number cell record (64-bit floating-point number) ***LabelSst cell record (4-byte integer that specifies a string in the Shared Strings Table (SST). Specifically, the integer corresponds to the array index in the RGB field of the SST) ***Formula cell record (FormulaValue structure in the 8 bytes that follow the cell structure. The next 6 bytes can be ignored, and the rest of the record is a CellParsedFormula structure that contains the formula itself) ***MulBlank record (first 2 bytes give the row, and the next 2 bytes give the column that the series of blanks starts at. Next, a variable length array of cell structures follows to store formatting information, and the last 2 bytes show what column the series of blanks ends on) ***MulRK record ***Shared String Table (SST) contains all of the string values in the workbook. ACCRINT(), ACCRINTM(), AMORDEGRC(), AMORLINC(), COUPDAYBS(), COUPDAYS(), COUPDAYSNC(), COUPNCD(), COUPNUM(), COUPPCD(), CUMIPMT(), CUMPRINC(), DB(), DDB(), DISC(), DOLLARDE(), DOLLARFR(), DURATION(), EFFECT(), FV(), FVSCHEDULE(), INTRATE(), IPMT(), IRR(), ISPMT(), MDURATION(), MIRR(), NOMINAL(), NPER(), NPV(), ODDFPRICE(), ODDFYIELD(), ODDLPRICE(), ODDLYIELD(), PMT(), PPMT(), PRICE(), PRICEDISC(), PRICEMAT(), PV(), RATE(), RECEIVED(), SLN(), SYD(), TBILLEQ(), TBILLPRICE(), TBILLYIELD(), VDB(), XIRR(), XNPV(), YIELD(), YIELDDISC(), YIELDMAT(), <pre> </pre> <pre> </pre> <pre> </pre> {{BookCat}} ci7kugbh14cjhpi32knd0zco95z80fu Trigonometry/Teachers Notes/About This Book 0 241615 4672054 4567254 2026-09-24T08:17:29Z R. Henrik Nilsson 3395618 degress > degrees 4672054 wikitext text/x-wiki This page explains for someone who already knows trigonometry the structure and contents of the book(s). We also indicate the pedagogical points being made. This is to help teachers, but it also gives guidance when someone wants to add material as to where the material should go - without them having first to have read the whole book. ==Features of the Books (at a Glance) == There are three books: * '''Book 1''', basic trig, is extensively cross referenced to '''Khan Academy Videos'''. * '''Book 2''' explores some of the prettier, but usually not examined extensions especially various circles relating to triangles. * '''Book 3''' relates sine cosine and exponential function, uses power series, complex numbers and calculus. <!--spacer--> All three books: * Have sections '''for enthusiasts''' * Have both '''worked examples''' and '''exercises'''. * Pages where maths is directly '''applied to Computer Science''' are marked with a {{cs}} symbol. Some differences between this book and more traditional texts include a greater interest in "how do you check this?", "how do you learn/remember this?", "what conventions are arbitrary, and what is the reason for the ones which aren't arbitrary?", "why do we care at all about proof?". == Trigonometry Book 1 == '''Basic Trigonometry''' This section is roughly at the same level as the Khan Academy Trigonometry course (K-12) and is designed to work well with it. We cannot assume that students are fluent with algebra, and so in this section we take many explanations step by step. We use the convention used in German schools of ''writing on the right hand side what we are about to do in the next step''. <!--Note: we actually need to do this, or change the statement--> We work well with other resources, videos, on-line exercises e.t.c., and as a convenience provide links where relevant. We have our own exercises too. It is not by any means essential to have access to the external links to use our course. Generally our on-page exercises are more interesting than can be created automatically, which we hope will encourage students to actually do them, because of course it is essential that students practice the skills somehow and actually engage with the course. <!-- We don't currently give answers to exercises. We also have diagnostic exercise pages which students can use for themselves to work out what they need to revise. These are for the students. They are not designed as tests that are scored out of ten or some other number. The [[Trigonometry/Collection_of_Problems|exercise pages]] also teach how to select from the various techniques learned so far, whereas the on-page exercises are about the technique presented on that page. --> == Trigonometry Book 2 == '''Geometric Extensions - not exam material (usually)''' This has more pre-calculus trigonometry, though using some vector and matrix maths. The algebra moves at a brisker pace than in Book 1 but vector and matrix maths is explained in detail where it is used. The topics are less central to understanding trigonometry than in Book 1. For many standard trigonometry courses Book 2 would be optional material. This book deepens the understanding of the many relationships between triangles and circles and uses trigonometric functions to investigate ellipses and spirals. It shows how to tackle some harder trigonometric function identities. Some of the geometric material is motivated by computer applications of trigonometry. == Trigonometry Book 3 == '''Trig with Calculus and Complex Numbers''' For this more advanced section the reader will need to have done some basic calculus, to be comfortable with polynomials and differentiation and to 'get' the idea of the 'square root of minus one'. More fluency with algebra is assumed. That's a big jump from the basic sections, which is why we don't mix the three sections. Some of the topics touch on deep mathematics. The point of doing this is that the way trigonometry leads into deeper water via the Fourier transform ''is'' deep. Bringing in some of the working tools of more advanced material, Pontryagin duality, Eigenfunctions, actually helps to make it all a lot clearer. One can see this by analogy. Addition formulae from trigonometry are a great deal simpler and less arbitrary from the high ground of complex analysis. == Sub-chapters in each 'For Enthusiasts' == All three books have chapters 'for enthusiasts'. * An example in the Book 1 is calculating the distance between New York and Tokyo using their latitude and longitude and the radius of the Earth. That's clearly for enthusiasts. It is a more involved calculation than you'd normally expect someone to do at the basic level. The Basic for-enthusiasts section only uses the trigonometry that has been taught by that stage, no calculus, complex numbers or simultaneous equations. * An example in Book 2 is Delaunay triangulation, which has many geometry related applications in computing. The main book 2 section on the Circumcircle introduces the necessary vector maths of triple product. * An example in the Book 3 is Chebyshev polynomials, showing how (a) they are an expansion in terms of cosine/sine and (b) why they approach the min-max polynomials (for the interval [-1,1]). ==Trigonometry Book 1 Contents== Does not include calculus, power series, vectors or complex numbers. Terms will ALWAYS be explained on the page where they are first used. * '''[[Trigonometry/Introduction|Introduction]]''' We give a formula straight away on the front page (Pythagoras). We get across that formulas are central, this is maths, no point denying it, and say what trigonometry is for. * '''[[Trigonometry/Angles of a triangle sum to 180 Degrees|Angles of a triangle sum to 180 Degrees]]:''' We use this page to get across the idea that you can calculate more information about a triangle given some of the information. Terminology 'isosceles', 'equilateral' and 'congruent' are introduced. We also start very early on forming the idea of 'proof'. Having a lot of examples of something being true is not the same as 'proof'. We don't give any proof yet, however. A worked example uses algebra to solving <math>2a+50=180</math>. Exercises include finding congruent triangles in this figure... * '''[[Trigonometry/Pythagorean Theorem|The Pythagorean Theorem]]''' We define 'hypotenuse' and check the student can identify the hypotenuse, show how the formula works and how to rearrange it. We look at specific examples, the 30-60-90 and 45-90-45 triangles. Make sure they recognise them when in different orientations. We then show how to use Pythagoras' theorem more than once, with a steps in a spiral, and with the 'pyramid height' example. We remind that we have not yet proved that Pythagoras is true. Exercises. * '''[[Trigonometry/Proof: Pythagorean Theorem|Proof: Pythagorean Theorem]]''' We give the pretty demonstration of Pythagoras to show why it's true followed by Euclid's proof. * '''[[Trigonometry/Exercise:_A_Puzzle_Triangle|Exercise: A Puzzle Triangle]]''' [[File:Missing square puzzle.svg|thumb|upright=0.8|How diagrams can mislead]] Triangle puzzle (invented by Paul Curry). This is getting across the importance of rigour in a fun way. Students who do work out what is going on will have a deeper sense of why you need to be careful in a proof and justify every step. It is not enough that two things 'look' the same. Students who don't work out the explanation themselves will still have had practice at calculating area and using Pythagoras. Later when we've taught cosine we suggest they go back and calculate the angles, so they get a second chance. We've made this exercise easier by having talked about slopes in an earlier exercise, with the roadsigns, and even had the same close ratios in those slopes. * '''[[Trigonometry/Proof: Angles sum to 180|Proof: Angles sum to 180]]:''' [[File:SubdividedTriangle.png|thumb|upright=0.7|Angles sum to 180 - Demonstrate using this diagram]] We give the pretty demonstration of why this is so using image of triangle divided into four smaller triangles. ''Student asked to convince themselves it is still true when the triangle has an obtuse angle.'' Ensure that they know that a bigger triangle does not have 'bigger angles'. We follow with the trad proof. * '''[[Trigonometry/Plotting (Cos t, Sin t)|Exercise: Plotting (Cos t, Sin t)]]''' This is a really crucial page in the course, where we introduce students to <math>\cos t</math> and <math>\sin t</math> (in degrees). We ask the student to use their calculator and draw a table of some pairs <math>(\cos t, \sin t)</math> for various values of <math>t</math>, like 0,30,60,45,90,120,135... Where do they appear on a graph? Define <math>\sin</math> and <math>\cos</math> as x and y for points on a unit circle. Also pronunciation of sin/sine coz/cosine. Note that it is unusual to introduce cosine and sine this way, using the unit circle, but it is an easier route than starting from soh-cah-toa. There can be a sense of delight and discovery that the cosine and sine buttons on the calculator are for 'the unit circle'. * '''[[Trigonometry/Soh-Cah-Toa|Soh-Cah-Toa]]''' , using 30-60-90 triangle as an example. Then a 5-85-90 triangle! This relates it to the unit circle, and reminds that the cos of theta is the length of the adjacent side when the hypotenuse is one. * '''[[Trigonometry/Sine Squared plus Cosine Squared|Sine Squared plus Cosine Squared]]''' <math>\sin^2x+\cos^2x=1</math> It's just Pythagoras in disguise. Explains the notation i.e. <math>(\sin x)^2</math>. Takes some time to explain that squaring a number between minus one and plus one makes it closer to zero. * '''[[Trigonometry/Radians|Radians]]''' We can extract some radian content from [[Trigonometry/In_simple_terms#Radians|this page]]. * '''[[Trigonometry/The_Unit_Circle|The Unit Circle]]''' Circular chart and table of trig values (as radicals). * '''[[Trigonometry/Solving Triangles Given ASA|Solving Triangles Given ASA]]''' Solving Triangles Given ASA * '''[[Trigonometry/Solving Triangles Given SAS|Solving Triangles Given SAS]]''' Solving Triangles Given SAS * '''[[Trigonometry/The most Difficult Triangles to Solve|The most Difficult Triangles to Solve]]''' What's the hardest triangle-solving problem we can think up? * '''[[Trigonometry/Worked Example: Area of a Roof|Worked Example: Area of a Roof]]''' Using real architect's plans. * '''[[Trigonometry/Worked Example: Oil Tanker Arriving in Port|Worked Example: Oil Tanker Arriving in Port]]''' Showing the route it takes, and the distance travelled. * '''[[Trigonometry/Law of Sines|Law of Sines]]''' Law of Sines * '''[[Trigonometry/Law of Cosines|Law of Cosines]]''' Law of Cosines * '''[[Trigonometry/Law of Tangents|Law of Tangents]]''' Law of Tangents * '''[[Trigonometry/Phase and Frequency|Phase and Frequency]]''' <math>\sin( \pi/2-\theta)</math> * '''[[Trigonometry/Graphs_of_Sine_and_Cosine_Functions|Graphs of Sine, Cos and Tan]]''' * '''[[Trigonometry/Graph of Sine Squared|Graph of Sine Squared]]''' Graph of <math>\sin^2\theta</math> * '''[[Trigonometry/Addition Formula for Sines|Addition Formula for Sines]]''' Not just the formula, but also a detailed walk through of the proof. How would you come up with the necessary diagram? * '''[[Trigonometry/Addition Formula for Cosines|Addition Formula for Cosines]]''' * '''[[Trigonometry/Double-Angle Formulas|Double Angle Formulas]]''' * '''[[Trigonometry/Waves in and out of Phase|Waves in and out of Phase]]''' * '''[[Trigonometry/Beat Frequencies|Beat Frequencies]]''' * '''[[Trigonometry/Cosecant, Secant, Cotangent|Cosecant, Secant, Cotangent]]''' Cosecant, Secant, Cotangent. As well as the formulae we also illustrate with triangles in which the adjacent is 1 or the opposite is 1. We're not great fans of these functions, or in particular the many identities that follow. At this level it is quite enough to mention the functions and then stick to 1/sin, 1/cos, 1/tan where we might otherwise use them. * '''[[Trigonometry/Graphs_of_Other_Trigonometric_Functions|Graphs of Cosec, Sec and Cot]]''' * '''[[Trigonometry/Inverse_Trigonometric_Functions|Inverse Trigonometric Functions]]''' * ''other stuff'' * '''[[Trigonometry/Remembering Trig Formulae|Remembering Trig Formulae]]''' Remembering formulae - NO Mnemonics here. This is all about checking that the formula makes sense. The page I've linked to has some formulae and we'd add discussion of how to remember them or derive them instantly. ==Trigonometry Book 1: For Enthusiasts== Some of these are easier than others; help in making these accessible to kids much appreciated. * '''[[Trigonometry/For Enthusiasts/Introductions|Introduction]]''' * '''[[Trigonometry/For_Enthusiasts/Regular_Polygons|Regular Polygons]]''' Sum of angles in a hexagon, and a one-million-a-gon, and the lengths of the sides. Dividing up a polygon at the centre, at one vertex or looking at the exterior angles, to show that there is more than one way to do the same thing. * '''[[Trigonometry/For Enthusiasts/What Tessellations are Possible with Regular Polygons|What Tessellations are Possible with Regular Polygons?]]''' Here we allow mixes like squares and octagons. * '''[[Trigonometry/For Enthusiasts/The Distance from New York to Tokyo|The Distance from New York to Tokyo]]''' Uses latitude and longitude, and calculation of an arc length from the length of a chord. * '''[[Trigonometry/For Enthusiasts/Lissajous Figures|Lissajous Figures]]''' Lissajous figures * '''[[Trigonometry/For Enthusiasts/The CORDIC Algorithm|The CORDIC Algorithm]]''' A nice geometrical presentation of how a computer can compute sin and cosine rapidly using a small table for the angles <math>2^{-n}\pi\,</math> * '''[[Trigonometry/For Enthusiasts/Pythagorean Triples|Pythagorean Triples]]''' Formula for generating Pythagorean triples * '''[[Trigonometry/For Enthusiasts/Triangles on a Sphere|Triangles on a Sphere]]''' Triangles on a sphere. == Trigonometry Book 2 Contents == Requires Book 1, greater fluency with algebra - because fewer steps are shown - and for some parts introductory familiarity with matrices and vectors is needed. * '''[[Trigonometry/Book 2 Introduction|Introduction]]''' * '''[[Trigonometry/Geometric Definitions of Trig Functions]]''' * '''[[Trigonometry/Thales Theorem|Thales Theorem]]''' [[File:Animated illustration of thales theorem.gif|thumb|upright=0.5|Animated illustration of Thales Theorem]] also explain same principle applies to any angle, not just 90 degrees. * '''[[Trigonometry/Ellipses|Ellipses]]''' Using sine and cosine to draw ellipses. Part of the presentation is an ellipse as a circle in perspective. We show that this is valid for both true perspective and orthographic projection (easier). * '''[[Trigonometry/Spirals|Spirals]]''' Using <math>\sin</math> and <math>\cos</math> to draw spirals * '''[[Trigonometry/Circles and Triangles/The Circumcircle|The Circumcircle]]''' Introduces the triple product and its interpretation. * '''[[Trigonometry/Circles and Triangles/The Incircle|The Incircle]]''' * '''[[Trigonometry/Circles and Triangles/The Excircles|The Excircles]]''' * '''[[Trigonometry/Circles and Triangles/The Excentral Triangle|The Excentral Triangle]]''' * '''[[Trigonometry/Circles and Triangles/The Pedal Triangle|The Pedal Triangle]]''' * '''[[Trigonometry/Circles and Triangles/Distances Between Centres|Distances Between Centres]]''' * '''[[Trigonometry/Circles and Triangles/The Nine-point Circle|The Nine-point Circle]]''' ==Trigonometry Book 2: For Enthusiasts== * '''[[Trigonometry/For_Enthusiasts/Delaunay_triangulation|The Delaunay Triangulation]]''' A good application of the Circumcircle. * '''[[Trigonometry/For Enthusiasts/Doing without Sine|Doing without Sine]]''' * '''[[Trigonometry/For_Enthusiasts/Less-Used Trig Identities|Less-Used Trig Identities]]''' Treble (and higher) angle formulae, and some of the more beautiful but less useful trig identities, including [[Trigonometry/Sum_into_Product|these]]. * '''[[Trigonometry/For Enthusiasts/Degrees Minutes and Seconds|Degrees Minutes and Seconds]]''' Degrees Minutes and Seconds (we don't need them in normal trig but should include them for completeness) I'm not really keen on this page, so hope someone else who is keen writes it. ==Trigonometry Book 3 Contents== Rotations in 3D (including quaternions) will go into a wiki book on matrices, i.e not here. Probably Vectors and scalar and triple products belong there too. * '''[[Trigonometry/Book 3 Introduction|Introduction]]''' Intro - we're working in radians throughout. (Brief) review of complex numbers and differentiating polynomials. * '''[[Trigonometry/Derivative of Cosine|Derivative of cosine]]''' * '''[[Trigonometry/Derivative of Sine|Derivative of Sine]]''' * '''[[Trigonometry/Power Series for e to the x|Power Series for e to the x]]''' Will start with <math>2^n</math> and <math>3^n</math> and derive the power series for <math>e^n</math>. Remind that <math>4!</math> means 1x2x3x4=24. I'd like to refer to a new wikibook e-pi-phi-i which will go a bit deeper into <math>e</math> (and <math>\pi</math> and <math>\phi</math> and <math>i</math>) and that will have lovely illustrations, especially for phi (spirals) * '''[[Trigonometry/Power Series for Cosine|Power Series for Cosine]]''' Then we will do the same trick for cos * '''[[Trigonometry/Power Series for Sine|Power Series for Sine]]''' and then for sine * '''[[Trigonometry/Relating Power Series for Sine Cosine Exponential|Relating Power Series for Sine Cosine Exponential]]''' and then show that <math>e^{i\theta} = \cos \theta + i \sin \theta</math>. * '''[[Trigonometry/A Square Wave in Sines|A Square Wave in Sines]]''' Decomposing a square wave into sine waves * '''[[Trigonometry/The Gibbs Overshoot|The Gibbs Overshoot]]''' The Gibbs 'overshoot'. * '''[[Trigonometry/Applications_and_Models|The Simple Harmonic Oscillator]]''' ==Trigonometry Book 3: For Enthusiasts== * '''[[Trigonometry/For Enthusiasts/Trigonometry Done Rigorously|Trigonometry Done Rigorously]]''' Give a rigorous formulation of the Trigonometric functions, describe why calculus is usually involved. (The idea being that defining an angle involves the arc length for a circle, which is rigorously defined as an integral.) * '''[[Trigonometry/For Enthusiasts/Chebyshev Polynomials|Chebyshev Polynomials]]''' Chebyshev polynomials are good approximations to the best (minimal max error) polynomials. ==Teacher's Notes== * '''[[Trigonometry/Teachers Notes/About This Book|About This Book]]''' This page. * '''[[Trigonometry/Teachers Notes/Common Student Errors|Common Student Errors]]''' List the kinds of things to watch for. {{Trig/NAV |next= |previous= }} {{BookCat}} lhaij8cbjch9ho9725010o3n2bshe17 Structural Biochemistry/Prion Protein Misfolding and Disease 0 244700 4672077 4667840 2026-09-24T08:49:15Z R. Henrik Nilsson 3395618 amplication > amplification 4672077 wikitext text/x-wiki =Prions= ==Prion Disease== Transmissible spongiform encephalopathies (TSEs or prion diseases) are a rare group of deadly neurodegenerative disorders that affect humans and other mammals. TSEs are protein misfolding diseases that encompass the aggregation of abnormally accumulated form of the normal host prion protein. TSEs are unique in that they are transmissible. Characteristics of TSEs include that they replicate, are capable of selective evolution (can evolve drug resistance), have various strains of infectious agent that are related to unique phenotypes in vivo, and demonstrate strong species specificities; the same characteristic of many viral and bacterial pathogens. [[File:Prion subdomain-colored sec structure.png|thumb|Prion subdomain-Residues 125-228 are shown]] There are 3 classes of TSE diseases in humans: # Sporadic – the most common form of TSE (e.g. Creutzfeldt Jakob disease) # Heritable – in which TSE is mutation within the prion protein # Acquired – in which TSE is a result of ingestion or inoculation of TSE contaminated materials. <gallery> File:Histology bse.jpg|Microscopic "holes" are characteristic in prion-affected tissue sections, causing the tissue to develop a "spongy" architecture. </gallery> ==The Prion Hypothesis== Typical infectious agents use nucleic acids to spread and propagate, evident in bacteria and viruses. The prion hypothesis states simply that the specific diseases detailed above are solely caused by proteins, a sentiment that went against common knowledge at the time of its proposal. At first, it was thought that prions were a side-effect of some other type of infection. This theory does not hold up, however. Experimental evidence since the concept of prion-induced disease was proposed has fallen in favor of this theory, and the effects of prion replication have been witnessed in the lab. <ref name="Prion Hypothesis"></ref> ==History of Prions in Science== Prions and their infectious nature were first discovered in 1937 when scrapie was accidentally transferred to a sheep while attempting a viral inoculation. In later experiments, scrapie was purposefully transmitted to sheep and then mice to determine the nature of this molecule. Cannibalism in New Guinea was the source of infection by kuru in humans and in 1966 this disease was demonstrated to be transmissible to monkeys<ref name="Prion Hypothesis"></ref>. At this point, science was beginning to understand that the infectious nature of prions was different from viral or microbial infection. More recently, outbreaks of Bovine Spongiform Encephalopathy and the emerging variant Creutzfeldt-Jakob disease that was linked to consumption of infected meat were shown to be caused by prions. Historically, studies of prions first determined that the method of infection was novel, and then determined that it was due to a misfolding of the protein chain. The first experiments destroyed nucleic acids with UV and ionizing radiation and found the infectious agent still present<ref name="Prion Hypothesis"></ref>. Then, the smallest molecular weight particles that were still infectious were determined to be on the order of protein weight. Later on, protease-resistant prion protein (PrP) concentration was found to be proportional to the infectivity. Additionally, agents that destroyed protein structure were employed, reducing the infectivity of the PrP. PrP was found to be present in a normally functioning brain, demonstrating that the protein could exist both as a normal and as a malfunctioning protein<ref name="Prion Hypothesis"></ref>. Recently, studies have shown that infectious and non infectious proteins could be mixed and the infectious agent would propagate among non infectious molecules. This demonstrates that the protein folding error can propagate indefinitely. =Prion Replication= ==Conversion of PrP isoforms is the cause of Prion Disease== TSE is a protein misfolding disease in that disease occurs due to conformational changes in host prion protein (PrP). PrP is a mammalian glycoprotein, 209 amino acids long. When the PrP becomes a TSE, in a process known as pathogenesis, a protease sensitive form of PrP (PrP-sen) refolds into PrP-res (a protease- resistant form of prion protein). PrP-res and PrP-sen have the same primary sequence but different secondary structures, with the PrP-sen featuring more alpha-helices. (In other words, PrP-res and PrP-sen are isoforms) PrP-res is the primary component of TSE. Hence it is imperative to research how the PrP-sen to PrP-res conversion occurs, in order to inhibit the formation of the PrP-res form. ==PrP Conversion Mechanism== [[File:Prion Replication.png|400px|thumb|PrP<sup>Sc</sup> induces a conformational change in PrP<sup>c</sup>]] Current knowledge of the PrP<sup>c</sup> to PrP<sup>Sc</sup> conversion can be generalized into a two-step mechanism: '''1)''' Ordered aggregates of pre-cursor “seed” PrP<sup>Sc</sup> bind to PrP<sup>c</sup>. '''2)''' PrP<sup>c</sup> experiences some conformational change that results in the propagation into more PrP<sup>Sc</sup>. The mechanism of this step is largely a mystery. The converted PrP<sup>Sc</sup> is added to the polymer, which eventually fragments and causes more PrP<sup>c</sup> to be converted. This fragmentation is thought to be the rate-limiting step of the reaction.<ref name="Prion Hypothesis"></ref> ===Protein Misfolding Cyclic Amplification=== In 2001, a process for laboratory replication of prions was developed. This process, known as Protein Misfolding Cyclic Amplification (PMCA), produces prions ''in-vitro'' which mimic prions replicated normally ''in-vivo''. This process relies on the idea that prions are auto-catalytic, and can reproduce indefinitely given the correct surroundings. This technique has proven invaluable in the study of prions and the testing of the prion hypothesis. <ref name="Prion Hypothesis"></ref> ==Co-Factors== One area that is still unclear to scientists is the importance of co-factors in the replication process of prions. While it is now understood that there are outside factors that influence the success and rate of prion replication, these co-factors have not been fully discerned and represent an area for future research. ===Transgenic Mice and Hamsters=== Evidence for the role of co-factors in prion replication has come from various studies performed on animal subjects. In a study done on transgenic mice, there was found to be some sort of factor affecting prion protein expression. This was termed "protein X", though the identity of the factor specifically as a protein was never discerned. <ref>Telling GC, et al. [http://www.sciencedirect.com/science/article/pii/0092867495902368 “Prion propagation in mice expressing human and chimeric PrP transgenes implicates the interaction of cellular PrP with another protein.”], ‘[PubMed]’, 27 June 2012. Retrieved on 20 November, 2012. </ref>. In a separate study performed on hamster PrP<sup>c</sup>. When isolated and purified, hamster PrP<sup>c</sup> could not be converted when mixed with PrP<sup>Sc</sup>. When brain homogenate was introduced to the sample, the prion conversion occurred, indicating that there was something in the homogenate that contributed to the conversion, whether as a catalyst or as an integral factor. Further testing showed that that RNA in hamsters acted as a catalyst for prion replication, but not in mice. Specifically how it does this is not clear, but there is a possibility that it helps to stabilize the comformation of PrP<sup>Sc</sup> that is produced. The fact that it does not work on all mammals leads to the possibility of multiple co-factors, or species/organ specific ones. ===Types of Co-Factors=== Although the importance of co-factors is not fully understood, the ways in which co-factors might affect the conversion of prions fall into 5 categories. {| class="wikitable" |- | Genetic Information|| It is possible that there are certain co-factors that contribute to prion replication by helping to determine how these proteins fold. One study that supports this was performed on mice by injecting prions into different types of cells. In each cell, prion replication led to different prion strains, which could be a result of different co-factors in each cell type. <ref>Weissmann C. [http://www.ncbi.nlm.nih.gov/pubmed/19618334 "Thoughts on mammalian prion strains."], '[PubMed]', 2009. Retrieved on 20 November 2012.</ref> |- | Catalytic|| Certain co-factors might catalyze the PrP<sup>c</sup> to PrP<sup>Sc</sup> conversion by attaching to PrP<sup>c</sup> and partially unfolding it. This would make it easier for PrP<sup>Sc</sup> to induce a misfolding pattern on the protein, resulting in the conversion. This type of co-factor has been examined in the lab in ''vitro''. |- | Conformational Stabilization|| Some co-factors might aid in the stabilization of the new prion conformation. Examples of these include nucleic acids, proteins, metal ions, and other things. Many of these are charged species that can bind to the prion and help form a more compact structure. |- | Fragmentation|| PrP<sup>Sc</sup> polymers often fragment, which greatly speeds up the conversion of PrP<sup>c</sup> to PrP<sup>Sc</sup>. Some co-factors may help in this fragmentation process, which creates new seeds and is essential to the replication process. An example of this is found in yeast, which rely on protein 104 (Hsp104). Removing this protein stops prion replication from occurring. |- | Biological Stabilization|| For successful prion replication to occur, prions must first survive in the biological medium. Certain biological resistance, such as microglia cells which can perform phagocytosis, can inhibit their spread. A co-factor that reduces the ability of microglia to destroy these prions would allow them to replicate, and might prove to be essential. <ref name="Prion Hypothesis">Soto, Claudio [http://www.ncbi.nlm.nih.gov/pubmed/21130657 "Prion Hypothesis: The end of the Controversy?"], '[PubMed]', 2010. Retrieved on 20 November 2012.</ref> |} =Prion Structure= ==Primary and Secondary Structure play crucial role in the initial Rate-limiting step== Primary and secondary structural components within at amino acids 108-189 of the PrP-sen proved to be important for conversion, as determined by NMR structure and in vivo studies. PrP-sen at the critical residues (108-189) include most of the folded domain including beta strands, alpha-helices, and most critical, the loops and turns. Slight variation with turns and loops are particularly noteworthy, as it has been determined that the loops are involved in the intermolecular interactions between PrP-sen and PrP-res. ==Lack of Structural Understanding of PrP-res== While there is extensive knowledge of the PrP-sen tertiary structure, the same cannot be said for PrP-res. Part of the reason as to why there isn’t extensive knowledge regarding the mechanistic pathway of the conversion into PrP-res is that the PrP-res structure is unknown, as it has not been purified sufficiently for high-resolution structural studies. Because high-resolution techniques cannot be used, focus on ascertaining the structure of PrP-res has been confined to using lower resolution techniques such as electron microscopy to determine ultrastructure and the secondary structure of PrP-res. =Further Understanding= ==Yeast Prions== One interesting case of prions can be found in yeast. While they are normally observed in mammals, it was found that a particular protein in yeast (Ure2) behaves and reproduces in the way a typical prion does. However, instead of killing its host cell it instead reproduces by inducing conformational change in other proteins and is inherited through cellular division. This special case has led to the discovery of other prions in fungus which also exhibit non-lethal behavior.<ref name="Prion Hypothesis"></ref> =="Good" Prions?== [[File:MAVS Protein.jpg|300px|thumb|MAVS protein conformational change as a result of viral activity. ]] As found in the example of yeast prions, these misfolded proteins are not all inherently malicious and harmful to organic life. In one study conducted by scientists in UT Southwestern, it was found that certain prion-like proteins found within the body may help in the immune system. These mitochondrial antiviral signaling proteins (MAVS) were found to be in mitochondrial membranes, and actively defend them against infection. It was found that under threat of viral infection, MAVS proteins misfold and aggregate on the surface of the mitochondria, effectively shielding the organelle from attack. This deliberate misfolding and aggregation is interesting because it does not reflect the malicious and uncontrollable misfolding often caused by prions in cases such as Cretzfeldt-Jakob Disease and Bovine Spongify Esophagus. While the sequential activation of the system by the initial viral detection can be complex, the aggregation of MAVS proteins actually occurred quickly. <ref>Hou, Fajian et al. [http://www.sciencedirect.com/science/article/pii/S0092867411007161 "MAVS Forms Functional Prion-like Aggregates to Activate and Propagate Antiviral Innate Immune Response"], '[Cell]', 2011. Retrieved on 20 November 2012.</ref> ==Similarity of PrP-res to Amyloid Fibril== The way PrP-res amplifies itself is highly similar to the way in which amyloid fibrils grow through seeded polymerization from a reservoir of precursor protein. Therefore amyloid fibril offers insight for which to hypothesize the PrP-res growth mechanism. Amyloids are fibrous protein aggregates that harbor specific structural traits. The structure of amyloid fibrils features a characteristic cross-beta folding pattern in which beta-strands align to form sheets that are perpendicular to the fibril axis while hydrogen bonds between strands is parallel to the fibril axis. While this cross-beta quaternary structure is known in amyloids, a detailed structure of this scope has not been determined for PrP, which is by far, a much larger protein. Like amyloid fibrils, PrP can be induced to form amyloid-like fibrils. A particularly significant model of this was that of the recombinant peptide, PrP23-144. (Recombinant peptide is the peptide encoded from its corresponding recombinant DNA). The PrP23-144 proved to have a high degree of conformational plasticity (ability to change conformation in various possible ways) and can be induced to form a wide range of fibril amino acids. That the PrP23-144 in this model could be differentiated into a wide range of conformational possibilities is an indication that the PrP isoform conversion is highly dependent on the structural compatibility between PrP-sen to PrP- res (for example, the aforementioned variations in turns and loops). Choice of solvent also plays a role in that certain structural elements are affected by electrostatic or hydrophilic effects. ==Treatment== As a result of the limited knowledge scientists have on prions, there is currently no full-proof method of treatment for those diagnosed with a prion related disease. One possibility of prion removal is through microglia and phagocytosis. It has also been found that lichens possess the ability to break down prions. <ref>Johnson, Christopher J. et al [http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0019836 "Degradation of the Disease-Associated Prion Protein by a Serine Protease from Lichens"], '[PLOS]', 2011. Retrieved on 20 November 2012.</ref> Though there are many avenues of research possible, there is no clinical solution for those suffering from a prion related disease. ===Detection=== [[FILE:SOFIA platform.jpg|thumbnail|left|Prototype SOFIA Platform]] There has been research in the past decade that has helped to identify PrP<sup>Sc</sup> in the blood. Up until this point, there has been no reliable way to identify these misfolded proteins in brain tissue. Employing a new method known as SOFIA (surround optical fibre immunoassay), scientists have been able to identify the presence of prions in brain tissue at high precision (one part in one hundred thousand million). First, the sample with PrP<sup>Sc</sup> is amplified and fluorescently labeled using an antibody. It is then put through a device that surrounds it with optical fibers that detect emitted light. A laser is used to excite the dye, and the emission from the sample is picked up by the detector. This method was tested on sheep that were previously thought to be healthy, but eventually developed prion disease. Samples of their blood before they exhibited symptoms were analyzed, and it was found that the presence of PrP<sup>Sc</sup> could be detected very early on. While this method does not cure or remove any of the problems, it can be used to quarantine and greatly reduce the risk of these prions spreading. <ref>Rubenstein, R., Chang, B., Gray, P., Piltch, M., Bulgin, M.S., Sorensen-Melson, S. & Miller, M.W [https://www.sgm.ac.uk/pubs/micro_today/pdf/081010.pdf "Detecting Prions in Blood"], '[Microbiology Today]', 2010. Retrieved on 20 November 2012.</ref> <references /> ===References=== * Moore, R (2009) Prion Protein Misfolding and Disease *http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3056934/ {{BookCat}} ri4jo7zaoudq27rxjlu3brkhg5p9ogr Principles of Biochemistry/Nucleic acid I: DNA and its nucleotides 0 250154 4672100 4635658 2026-09-24T09:12:05Z R. Henrik Nilsson 3395618 refrences > references 4672100 wikitext text/x-wiki DNA is a long polymer made from repeating units called nucleotides. As first discovered by James D. Watson and Francis Crick, the structure of DNA of all species comprises two helical chains each coiled round the same axis, and each with a pitch of 34 Ångströms (3.4 nanometres) and a radius of 10 Ångströms (1.0 nanometres). According to another study, when measured in a particular solution, the DNA chain measured 22 to 26 Ångströms wide (2.2 to 2.6 nanometres), and one nucleotide unit measured 3.3 Å (0.33 nm) long. Although each individual repeating unit is very small, DNA polymers can be very large molecules containing millions of nucleotides. For instance, the largest human chromosome, chromosome number 1, is approximately 220 million base pairs long. In living organisms, DNA does not usually exist as a single molecule, but instead as a pair of molecules that are held tightly together. These two long strands entwine like vines, in the shape of a double helix. The nucleotide repeats contain both the segment of the backbone of the molecule, which holds the chain together, and a base, which interacts with the other DNA strand in the helix. A base linked to a sugar is called a nucleoside and a base linked to a sugar and one or more phosphate groups is called a nucleotide. If multiple nucleotides are linked together, as in DNA, this polymer is called a polynucleotide. The backbone of the DNA strand is made from alternating phosphate and sugar residues. The sugar in DNA is 2-deoxyribose, which is a pentose (five-carbon) sugar. The sugars are joined together by phosphate groups that form phosphodiester bonds between the third and fifth carbon atoms of adjacent sugar rings. These asymmetric bonds mean a strand of DNA has a direction. In a double helix the direction of the nucleotides in one strand is opposite to their direction in the other strand: the strands are antiparallel. The asymmetric ends of DNA strands are called the 5′ (five prime) and 3′ (three prime) ends, with the 5' end having a terminal phosphate group and the 3' end a terminal hydroxyl group. One major difference between DNA and RNA is the sugar, with the 2-deoxyribose in DNA being replaced by the alternative pentose sugar ribose in RNA.<ref>http://en.wikipedia.org/w/index.php?title=DNA&oldid=424928563</ref><ref>Berry, Andrew; Watson, James D. (2003). DNA: the secret of life. New York: Alfred A. Knopf. {{ISBN|0-375-41546-7}}.</ref> The DNA double helix is stabilized primarily by two forces: hydrogen bonds between nucleotides and base-stacking interactions among the aromatic bases. In the aqueous environment of the cell, the conjugated π bonds of nucleotide bases align perpendicular to the axis of the DNA molecule, minimizing their interaction with the solvation shell and therefore, the Gibbs free energy. The four bases found in DNA are adenine (abbreviated A), cytosine (C), guanine (G) and thymine (T). These four bases are attached to the sugar/phosphate to form the complete nucleotide, as shown for adenosine monophosphate. These bases are classified into two types; adenine and guanine are fused five- and six-membered heterocyclic compounds called purines, while cytosine and thymine are six-membered rings called pyrimidines. A fifth pyrimidine base, called uracil (U), usually takes the place of thymine in RNA and differs from thymine by lacking a methyl group on its ring. Uracil is not usually found in DNA, occurring only as a breakdown product of cytosine. In addition to RNA and DNA, a large number of artificial nucleic acid analogues have also been created to study the proprieties of nucleic acids, or for use in biotechnology.<ref>http://en.wikipedia.org/w/index.php?title=DNA&oldid=424928563</ref><ref>Berry, Andrew; Watson, James D. (2003). DNA: the secret of life. New York: Alfred A. Knopf. {{ISBN|0-375-41546-7}}.</ref> [[File:DNA Structure+Key+Labelled.png|thumb|right|400px|The structure of the DNA [[double helix]]. The [[atoms]] in the structure are colour coded by [[element]], the spiralling backbone of the two strands is shown in orange and the detailed structure of two base pairs is shown in the bottom right.]] ==DNA is a genetic material== [[Image:Griffith experiment.svg|thumb|250px|right|Griffith's experiment discovering the "transforming principle" in pneumococcus bacteria.]] ===Griffith's experiment=== Griffith's experiment was conducted in 1928 by Frederick Griffith, one of the first experiments suggesting that bacteria are capable of transferring genetic information through a process known as transformation. Griffith used two strains of ''Streptococcus pneumoniae'' bacteria which infect mice – a type III-S (smooth) and type II-R (rough) strain. The III-S strain covers itself with a polysaccharide capsule that protects it from the host's immune system, resulting in the death of the host, while the II-R strain doesn't have that protective capsule and is defeated by the host's immune system. A German bacteriologist, Fred Neufeld, had discovered the three pneumococcal types (Types I, II, and III) and discovered the Quellung reaction to identify them in vitro. Until Griffith's experiment, bacteriologists believed that the types were fixed and unchangeable, from one generation to another. In this experiment, bacteria from the III-S strain were killed by heat, and their remains were added to II-R strain bacteria. While neither alone harmed the mice, the combination was able to kill its host. Griffith was also able to isolate both live II-R and live III-S strains of pneumococcus from the blood of these dead mice. Griffith concluded that the type II-R had been "transformed" into the lethal III-S strain by a "transforming principle" that was somehow part of the dead III-S strain bacteria. Today, we know that the "transforming principle" Griffith observed was the DNA of the III-S strain bacteria. While the bacteria had been killed, the DNA had survived the heating process and was taken up by the II-R strain bacteria. The III-S strain DNA contains the genes that form the protective polysaccharide capsule. Equipped with this gene, the former II-R strain bacteria were now protected from the host's immune system and could kill the host. The exact nature of the transforming principle (DNA) was verified in the experiments done by Avery, McLeod and McCarty and by Hershey and Chase.<ref> [http://en.wikipedia.org/wiki/Griffith's_experiment Griffith experiment]</ref>}} ===Hershey Chase experiments=== Alfred Hershey and Martha Chase conducted series of experiments in 1952 by , confirming that DNA was the genetic material, which had first been demonstrated in the 1944 Avery–MacLeod–McCarty experiment. These experiments are known as '''Hershey Chase experiments'''. The existence of DNA was known to biologists since 1869, most of them assumed that proteins carried the information for inheritance that time. Hershey and Chase conducted their experiments on the T2 phage. The phage consists of a protein shell containing its genetic material. The phage infects a bacterium by attaching to its outer membrane and injecting its genetic material and leaving its empty shell attached to the bacterium. In their first set of experiments, Hershey and Chase labeled the DNA of phages with radioactive Phosphorus-32 (p32) (the element phosphorus is present in DNA but not present in any of the 20 amino acids which are component of proteins). They allowed the phages to infect E. coli, and through several elegant experiments were able to observe the transfer of P32 labeled phage DNA into the cytoplasm of the bacterium. In their second set of experiments, they labeled the phages with radioactive Sulfur-35 (Sulfur is present in the amino acids cysteine and methionine, but not in DNA). Following infection of E. coli they then sheared the viral protein shells off of infected cells using a high-speed blender and separated the cells and viral coats by using a centrifuge. After separation, the radioactive S35 tracer was observed in the protein shells, but not in the infected bacteria, supporting the hypothesis that the genetic material which infects the bacteria was DNA and not protein.<ref>[http://en.wikipedia.org/wiki/Hershey%E2%80%93Chase_experiment Hershey–Chase experiment]</ref><ref>Hershey, A.D. and Chase, M. (1952) Independent functions of viral protein and nucleic acid in growth of bacteriophage. J Gen Physiol. 36:39–56.</ref> '''Hershey shared the 1969 Nobel Prize in Physiology or Medicine for his “discoveries concerning the genetic structure of viruses.”''' [[File:Oswald T. Avery portrait 1937.jpg|140px|Oswald Avery]] [[File:ColinMacCleod.jpg|155px|Colin MacLeod]][[File:Maclyn McCarty with Francis Crick and James D Watson - 10.1371 journal.pbio.0030341.g001-O.jpg|210px|Maclyn McCarty (with Watson and Crick)]] Oswald T. Avery, Colin MacCleod, Maclyn McCarty with Francis Crick and James D Watson <ref>A [[w:Avery%E2%80%93MacLeod%E2%80%93McCarty_experiment|very–MacLeod–McCarty experiment]]</ref> ==Bases of Nucleic acid== [[Image:GC base pair jypx3.png|thumb|200px|A '''GC''' base pair demonstrating three intermolecular hydrogen bonds. ]] [[Image:AT base pair jypx3.png|thumb|200px|An '''AT''' base pair demonstrating two intermolecular hydrogen bonds.]] Two helical strands form the DNA backbone. Another double helix may be found by tracing the spaces, or grooves, between the strands. These voids are adjacent to the base pairs and may provide a binding site. As the strands are not directly opposite each other, the grooves are unequally sized. One groove, '''the major groove, is 22 Å''' wide and the other, the '''minor groove, is 12 Å wide'''. The narrowness of the minor groove means that the edges of the bases are more accessible in the major groove. As a result, proteins like transcription factors that can bind to specific sequences in double-stranded DNA usually make contacts to the sides of the bases exposed in the major groove. This situation varies in unusual conformations of DNA within the cell, but the major and minor grooves are always named to reflect the differences in size that would be seen if the DNA is twisted back into the ordinary B form<ref>http://en.wikipedia.org/w/index.php?title=DNA&oldid=427633053</ref>. ===Base pairing Of DNA=== [[Image:DNA Overview.png|thumb|200px|Structure of DNA.]] '''Chargaff's rules was given by Erwin Chargaff which state that DNA from any cell of all organisms should have a 1:1 ratio of pyrimidine and purine bases and, more specifically, that the amount of guanine is equal to cytosine and the amount of adenine is equal to thymine.''' This pattern is found in both strands of the DNA. They were discovered by Austrian chemist Erwin Chargaff. In molecular biology, two nucleotides on opposite complementary DNA strands that are connected via hydrogen bonds are called a base pair (often abbreviated '''bp'''). In the canonical Watson-Crick DNA base pairing, Adenine (A) forms a base pair with Thymine (T) and Guanine (G) forms a base pair with Cytosine (C). '''In RNA, thymine is replaced by Uracil (U).''' Alternate hydrogen bonding patterns, such as the wobble base pair and Hoogsteen base pair, also occur—particularly in RNA—giving rise to complex and functional tertiary structures. <ref>[http://en.wikipedia.org/wiki/Base_pair Base pair]</ref> '''Example''' 5'CTCGTTTGCGCTCTATCG3' 3'GAGCAAACGCGAGATAGC5' ====Purine base==== The German chemist Emil Fischer in 1884 gave the name 'purine' (purum uricum). He synthesized it for the first time in 1899 by uric acid which had been isolated from kidney stones by Scheele in 1776. Beside from DNA and RNA, purines are also components in a number of other important biomolecules, such as ATP, GTP, cyclic AMP, NADH, and coenzyme A. Purine itself, has not been found in nature, but it can be produced by organic synthesis.'''A purine is a heterocyclic aromatic organic compound, consisting of a pyrimidine ring fused to an imidazole ring.''' '''Example:''' [[Image:Purines.svg]] ====Adenine==== Adenine is one of the two purine nucleobases (the other being guanine) used in forming nucleotides of the nucleic acids (DNA or RNA). In DNA, adenine binds to thymine via two hydrogen bonds to assist in stabilizing the nucleic acid structures. Adenine forms adenosine, a nucleoside, when attached to ribose, and deoxyadenosine when attached to deoxyribose. It forms adenosine triphosphate (ATP), a nucleotide, when three phosphate groups are added to adenosine. ====Guanine==== Guanine, along with adenine and cytosine, is present in both DNA and RNA, whereas thymine is usually seen only in DNA, and uracil only in RNA. In DNA, guanine is paired with cytosine. With the formula C5H5N5O, guanine is a derivative of purine, consisting of a fused pyrimidine-imidazole ring system with conjugated double bonds. Guanine has two tautomeric forms, the major keto form and rare enol form. It binds to cytosine through three hydrogen bonds. In cytosine, the amino group acts as the hydrogen donor and the C-2 carbonyl and the N-3 amine as the hydrogen-bond acceptors. Guanine has a group at C-6 that acts as the hydrogen acceptor, while the group at N-1 and the amino group at C-2 act as the hydrogen donors. ===Pyrimidine base=== [[Image:Thymine chemical structure.png|thumb|right|107px|Chemical structure of thymine]] [[File:Cytosine chemical structure.svg|thumb|left|100px|Cytosine with numbered components. Methylation occurs on carbon number 5.]] [[Image:Uracil.svg|thumb|right|102px|Chemical structure of uracil]] Pyrimidine is a ''heterocyclic'' aromatic organic compound similar to benzene and pyridine, containing two nitrogen atoms at positions 1 and 3 of the six-member ring. It is isomeric with two other forms of diazine.Three nucleobases found in nucleic acids, '''cytosine (C), thymine (T), and uracil (U)''', are pyrimidine derivatives. A pyrimidine has many properties in common with pyridine, as the number of nitrogen atoms in the ring increases the ring pi electrons become less energetic and electrophilic aromatic substitution gets more difficult while nucleophilic aromatic substitution gets easier. An example of the last reaction type is the displacement of the amino group in 2-aminopyrimidine by chlorine and its reverse. Reduction in resonance stabilization of pyrimidines may lead to addition and ring cleavage reactions rather than substitutions. One such manifestation is observed in the Dimroth rearrangement. Compared to pyridine, N-alkylation and N-oxidation is more difficult, and pyrimidines are also less basic: The pKa value for protonated pyrimidine is '''1.23''' compared to '''5.30''' for pyridine.<ref>[http://en.wikipedia.org/wiki/Pyrimidine Pyrimidine]</ref> '''Pyrimidine also is found in meteorites, although scientists still do not know its origin.''' Pyrimidine also photolytically decomposes into Uracil under UV light. [[Image:Cytosine chemical structure.png|thumb|left|101px|Chemical structure of cytosine]] ====Cytosine==== Cytosine can be found as part of DNA, as part of RNA, or as a part of a nucleotide. As ''cytidine triphosphate (CTP)'', it can act as a co-factor to enzymes, and can transfer a phosphate to convert adenosine diphosphate (ADP) to adenosine triphosphate (ATP).The nucleoside of cytosine is cytidine. In DNA and RNA, '''cytosine is paired with guanine'''. However, it is inherently unstable, and can change into uracil (spontaneous deamination). This can lead to a point mutation if not repaired by the DNA repair enzymes such as uracil glycosylase, which cleaves a uracil in DNA. Cytosine can also be methylated into 5-methylcytosine by an enzyme called DNA methyltransferase or be methylated and hydroxylated to make 5-hydroxymethylcytosine. Active enzymatic deamination of cytosine or 5-methylcytosine by the APOBEC family of cytosine deaminases could have both beneficial and detrimental implications on various cellular processes as well as on organismal evolution. The implications of deamination on 5-hydroxymethylcytosine, on the other hand, remains less understood.<ref>[http://en.wikipedia.org/wiki/ Cytosine]</ref> ====Thymine==== Thymine (T, Thy) is one of the four nucleobases in the nucleic acid of DNA that are represented by the letters G–C–A–T. The others are adenine, guanine, and cytosine. Thymine is also known as 5-methyluracil, a pyrimidine nucleobase. As the name suggests, thymine may be derived by methylation of uracil at the 5th carbon. In RNA, thymine is replaced with uracil in most cases. In DNA, thymine(T) binds to adenine (A) via two hydrogen bonds, thus stabilizing the nucleic acid structures. ====Uracil==== Uracil found in RNA, it base-pairs with adenine and replaces thymine during DNA transcription. Methylation of uracil produces thymine. It turns into thymine to protect the DNA and to improve the efficiency of DNA replication. Uracil can base-pair with any of the bases, depending on how the molecule arranges itself on the helix, but readily pairs with adenine because the methyl group is repelled into a fixed position. Uracil pairs with adenine through hydrogen bonding. Uracil is the hydrogen bond acceptor and can form two hydrogen bonds. Uracil can also bind with a ribose sugar to form the ribonucleoside uridine. When a phosphate attaches to uridine, uridine 5'-monophosphate is produced. ==Nucleosides and Nucleotides== ===Nucleotides === {| border="1" cellpadding="2" cellspacing="0" align="right" style="margin-left:1em" |- align="center" valign="bottom" ! Nitrogenous base ! Nucleoside ! Deoxynucleoside |- align="center" valign="" | [[Image:Adenine.svg|58px|Chemical structure of adenine]]<br/>[[w:Adenine]]<br/> | [[Image:Adenosin.svg|95px|Chemical structure of adenosine]]<br/>[[w:Adenosine]]<br/>A | [[Image:dA chemical structure.png|95px|Chemical structure of deoxyadenosine]]<br/>[[w:Deoxyadenosine]]<br/>dA |- align="center" valign="" | [[Image:Guanine chemical structure.png|86px|Chemical structure of guanine]]<br/>[[w:Guanine]]<br/> | [[Image:G chemical structure.png|123px|Chemical structure of guanosine]]<br/>[[w:Guanosine]]<br/>G | [[Image:dG chemical structure.png|123px|Chemical structure of deoxyguanosine]]<br/>[[w:Deoxyguanosine]]<br/>dG |- align="center" valign="" | [[Image:Thymine chemical structure.png|63px|Chemical structure of thymine]]<br/>[[w:Thymine]]<br/> | [[Image:T chemical structure.png|87px|Chemical structure of 5-methyluridine]]<br/>[[w:5-Methyluridine]]<br/>m<sup>5</sup>U | [[Image:dT chemical structure.png|87px|Chemical structure of thymidine]]<br/>[[w:Thymidine]]<br/>dT |- align="center" valign="" | [[Image:Uracil.svg|51px|Chemical structure of uracil]]<br/>[[w:Uracil]]<br/> | [[Image:U chemical structure.png|87px|Chemical structure of uridine]]<br/>[[w:Uridine]]<br/>U | [[Image:dU chemical structure.png|87px|Chemical structure of deoxyuridine]]<br/>[[w:Deoxyuridine]]<br/>dU |- align="center" valign="" | [[Image:Cytosine chemical structure.png|51px|Chemical structure of cytosine]]<br/>[[w:Cytosine]]<br/> | [[Image:C chemical structure.png|87px|Chemical structure of cytidine]]<br/>[[w:Cytidine]]<br/>C | [[Image:dC chemical structure.png|87px|Chemical structure of deoxycytidine]]<br/>[[w:Deoxycytidine]]<br/>dC |- |} Nucleosides are glycosylamines consisting of a nucleobase (often referred to as simply base) bound to a ribose or deoxyribose sugar via a beta-glycosidic linkage. Examples of nucleosides include cytidine, uridine, adenosine, guanosine, thymidine and inosine. Nucleosides can be phosphorylated by specific kinases in the cell on the sugar's primary alcohol group (-CH2-OH), producing nucleotides, which are the molecular building-blocks of DNA and RNA<ref>http://en.wikipedia.org/w/index.php?title=Nucleoside&oldid=419856059</ref>. Nucleosides can be produced by de novo synthesis pathways, in particular in the liver, but they are more abundantly supplied via ingestion and digestion of nucleic acids in the diet, whereby nucleotidases break down nucleotides (such as the thymine nucleotide) into nucleosides (such as thymidine) and phosphate. 1. Adenosine is a nucleoside composed of a molecule of adenine attached to a ribose sugar molecule (ribofuranose) moiety via a β-N9-glycosidic bond. 2. Cytidine is a nucleoside molecule that is formed when cytosine is attached to a ribose ring (also known as a ribofuranose) via a β-N1-glycosidic bond. Cytidine is a component of RNA. 3. Guanosine is a purine nucleoside comprising guanine attached to a ribose (ribofuranose) ring via a β-N9-glycosidic bond. Guanosine can be phosphorylated to become guanosine monophosphate (GMP), cyclic guanosine monophosphate (cGMP), guanosine diphosphate (GDP), and guanosine triphosphate (GTP). 4. Thymidine (more precisely called deoxythymidine; can also be labelled deoxyribosylthymine, and thymine deoxyriboside) is a chemical compound, more precisely a pyrimidine deoxynucleoside. Deoxythymidine is the DNA nucleoside T, which pairs with deoxyadenosine (A) in double-stranded DNA. If cytosine is attached to a deoxyribose ring, it is known as a deoxycytidine.<ref>http://en.wikipedia.org/w/index.php?title=Nucleoside&oldid=419856059</ref> ===Nucleotide=== [[Image:Nucleotides 1.svg|thumb|left|600px|Structural elements of the most common nucleotides]] A nucleotide is composed of a nucleobase (nitrogenous base), a five-carbon sugar (either ribose or 2'-deoxyribose), and one to three phosphate groups. Together, the nucleobase and sugar comprise a nucleoside. The phosphate groups form bonds with either the 2, 3, or 5-carbon of the sugar, with the 5-carbon site most common. Cyclic nucleotides form when the phosphate group is bound to two of the sugar's hydroxyl groups. Ribonucleotides are nucleotides where the sugar is ribose, and deoxyribonucleotides contain the sugar deoxyribose. Nucleotides can contain either a purine or a pyrimidine base. Nucleic acids are polymeric macromolecules made from nucleotide monomers. In DNA, the purine bases are adenine and guanine, while the pyrimidines are thymine and cytosine. RNA uses uracil in place of thymine. Adenine always pairs with thymine by 2 hydrogen bonds, while guanine pairs with cytosine through 3 hydrogen bonds, each due to their unique structures.<ref>http://en.wikipedia.org/w/index.php?title=Nucleotide&oldid=422383586</ref> A deoxyribonucleotide is the monomer, or single unit, of DNA, or deoxyribonucleic acid. Each deoxyribonucleotide comprises three parts: a nitrogenous base, a deoxyribose sugar, and one or more phosphate groups. The nitrogenous base is always bonded to the 1' carbon of the deoxyribose, which is distinguished from ribose by the presence of a proton on the 2' carbon rather than an -OH group. The phosphate groups bind to the 5' carbon of the sugar. When deoxyribonucleotides polymerize to form DNA, the phosphate group from one nucleotide will bond to the 3' carbon on another nucleotide, forming a phosphodiester bond via dehydration synthesis. New nucleotides are always added to the 3' carbon of the last nucleotide, so synthesis always proceeds from 5' to 3'<ref>http://en.wikipedia.org/w/index.php?title=Nucleotide&oldid=422383586</ref>. '''Phosphodiester bond''' A phosphodiester bond is a group of strong covalent bonds between a phosphate group and two 5-carbon ring carbohydrates (pentoses) over two ester bonds. Phosphodiester bonds are central to most life on Earth, as they make up the backbone of the strands of DNA. In DNA and RNA, the phosphodiester bond is the linkage between the 3' carbon atom of one sugar molecule and the 5' carbon of another, deoxyribose in DNA and ribose in RNA. The phosphate groups in the phosphodiester bond are negatively-charged. Because the phosphate groups have a pKa near 0, they are negatively-charged at pH 7. This repulsion forces the phosphates to take opposite sides of the DNA strands and is neutralized by proteins (histones), metal ions such as magnesium, and polyamines. In order for the phosphodiester bond to be formed and the nucleotides to be joined, the tri-phosphate or di-phosphate forms of the nucleotide building blocks are broken apart to give off energy required to drive the enzyme-catalyzed reaction. When a single phosphate or two phosphates known as pyrophosphates break away and catalyze the reaction, the phosphodiester bond is formed. Hydrolysis of phosphodiester bonds can be catalyzed by the action of phosphodiesterases which play an important role in repairing DNA sequences. In biological systems, the phosphodiester bond between two ribonucleotides can be broken by alkaline hydrolysis because of the free 2' hydroxyl group<ref>http://en.wikipedia.org/w/index.php?title=Phosphodiester_bond&oldid=407638927</ref>. [[Image:Phosphodiester Bond Diagram.svg|thumb|350px|Diagram of phosphodiester bonds (PO<sub>4</sub><sup>3-</sup>) between nucleotides. Which presents Thymine (''U'') and two molecules of Adenine (''A''). ]] {| |- align="center" valign="bottom" | [[image:AMP structure.svg|126px]]<br/>[[w:Adenosine monophosphate]]<br/>AMP | [[image:ADP structure.svg|156px]]<br/>[[w:Adenosine diphosphate]]<br/>ADP | [[image:ATP structure.svg|186px| adenosine triphosphate]]<br/>[[w:Adenosine triphosphate]]<br/>ATP |- align="center" valign="bottom" | [[Image:GMP chemical structure.png|154px| guanosine monophosphate]]<br/>[[w:Guanosine monophosphate]]<br/>GMP | [[image:GDP chemical structure.png|184px| guanosine diphosphate]]<br/>[[w:Guanosine diphosphate]]<br/>GDP | [[image:GTP chemical structure.png|214px| guanosine triphosphate]]<br/>[[w:Guanosine triphosphate]]<br/>GTP |- align="center" valign="bottom" | [[image:TMP chemical structure.png|117px| ribothymidine monophosphate]]<br/>[[w:Ribothymidine monophosphate]]<br/>rTMP | [[image:TDP chemical structure.png|148px| ribothymidine diphosphate]]<br/>[[w:Ribothymidine diphosphate]]<br/>rTDP | [[image:TTP chemical structure.png|178px| ribothymidine triphosphate]]<br/>[[w:Ribothymidine triphosphate]]<br/>rTTP |- align="center" valign="bottom" | [[image:UMP chemical structure.png|117px]]<br/>[[w:Uridine monophosphate]]<br/>UMP | [[image:UDP chemical structure.png|148px| diphosphate]]<br/>[[w:Uridine diphosphate]]<br/>UDP | [[image:UTP chemical structure.png|178px|triphosphate]]<br/>[[w:Uridine triphosphate]]<br/>UTP |- align="center" valign="bottom" | [[image:CMP chemical structure.png|117px|cytidine monophosphate]]<br/>[[w:Cytidine monophosphate]]<br/>CMP | [[image:CDP chemical structure.png|148px|cytidine diphosphate]]<br/>[[w:Cytidine diphosphate]]<br/>CDP | [[image:CTP chemical structure.png|178px|cytidine triphosphate]]<br/>[[w:Cytidine triphosphate]]<br/>CTP |- |} ==DNA structure determination using molecular modeling and DNA X-ray patterns == {{multiple image | align = right | width = 200 | footer = Left, the major steps involved in DNA structure determination by X-ray crystallography showing the important role played by molecular models of DNA structure in this iterative process. Right, an image of actual A- and B- DNA X-ray patterns obtained from oriented and hydrated DNA fibers (courtesy of Dr. Herbert R. Wilson, FRS<ref>Herbert R. Wilson, FRS. Diffraction of X-rays by proteins, Nucleic Acids and Viruses., London: Edward Arnold (Publishers) Ltd. 1966.</ref>). | image1 = X ray diffraction.png | alt1 = major steps involved in X-ray crystallography of biomolecules | image2 = ABDNAxrgpj.jpg | alt2 = DNA X-ray patterns }} After DNA has been separated and purified by standard biochemical techniques one has a sample in a jar much like in the figure at the top of this article. Below are the main steps involved in generating structural information from X-ray diffraction studies of oriented DNA fibers that are drawn from the hydrated DNA sample with the help of molecular models of DNA that are combined with crystallographic and mathematical analysis of the X-ray patterns. ===Paracrystalline lattice models of B-DNA structures=== [[File:Silica.svg|thumb|left|150px|[[Silica]] glass is another example of a material which is organized into a paracrystalline lattice.]] A paracrystalline lattice, or paracrystal, is a molecular or atomic lattice with significant amounts (e.g., larger than a few percent) of partial disordering of molecular arrangements. Limiting cases of the paracrystal model are nanostructures, such as [[glass]]es, [[liquid]]s, etc., that may possess only local ordering and no global order. A simple example of a paracrystalline lattice is shown in the following figure for a silica glass: Liquid crystals also have paracrystalline rather than crystalline structures. Highly hydrated B-DNA occurs naturally in living cells in such a paracrystalline state, which is a dynamic one in spite of the relatively rigid DNA double-helix stabilized by parallel hydrogen bonds between the nucleotide base-pairs in the two complementary, helical DNA chains (see figures). For simplicity most DNA molecular models omit both water and ions dynamically bound to B-DNA, and are thus less useful for understanding the dynamic behaviors of B-DNA ''in vivo''. The physical and mathematical analysis of X-ray<ref>Hosemann R., Bagchi R.N., ''Direct analysis of diffraction by matter'', North-Holland Publs., Amsterdam – New York, 1962.</ref><ref>{{cite journal|author=Baianu, I.C. |title=X-ray scattering by partially disordered membrane systems.|journal=Acta Cryst., |volume=A34 |issue=5 |pages=751–3|year=1978|doi=10.1107/S0567739478001540}}</ref> and spectroscopic data for paracrystalline B-DNA is therefore much more complicated than that of crystalline, A-DNA X-ray diffraction patterns. The paracrystal model is also important for DNA technological applications such as [[DNA nanotechnology]]. Novel techniques that combine X-ray diffraction of DNA with X-ray microscopy in hydrated living cells are now also being developed.<ref>{{cite journal |author=Yamamoto Y, Shinohara K |title=Application of X-ray microscopy in analysis of living hydrated cells |journal=Anat. Rec. |volume=269 |issue=5 |pages=217–23 |year=2002 |month=October |pmid=12379938 |doi=10.1002/ar.10166 }}</ref> ==='''Forms of DNA'''=== '''A-DNA:''' A-DNA is one of the many possible double helical structures of DNA. A-DNA is thought to be one of three biologically active double helical structures along with B- and Z-DNA. It is a right-handed double helix fairly similar to the more common and well-known B-DNA form, but with a shorter more compact helical structure. It appears likely that it occurs only in dehydrated samples of DNA, such as those used in crystallographic experiments, and possibly is also assumed by DNA-RNA hybrid helices and by regions of double-stranded RNA<ref>http://en.wikipedia.org/w/index.php?title=A-DNA&oldid=379025458</ref>. '''B-DNA'''The most common form of DNA is B-DNA. The DNA double helix is a spiral polymer of nucleic acids, held together by nucleotides which base pair together. In B-DNA, the most common double helical structure, the double helix is right-handed with about 10–10.5 nucleotides per turn. The double helix structure of DNA contains a major groove and minor groove, the major groove being wider than the minor groove. Given the difference in widths of the major groove and minor groove, many proteins which bind to DNA do so through the wider major groove. The geometry of a base, or base pair step can be characterized by 6 coordinates: Shift, slide, rise, tilt, roll, and twist. These values precisely define the location and orientation in space of every base or base pair in a nucleic acid molecule relative to its predecessor along the axis of the helix. Together, they characterize the helical structure of the molecule. In regions of DNA or RNA where the "normal" structure is disrupted, the change in these values can be used to describe such disruption. For each base pair, considered relative to its predecessor, there are the following base pair geometries to consider: Shear: bases appear as though they have moved past one another on the xy-plane. Stretch: two bases are stretched apart in the horizontal direction. Stagger: bases have both moved past one another and stretched apart on the xy-plane. Buckle: the ends of the bases that do not touch are inclined upwards towards the z-axis. Propeller twist: rotation of one base with respect to the other in the same base pair. Opening: bases touch at one side, but lean apart at the other side. Shift: displacement along an axis in the base-pair plane perpendicular to the first, directed from the minor to the major groove. Slide: displacement along an axis in the plane of the base pair directed from one strand to the other. Rise: displacement along the helix axis. Tilt: rotation around this axis. vRoll: rotation around this axis. Twist: rotation around the helix axis. vx-displacement y-displacement inclination tip pitch: the number of base pairs per complete turn of the helix. [[File:CCF10292011_00000.jpg|thumb|450px|right|the different base parameters]] Rise and twist determine the handedness and pitch of the helix. The other coordinates, by contrast, can be zero. Slide and shift are typically small in B-DNA, but are substantial in A- and Z-DNA. Roll and tilt make successive base pairs less parallel, and are typically small. A diagram of these coordinates can be found in 3DNA website. Note that "tilt" has often been used differently in the scientific literature, referring to the deviation of the first, inter-strand base-pair axis from perpendicularity to the helix axis. This corresponds to slide between a succession of base pairs, and in helix-based coordinates is properly termed "inclination". '''TA-DNA:''' TA-DNA is a form of DNA that is most closely related to A-DNA in terms of structure. The TA-DNA helix is right handed like A-DNA, and it The most noticeable difference between the two forms is that TA-DNA has a greater inclination of its base pairs at an angle of approximately 50 degrees with respect to the helix axis. Because of this, TA-DNA is sometimes described as tilted A-DNA.<ref>Rohs, Remo, Xiangshu Jin, Sean M. West, Rohit Joshi, Barry Honig, and Richard S. Mann. "Origins of Specificity in Protein-DNA Recognition." Annual Reviews. N.p., 24 03 2010. Web. 29 Oct 2011. <http://www.annualreviews.org/doi/full/10.1146/annurev-biochem-060408-091030?url_ver=Z39.88-2003&rfr_id=ori:rid:crossref.org&rfr_dat=cr_pub=pubmed>.</ref> '''Z-DNA:''' Z-DNA is one of the many possible double helical structures of DNA. It is a left-handed double helical structure in which the double helix winds to the left in a zig-zag pattern (instead of to the right, like the more common B-DNA form). Z-DNA is thought to be one of three biologically active double helical structures along with A- and B-DNA. Z-DNA is quite different from the right-handed forms. In fact, Z-DNA is often compared against B-DNA in order to illustrate the major differences. The Z-DNA helix is left-handed and has a structure that repeats every 2 base pairs. The major and minor grooves, unlike A- and B-DNA, show little difference in width. Formation of this structure is generally unfavourable, although certain conditions can promote it; such as alternating purine-pyrimidine sequence (especially poly(dGC)2), negative DNA supercoiling or high salt and some cations (all at physiological temperature, 37°C, and pH 7.3-7.4). Z-DNA can form a junction with B-DNA (called a "B-to-Z junction box") in a structure which involves the extrusion of a base pair. The Z-DNA conformation has been difficult to study because it does not exist as a stable feature of the double helix. Instead, it is a transient structure that is occasionally induced by biological activity and then quickly disappears.<ref>http://en.wikipedia.org/w/index.php?title=Z-DNA&oldid=418927717</ref><ref>Zhang H, Yu H, Ren J, Qu X (2006). "Reversible B/Z-DNA transition under the low salt condition and non-B-form polydApolydT selectivity by a cubane-like europium-L-aspartic acid complex". Biophysical Journal 90 (9): 3203–3207.</ref> [[File:A-DNA, B-DNA and Z-DNA.png|thumb|450px|right|From left to right, the structures of A, B and Z DNA]] {| class="wikitable" |+ Difference between three major forms of DNA ! !A-DNA !B-DNA !Z-DNA |- |Helix sense ||align="center"| Right-handed ||align="center"| Right-handed ||align="center"| Left-handed |- |Diameter ||align="right"| 23 Å (2.3&nbsp;nm)||align="right"| 20 Å (2.0&nbsp;nm)||align="right"| 18 Å (1.8&nbsp;nm) |- |Repeating unit ||align="right"| 1 bp ||align="right"| 1 bp ||align="right"| 2 bp |- |Rotation/bp ||align="right"| 32.7° ||align="right"| 35.9° ||align="right"| 60°/2 |- |bp/turn ||align="right"| 11 ||align="right"| 10.5 ||align="right"| 12 |- |Inclination of bp to axis ||align="right"| +19° ||align="right"| −1.2° ||align="right"| −9° |- |Rise/bp along axis ||align="right"| 2.3 Å (0.23&nbsp;nm)||align="right"| 3.32 Å (0.332&nbsp;nm)||align="right"| 3.8 Å (0.38&nbsp;nm) |- |Pitch/turn of helix ||align="right"| 28.2 Å (2.82&nbsp;nm)||align="right"| 33.2 Å (3.32&nbsp;nm)||align="right"| 45.6 Å (4.56&nbsp;nm) |- |Mean propeller twist ||align="right"| +18° ||align="right"| +16° ||align="right"| 0° |- |Glycosyl angle ||align="center"| anti ||align="center"| anti ||align="center"| C: anti,<br> G: syn |- |Sugar pucker ||align="center"| C3'-endo ||align="center"| C2'-endo ||align="center"| C: C2'-endo,<br>G: C2'-exo |- |} bp-Base pair, nm-nano meter '''Minor and Major Grooves of DNA:''' The minor and major grooves of DNA are characteristic of the type of DNA in which they are a part of. They are very important because they not only make up the characteristic structure of A-DNA, B-DNA, and Z-DNA, but their differences determine the interaction of these DNA with various proteins. The wideness, narrowness, deepness, shallowness, and the electrostatic potential found within these grooves all play an important role in determining how the DNA will react with certain proteins, with which proteins it will react, and whether or not certain parts will be likely to react at all.<ref>Rohs, Remo, Xiangshu Jin, Sean M. West, Rohit Joshi, Barry Honig, and Richard S. Mann. "Origins of Specificity in Protein-DNA Recognition." Annual Reviews. N.p., 24 03 2010. Web. 29 Oct 2011. <http://www.annualreviews.org/doi/full/10.1146/annurev-biochem-060408-091030?url_ver=Z39.88-2003&rfr_id=ori:rid:crossref.org&rfr_dat=cr_pub=pubmed>.</ref> {| class="wikitable" |+Difference between the minor and major grooves of the three major forms of DNA ! !! Minor Groove !! Major Groove |- | A-DNA || Wide and Shallow with relatively lower electrostatic potential || Narrow and Deep with relatively high electrostatic potential |- | B-DNA || Narrow and Deep with relatively high electrostatic potential || Wide and Shallow with relatively lower electrostatic potential |- | Z-DNA || Narrow and Deep the a zigzag curving of the backbone || Indistinct and the base edges create a convex surface |} [[File:Major_and_Minor_Groove_2.jpg|thumb|450px|right|From left to right, the global structures of A, B and Z DNA]] ‎ '''Differences in the Relative Charges of A-DNA, B-DNA, and Z-DNA:''' For all forms of DNA the global structure has an overall negative charge and the overall electrostatic potential is negative. This is largely due to the phosphate groups of DNA which bear an overall negative charge due to the negatively charged oxygen atoms they have. However, DNA has both positive and negative charges covering its outer structure. The charge dispersion over the global structure of DNA varies between A-DNA, B-DNA, and Z-DNA. A-DNA has mostly negative electrostatic potential throughout but concentrated mostly in the site of the major groove. It also has neutral electrostatic potential spread widely throughout the rest of its structure besides the major groove. Finally, A-DNA has sparse positive charges scattered along its surface. B-DNA has mostly negative electrostatic potential spread throughout its global exterior and concentrated mostly in major and minor grooves. It has some positively charged surface area scattered sparsely over its surface and mostly peppered within the wide major groove. Z-DNA has a negatively charged minor groove and the indistinct area where a major groove would normally be has slight positive charged places. Overall, the Z-DNA has a negative charge in all of its global structure. The structures of A-DNA, B-DNA, and Z-DNA have an overall negative charge. <ref>Rohs, Remo, Xiangshu Jin, Sean M. West, Rohit Joshi, Barry Honig, and Richard S. Mann. "Origins of Specificity in Protein-DNA Recognition." Annual Reviews. N.p., 24 03 2010. Web. 29 Oct 2011. <http://www.annualreviews.org/doi/full/10.1146/annurev-biochem-060408-091030?url_ver=Z39.88-2003&rfr_id=ori:rid:crossref.org&rfr_dat=cr_pub=pubmed>.</ref> {| class="wikitable" |+Difference between the electrostatic potentials of the three major forms of DNA ! !! A-DNA !! B-DNA !! Z-DNA |- | Negative Potential || Massively present throughout the global structure but concentrated most highly in the major groove || Massively present throughout the global structure and evenly concentrated in the major and minor grooves || Massively present throughout the global structure and present most highly in the minor groove |- | Positive Potential || Very sparsely present scattered in the minor groove and hardly at all in the major groove || Very sparsely present scattered throughout the global structure, mostly in the major groove || Scattered sparsely in greater amounts than in A-DNA or B-DNA, but outside of the minor groove |- | Neutral Potential || Moderately present throughout the structure and mostly in the minor groove, but not in the major groove || Moderately scattered throughout the structure, but in a smaller amount than in A-DNA || Moderately scattered throughout the entire global structure apart from the minor groove |} [[File:DNA_Electrostatics.jpg|thumb|450px|right|From left to right, the global structures of A, B and Z DNA and their electrostatic potentials]] ‎ ==Coiling of DNA== [[Image:Circular DNA Supercoiling.png|thumb|400px|right|Supercoiled structure of circular DNA molecules with low writhe. Note that the helical nature of the DNA duplex is omitted for clarity.]] [[Image:Linear DNA Supercoiling.png|thumb|400px|right|Supercoiled structure of linear DNA molecules with constrained ends. Note that the helical nature of the DNA duplex is omitted for clarity.]] DNA supercoiling is important for DNA packaging within all cells. Because the length of DNA can be thousands of times that of a cell, packaging this genetic material into the cell or nucleus (in eukaryotes) is a difficult feat. Supercoiling of DNA reduces the space and allows for a lot more DNA to be packaged. In prokaryotes, plectonemic supercoils are predominant, because of the circular chromosome and relatively small amount of genetic material. In eukaryotes, DNA supercoiling exists on many levels of both plectonemic and solenoidal supercoils, with the solenoidal supercoiling proving most effective in compacting the DNA. Solenoidal supercoiling is achieved with histones to form a 10nm fiber. This fiber is further coiled into a 30nm fiber, and further coiled upon itself numerous times more. DNA packaging is greatly increased during nuclear division events such as mitosis or meiosis, where DNA must be compacted and segregated to daughter cells. Condensins and cohesins are Structural Maintenance of Chromosome proteins that aid in the condensation of sister chromatids and the linkage of the centromere in sister chromatids. These SMC proteins induce positive supercoils. Supercoiling is also required for DNA/RNA synthesis. Because DNA must be unwound for DNA/RNA polymerase action, supercoils will result. The region ahead of the polymerase complex will be unwound; this stress is compensated with positive supercoils ahead of the complex. Behind the complex, DNA is rewound and there will be compensatory negative supercoils. It is important to note that topoisomerases such as DNA gyrase (Type II Topoisomerase) play a role in relieving some of the stress during DNA/RNA synthesis<ref>http://en.wikipedia.org/w/index.php?title=DNA_supercoil&oldid=417575151</ref>. NA supercoiling can be described numerically by changes in the '[[linking number]]' Lk. The linking number is the most descriptive property of supercoiled DNA. Lk<sub>o</sub>, the number of turns in the relaxed (B type) DNA plasmid/molecule, is determined by dividing the total base pairs of the molecule by the relaxed bp/turn which, depending on reference is 10.4-10.5. : <math>Lk_o=bp/10.4</math> Lk is merely the number of crosses a single strand makes across the other in a planar projection. The topology of the DNA is described by the equation below in which the linking number is equivalent to the sum of TW, which is the number of twists or turns of the double helix, and Wr which is the number of coils or 'writhes'. If there is a closed DNA molecule, the sum of TW and Wr, or the linking number, does not change. However, there may be complementary changes in TW and Wr without changing their sum. :<math>Lk=Tw+Wr</math> The change in the linking number, ΔLk, is the actual number of turns in the plasmid/molecule, Lk, minus the number of turns in the relaxed plasmid/molecule Lk<sub>o</sub>. :<math>\Delta{Lk=Lk-Lk_o}</math> If the DNA is negatively supercoiled ΔLk < 0. The negative supercoiling implies that the DNA is underwound. A standard expression independent of the molecule size is the "specific linking difference" or "superhelical density" denoted σ. σ represents the number of turns added or removed relative to the total number of turns in the relaxed molecule/plasmid, indicating the level of supercoiling. :<math>\sigma=\Delta{Lk/Lk_o}</math><ref>http://en.wikipedia.org/w/index.php?title=DNA_supercoil&oldid=417575151</ref> The [[Gibbs free energy]] associated with the coiling is given by the equation below<ref name="Vologodskii1979">{{cite journal|author=Vologodskii AV, Lukashin AV, Anshelevich VV, ''et al.'' |title=Fluctuations in superhelical DNA |journal=Nucleic Acids Res |volume=6 |pages=967–682 |year=1979 |doi=10.1093/nar/6.3.967}}</ref> :<math>{\Delta G/N=10RT \sigma^2}</math> The linking number is a numerical invariant that describes the linking of two closed curves in three-dimensional space. Intuitively, the linking number represents the number of times that each curve winds around the other. The linking number is always an integer, but may be positive or negative depending on the orientation of the two curves<ref>http://en.wikipedia.org/w/index.php?title=DNA_supercoil&oldid=417575151</ref>. Since the linking number ''L'' of supercoiled DNA is the number of times the two strands are intertwined (and both strands remain covalently intact), ''L'' cannot change. The reference state (or parameter) ''L<sub>0</sub>'' of a circular DNA duplex is its relaxed state. In this state, its writhe ''W'' = 0. Since ''L = T + W'', in a relaxed state ''T = L''. Thus, if we have a 400 bp relaxed circular DNA duplex, ''L ~ 40'' (assuming ~10 bp per turn in B-DNA). Then ''T ~ 40''. *Positively supercoiling: *:T = 0, W = 0, then L = 0 *:T = +3, W = 0, then L = +3 *:T = +2, W = +1, then L = +3 *Negatively supercoiling: *:T = 0, W = 0, then L = 0 *:T = -3, W = 0, then L = -3 *:T = -2, W = -1, then L = -3 Negative supercoils favor local unwinding of the DNA, allowing processes such as [[DNA transcription|transcription]], [[DNA replication]], and [[DNA recombination|recombination]]. Negative supercoiling is also thought to favour the transition between B-DNA and [[Z-DNA]], and moderate the interactions of DNA binding proteins involved in [[gene regulation]].<ref name="">{{cite book|title=Introduction to Plant Biotechnology |author=H. S. Chawla |publisher=Science Publishers |year=2002 |isbn=1578082285}}</ref><ref>http://en.wikipedia.org/w/index.php?title=DNA_supercoil&oldid=417575151</ref> ==DNA sequencing== RNA sequencing was one of the earliest forms of nucleotide sequencing. The major landmark of RNA sequencing is the sequence of the first complete gene and the complete genome of Bacteriophage MS2, identified and published by Walter Fiers and his coworkers at the University of Ghent (Ghent, Belgium), between 1972 and 1976. Prior to the development of rapid DNA sequencing methods in the early 1970s by Frederick Sanger at the University of Cambridge, in England and Walter Gilbert and Allan Maxam at Harvard, a number of laborious methods were used. For instance, in 1973, Gilbert and Maxam reported the sequence of 24 basepairs using a method known as wandering-spot analysis. The chain-termination method developed by Sanger and coworkers in 1975 soon became the method of choice, owing to its relative ease and reliability.<ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref> ===Maxam and Gilbert method=== In 1976–1977, Allan Maxam and Walter Gilbert developed a DNA sequencing method based on chemical modification of DNA and subsequent cleavage at specific bases. Although Maxam and Gilbert published their chemical sequencing method two years after the ground-breaking paper of Sanger and Coulson on plus-minus sequencing,Maxam–Gilbert sequencing rapidly became more popular, since purified DNA could be used directly, while the initial Sanger method required that each read start be cloned for production of single-stranded DNA. However, with the improvement of the chain-termination method (see below), Maxam-Gilbert sequencing has fallen out of favour due to its technical complexity prohibiting its use in standard molecular biology kits, extensive use of hazardous chemicals, and difficulties with scale-up. The method requires radioactive labeling at one 5' end of the DNA (typically by a kinase reaction using gamma-32P ATP) and purification of the DNA fragment to be sequenced. Chemical treatment generates breaks at a small proportion of one or two of the four nucleotide bases in each of four reactions (G, A+G, C, C+T). For example, the purines (A+G) are depurinated using formic acid, the guanines (and to some extent the adenines) are methylated by dimethyl sulfate, and the pyrimidines (C+T) are methylated using hydrazine. The addition of salt (sodium chloride) to the hydrazine reaction inhibits the methylation of thymine for the C-only reaction. The modified DNAs are then cleaved by hot piperidine at the position of the modified base. The concentration of the modifying chemicals is controlled to introduce on average one modification per DNA molecule. Thus a series of labeled fragments is generated, from the radiolabeled end to the first "cut" site in each molecule. The fragments in the four reactions are electrophoresed side by side in denaturing acrylamide gels for size separation. To visualize the fragments, the gel is exposed to X-ray film for autoradiography, yielding a series of dark bands each corresponding to a radiolabeled DNA fragment, from which the sequence may be inferred. Also sometimes known as "chemical sequencing", this method led to the Methylation Interference Assay used to map DNA-binding sites for DNA-binding proteins.<ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref> === Dideoxynucleotide Chain-termination methods === [[Image:Sequencing.jpg|thumb|right|Part of a radioactively labelled sequencing gel]] Because the chain-terminator method (or Sanger method after its developer [[Frederick Sanger]]) is more efficient and uses fewer toxic chemicals and lower amounts of radioactivity than the method of Maxam and Gilbert, it rapidly became the method of choice. The key principle of the Sanger method was the use of dideoxynucleotide triphosphates (ddNTPs) as DNA chain terminators. The classical chain-termination method requires a single-stranded DNA template, a DNA primer, a DNA polymerase, normal deoxynucleotidephosphates (dNTPs), and modified nucleotides (dideoxyNTPs) that terminate DNA strand elongation. These ddNTPs will also be radioactively or fluorescently labelled for detection in automated sequencing machines. The DNA sample is divided into four separate sequencing reactions, containing all four of the standard deoxynucleotides (dATP, dGTP, dCTP and dTTP) and the DNA polymerase. To each reaction is added only one of the four dideoxynucleotides (ddATP, ddGTP, ddCTP, or ddTTP) which are the chain-terminating nucleotides, lacking a 3'-hydroxyl (OH) group required for the formation of a phosphodiester bond between two nucleotides, thus terminating DNA strand extension and resulting in DNA fragments of varying length<ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref>. The newly synthesized and labelled DNA fragments are heat denatured, and separated by size (with a resolution of just one nucleotide) by gel electrophoresis on a denaturing polyacrylamide-urea gel with each of the four reactions run in one of four individual lanes (lanes A, T, G, C); the DNA bands are then visualized by autoradiography or UV light, and the DNA sequence can be directly read off the X-ray film or gel image. In the image on the right, X-ray film was exposed to the gel, and the dark bands correspond to DNA fragments of different lengths. A dark band in a lane indicates a DNA fragment that is the result of chain termination after incorporation of a dideoxynucleotide (ddATP, ddGTP, ddCTP, or ddTTP). The relative positions of the different bands among the four lanes are then used to read (from bottom to top) the DNA sequence<ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref>. [[Image:DNA Sequencin 3 labeling methods.jpg|thumb|left|DNA fragments are labelled with a radioactive or fluorescent tag on the primer (1), in the new DNA strand with a labeled dNTP, or with a labeled ddNTP. (click to expand)]] Technical variations of chain-termination sequencing include tagging with nucleotides containing radioactive phosphorus for radiolabelling, or using a primer labeled at the 5’ end with a fluorescent dye. Dye-primer sequencing facilitates reading in an optical system for faster and more economical analysis and automation. The later development by [[Leroy Hood]] and coworkers <ref>{{cite journal |author=Smith LM, Sanders JZ, Kaiser RJ, ''et al'' |title=Fluorescence detection in automated DNA sequence analysis |journal=Nature |volume=321 |issue=6071 |pages=674–9 |year=1986 |pmid=3713851 |doi=10.1038/321674a0 |quote=We have developed a method for the partial automation of DNA sequence analysis. Fluorescence detection of the DNA fragments is accomplished by means of a fluorophore covalently attached to the oligonucleotide primer used in enzymatic DNA sequence analysis. A different coloured fluorophore is used for each of the reactions specific for the bases A, C, G and T. The reaction mixtures are combined and co-electrophoresed down a single polyacrylamide gel tube, the separated fluorescent bands of DNA are detected near the bottom of the tube, and the sequence information is acquired directly by computer.}}</ref><ref>{{cite journal |author=Smith LM, Fung S, Hunkapiller MW, Hunkapiller TJ, Hood LE |title=The synthesis of oligonucleotides containing an aliphatic amino group at the 5' terminus: synthesis of fluorescent DNA primers for use in DNA sequence analysis |journal=Nucleic Acids Res. |volume=13 |issue=7 |pages=2399–412 |year=1985 |month=April |pmid=4000959 |pmc=341163 |url=http://nar.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=4000959 |doi=10.1093/nar/13.7.2399}}</ref> of fluorescently labeled ddNTPs and primers set the stage for automated, high-throughput DNA sequencing.[[Image:Radioactive Fluorescent Seq.jpg|thumb|right|Sequence ladder by radioactive sequencing compared to fluorescent peaks ]] Chain-termination methods have greatly simplified DNA sequencing. For example, chain-termination-based kits are commercially available that contain the reagents needed for sequencing, pre-aliquoted and ready to use. Limitations include non-specific binding of the primer to the DNA, affecting accurate read-out of the DNA sequence, and DNA secondary structures affecting the fidelity of the sequence<ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref>. === Dye-terminator sequencing === [[Image:CE Basic.jpg|thumb|left|Capillary electrophoresis (click to expand)]] ''Dye-terminator sequencing'' utilizes labelling of the chain terminator ddNTPs, which permits sequencing in a single reaction, rather than four reactions as in the labelled-primer method. In dye-terminator sequencing, each of the four dideoxynucleotide chain terminators is labelled with fluorescent dyes, each of which emit light at different wavelengths. Owing to its greater expediency and speed, dye-terminator sequencing is now the mainstay in automated sequencing. Its limitations include dye effects due to differences in the incorporation of the dye-labelled chain terminators into the DNA fragment, resulting in unequal peak heights and shapes in the electronic DNA sequence trace [[chromatogram]] after [[capillary electrophoresis]] (see figure to the left). This problem has been addressed with the use of modified DNA polymerase enzyme systems and dyes that minimize incorporation variability, as well as methods for eliminating "dye blobs". The dye-terminator sequencing method, along with automated high-throughput DNA sequence analyzers, is now being used for the vast majority of sequencing projects<ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref>. === Challenges === Common challenges of DNA sequencing include poor quality in the first 15–40 bases of the sequence and deteriorating quality of sequencing traces after 700–900 bases. [[Base calling]] software typically gives an estimate of quality to aid in quality trimming.<ref name="urlPhred - Quality Base Calling">{{cite web |url=http://www.phrap.com/phred/ |title=Phred - Quality Base Calling |format= |work= |accessdate=2011-02-24}}</ref><ref name="urlBase-calling for next-generation sequencing platforms — Brief Bioinform">{{cite web |url=http://bib.oxfordjournals.org/content/early/2011/01/18/bib.bbq077.full |title=Base-calling for next-generation sequencing platforms — Brief Bioinform |format= |work= |accessdate=2011-02-24}}</ref> In cases where DNA fragments are cloned before sequencing, the resulting sequence may contain parts of the cloning vector. In contrast, PCR-based cloning and emerging sequencing technologies based on pyrosequencing often avoid using cloning vectors. Recently, one-step Sanger sequencing (combined amplification and sequencing) methods such as Ampliseq and SeqSharp have been developed that allow rapid sequencing of target genes without cloning or prior amplification.<ref>Murphy, K.; Berg, K.; Eshleman, J. (2005). "Sequencing of genomic DNA by combined amplification and cycle sequencing reaction". Clinical chemistry 51 (1): 35–39.</ref><ref>Sengupta, D.; Cookson, B. (2010). "SeqSharp: A general approach for improving cycle-sequencing that facilitates a robust one-step combined amplification and sequencing method". The Journal of molecular diagnostics : JMD 12 (3): 272–277. </ref><ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref> Current methods can directly sequence only relatively short (300–1000 [[nucleotides]] long) DNA fragments in a single reaction. The main obstacle to sequencing DNA fragments above this size limit is insufficient power of separation for resolving large DNA fragments that differ in length by only one nucleotide. In all cases the use of a primer with a free 5' end is essential<ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref>. === Automation and sample preparation === [[Image:Sanger sequencing read display.png|thumb|500px|right|View of the start of an example dye-terminator read ]] Automated DNA-sequencing instruments (DNA sequencers) can sequence up to 384 DNA samples in a single batch (run) in up to 24 runs a day. DNA sequencers carry out capillary electrophoresis for size separation, detection and recording of dye fluorescence, and data output as fluorescent peak trace chromatograms. Sequencing reactions by thermocycling, cleanup and re-suspension in a buffer solution before loading onto the sequencer are performed separately. A number of commercial and non-commercial software packages can trim low-quality DNA traces automatically. These programs score the quality of each peak and remove low-quality base peaks (generally located at the ends of the sequence). The accuracy of such algorithms is below visual examination by a human operator, but sufficient for automated processing of large sequence data sets<ref>http://en.wikipedia.org/w/index.php?title=DNA_sequencing&oldid=422803407</ref>. ==Facts to be remembered== # 1869 DNA was first isolated by the Swiss physician Friedrich Miescher who discovered a microscopic substance in the pus of discarded surgical bandages. # 1937 William Astbury produced the first X-ray diffraction patterns that showed that DNA had a regular structure. # 1928 Frederick Griffith discovered that traits of the "smooth" form of the Pneumococcus could be transferred to the "rough" form of the same bacteria by mixing killed "smooth" bacteria with the live "rough" form. # 1952 Alfred Hershey and Martha Chase in the Hershey–Chase experiment showed that DNA is the genetic material of the T2 phage. # 1953 James D. Watson and Francis Crick suggested double-helix model of DNA structure. #1972 Development of recombinant DNA technology, which permits isolation of defined fragments of DNA; prior to this, the only accessible samples for sequencing were from bacteriophage or virus DNA. #1977 The '''first complete DNA genome''' to be sequenced is that of '''bacteriophage φX174'''. #1977 Allan Maxam and Walter Gilbert publish "DNA sequencing by chemical degradation".Frederick Sanger, independently, publishes "DNA sequencing with chain-terminating inhibitors". #1984 Medical Research Council scientists decipher the complete DNA sequence of the Epstein-Barr virus, 170 kb. #1986 Leroy E. Hood's laboratory at the California Institute of Technology and Smith announce the first semi-automated DNA sequencing machine. #1987 Applied Biosystems markets first automated sequencing machine, the model ABI 370. #1990 The U.S. National Institutes of Health (NIH) begins large-scale sequencing trials on Mycoplasma capricolum, Escherichia coli, Caenorhabditis elegans, and Saccharomyces cerevisiae (at US$0.75/base). #1991 Sequencing of human expressed sequence tags begins in Craig Venter's lab, an attempt to capture the coding fraction of the human genome. #1995 Craig Venter, Hamilton Smith, and colleagues at The Institute for Genomic Research (TIGR) publish the first complete genome of a free-living organism, the bacterium Haemophilus influenzae. The circular chromosome contains 1,830,137 bases and its publication in the journal Science marks the first use of whole-genome shotgun sequencing, eliminating the need for initial mapping efforts. #1996 Pål Nyrén and his student Mostafa Ronaghi at the Royal Institute of Technology in Stockholm publish their method of pyrosequencing #1998 Phil Green and Brent Ewing of the University of Washington publish “phred” for sequencer data analysis. #2000 Lynx Therapeutics publishes and markets "MPSS" - a parallelized, adapter/ligation-mediated, bead-based sequencing technology, launching "next-generation" sequencing. #2001 A draft sequence of the human genome is published. #2004 454 Life Sciences markets a parallelized version of pyrosequencing. The first version of their machine reduced sequencing costs 6-fold compared to automated Sanger sequencing, and was the second of a new generation of sequencing technologies, after MPSS. ==References== {{Reflist|2}} {{BookCat}} 5ofgdlk4ayeatvqb18i22jepm996hyb Principles of Biochemistry/Amino acids and proteins 0 250235 4672102 4668847 2026-09-24T09:12:54Z R. Henrik Nilsson 3395618 refrences > references 4672102 wikitext text/x-wiki Amino acids are molecules containing an amine group(NH<sub>2</sub>), a carboxylic acid group(R-C=O-OH) and a side-chain( usually denoted as R) that varies between different amino acids. The key elements of an amino acid are carbon, hydrogen, oxygen, and nitrogen. They are particularly important in biochemistry, where the term usually refers to alpha-amino acids.Proteins are biochemical compounds consisting of one or more polypeptides typically folded into a globular or fibrous form in a biologically functional way. A polypeptide is a single linear polymer chain of amino acids bonded together by peptide bonds between the carboxyl and amino groups of adjacent amino acid residues. The sequence of amino acids in a protein is defined by the sequence of a gene, which is encoded in the genetic code. In general, the genetic code specifies 20 standard amino acids; however, in certain organisms the genetic code can include selenocysteine—and in certain archaea—pyrrolysine. Shortly after or even during synthesis, the residues in a protein are often chemically modified by post-translational modification, which alters the physical and chemical properties, folding, stability, activity, and ultimately, the function of the proteins. Sometimes proteins have non-peptide groups attached, which can be called prosthetic groups or cofactors. Proteins can also work together to achieve a particular function, and they often associate to form stable complexes. One of the most distinguishing features of polypeptides is their ability to fold into a globular state, or "structure". The extent to which proteins fold into a defined structure varies widely. Some proteins fold into a highly rigid structure with small fluctuations and are therefore considered to be single structure. Other proteins undergo large rearrangements from one conformation to another. This conformational change is often associated with a signaling event. Thus, the structure of a protein serves as a medium through which to regulate either the function of a protein or activity of an enzyme. Not all proteins requiring a folding process in order to function, as some function in an unfolded state<ref>http://en.wikipedia.org/w/index.php?title=Protein&oldid=422392976</ref>. Like other biological macromolecules such as polysaccharides and nucleic acids, proteins are essential parts of organisms and participate in virtually every process within cells. Many proteins are enzymes that catalyze biochemical reactions and are vital to metabolism. Proteins also have structural or mechanical functions, such as actin and myosin in muscle and the proteins in the cytoskeleton, which form a system of scaffolding that maintains cell shape. Other proteins are important in cell signaling, immune responses, cell adhesion, and the cell cycle. Proteins are also necessary in animals' diets, since animals cannot synthesize all the amino acids they need and must obtain essential amino acids from food. Through the process of digestion, animals break down ingested protein into free amino acids that are then used in metabolism. Proteins were first described by the Dutch chemist Gerhardus Johannes Mulder and named by the Swedish chemist Jöns Jakob Berzelius in 1838. Early nutritional scientists such as the German Carl von Voit believed that protein was the most important nutrient for maintaining the structure of the body, because it was generally believed that "flesh makes flesh." The central role of proteins as enzymes in living organisms was however not fully appreciated until 1926, when James B. Sumner showed that the enzyme urease was in fact a protein.The first protein to be sequenced was insulin, by Frederick Sanger, who won the Nobel Prize for this achievement in 1958. The first protein structures to be solved were hemoglobin and myoglobin, by Max Perutz and Sir John Cowdery Kendrew, respectively, in 1958. The three-dimensional structures of both proteins were first determined by X-ray diffraction analysis; Perutz and Kendrew shared the 1962 Nobel Prize in Chemistry for these discoveries. Proteins may be purified from other cellular components using a variety of techniques such as ultracentrifugation, precipitation, electrophoresis, and chromatography; the advent of genetic engineering has made possible a number of methods to facilitate purification. Methods commonly used to study protein structure and function include immunohistochemistry, site-directed mutagenesis, nuclear magnetic resonance and mass spectrometry. Distributed computing is a relatively new tool researchers are using to examine the infamously complex interactions that govern protein folding; the statistical analysis techniques employed to calculate a protein's probable tertiary structure from its amino acid sequence (primary structure) are well-suited for the distributed computing environment, which has made this otherwise prohibitively expensive and time consuming problem significantly more manageable<ref>http://en.wikipedia.org/w/index.php?title=Protein&oldid=422392976</ref>. [[Image:Hemoglobin t-r state ani.gif|frame|right|A schematic visual model of oxygen-binding process, showing all four monomers and hemes, and protein chains only as diagramatic coils, to facilitate visualization into the molecule. Oxygen is not shown in this model, but, for each of the iron atoms, it binds to the iron (red sphere) in the flat heme For example, in the upper left of the four hemes shown, oxygen binds at the left of the iron atom shown in the upper left of diagram. This causes the iron atom to move backward into the heme which holds it (the iron moves upward as it binds oxygen, in this illustration), tugging the histidine residue (modeled as a red pentagon on the right of the iron) closer, as it does. This, in turn, pulls on the protein chain holding the histidine.]] ==Amino acids== [[Image:amino-CORN.svg|thumb|right|200px|CO-R-N rule]] Protein is a essential agent of biological function.There are''' 22 standard''' amino acids, but only''' 21 are found in eukaryotes'''. Of the 22, 20 are directly encoded by the universal genetic code. Humans can synthesize 11 of these 20 from each other or from other molecules of intermediary metabolism. The other 9 must be consumed in the diet, and so are called essential amino acids; those are ''histidine, isoleucine, leucine, lysine, methionine, phenylalanine, threonine, tryptophan, and valine.'' The remaining two, '''selenocysteine''' and '''pyrrolysine''', are incorporated into proteins by unique synthetic mechanisms. Each α-amino acid consists of a backbone part that is present in all the amino acid types, and a side chain that is unique to each type of residue. An exception from this rule is proline, where the hydrogen atom is replaced by a bond to the side chain. Because the carbon atom is bound to four different groups it is chiral, however only one of the isomers occur in biological proteins. Glycine however, is not chiral since its side chain is a hydrogen atom. A simple mnemonic for correct L-form is "CORN": when the Cα atom is viewed with the H in front, the residues read '''"CO-R-N"''' in a clockwise direction. '''Isomerism''' The standard '''α-amino acids''', all but glycine can exist in either of two optical isomers, called''' L or D amino acids''', which are mirror images of each other . While L-amino acids represent all of the amino acids found in proteins during translation in the ribosome, D-amino acids are found in some proteins produced by enzyme posttranslational modifications after translation and translocation to the endoplasmic reticulum, as in exotic sea-dwelling organisms such as cone snails. They are also abundant components of the peptidoglycan cell walls of bacteria, and '''D-serine may act as a neurotransmitter in the brain'''. The L and D convention for amino acid configuration refers not to the optical activity of the amino acid itself, but rather to the optical activity of the isomer of glyceraldehyde from which that amino acid can theoretically be synthesized (D-glyceraldehyde is dextrorotary; L-glyceraldehyde is levorotary). Alternatively, the (S) and (R) designators are used to indicate the absolute stereochemistry. Almost all of the amino acids in proteins are (S) at the α carbon, with cysteine being (R) and glycine non-chiral.Cysteine is unusual since it has a sulfur atom at the second position in its side-chain, which has a larger atomic mass than the groups attached to the first carbon which is attached to the α-carbon in the other standard amino acids, thus the (R) instead of (S)<ref>http://en.wikipedia.org/w/index.php?title=Amino_acid&oldid=425052968</ref>. '''Zwitterions''' The amine and carboxylic acid functional groups found in amino acids allow it to have amphiprotic properties. At a certain pH, known as the '''isoelectric point''', an amino acid has no overall charge since the number of protonated ammonia groups (positive charges) and deprotonated carboxylate groups (negative charges) are equal. The amino acids all have different '''isoelectric points'''. The ions produced at the isoelectric point have both positive and negative charges and are known as a zwitterion, which comes from the German word Zwitter meaning "hermaphrodite" or "hybrid". Amino acids can exist as '''zwitterions in solids and in polar solutions such as water''', but '''not in the gas''' phase. Zwitterions have minimal solubility at their isolectric point and an amino acid can be isolated by precipitating it from water by adjusting the pH to its particular isoelectric point<ref>http://en.wikipedia.org/w/index.php?title=Amino_acid&oldid=425052968</ref>. The 20 naturally occurring amino acids have different physical and chemical properties, including their electrostatic charge, pKa, hydrophobicity, size and specific functional groups. These properties play a major role in molding protein structure. The salient features of amino acids are described below in the table. {| class="wikitable" |- align="center" ! Amino Acid ! colspan="2" | Abbrev. ! Remarks |- ! Alanine | A | Ala | Very abundant, very versatile. More stiff than glycine, but small enough to pose only small steric limits for the protein conformation. It behaves fairly neutrally, and can be located in both hydrophilic regions on the protein outside and the hydrophobic areas inside. |- ! Asparagine or aspartic acid | B | Asx | A placeholder when either amino acid may occupy a position. |- ! Cysteine | C | Cys | The sulfur atom bonds readily to heavy metal ions. Under oxidizing conditions, two cysteines can join together in a disulfide bond to form the amino acid cystine. When cystines are part of a protein, insulin for example, the tertiary structure is stabilized, which makes the protein more resistant to denaturation; therefore, disulfide bonds are common in proteins that have to function in harsh environments including digestive enzymes (e.g., pepsin and chymotrypsin) and structural proteins (e.g., keratin). Disulfides are also found in peptides too small to hold a stable shape on their own (eg. insulin). |- ! Aspartic acid | D | Asp | Behaves similarly to glutamic acid. Carries a hydrophilic acidic group with strong negative charge. Usually is located on the outer surface of the protein, making it water-soluble. Binds to positively-charged molecules and ions, often used in enzymes to fix the metal ion. When located inside of the protein, aspartate and glutamate are usually paired with arginine and lysine. |- ! Glutamic acid | E | Glu | Behaves similar to aspartic acid. Has longer, slightly more flexible side chain. |- ! Phenylalanine | F | Phe | Essential for humans. Phenylalanine, tyrosine, and tryptophan contain large rigid aromatic group on the side-chain. These are the biggest amino acids. Like isoleucine, leucine and valine, these are hydrophobic and tend to orient towards the interior of the folded protein molecule. Phenylalanine can be converted into Tyrosine. |- ! Glycine | G | Gly | Because of the two hydrogen atoms at the α carbon, glycine is not optically active. It is the smallest amino acid, rotates easily, adds flexibility to the protein chain. It is able to fit into the tightest spaces, e.g., the triple helix of collagen. As too much flexibility is usually not desired, as a structural component it is less common than alanine. |- ! Histidine | H | His | In even slightly acidic conditions protonation of the nitrogen occurs, changing the properties of histidine and the polypeptide as a whole. It is used by many proteins as a regulatory mechanism, changing the conformation and behavior of the polypeptide in acidic regions such as the late endosome or lysosome, enforcing conformation change in enzymes. However only a few histidines are needed for this, so it is comparatively scarce. |- ! Isoleucine | I | Ile | Essential for humans. Isoleucine, leucine and valine have large aliphatic hydrophobic side chains. Their molecules are rigid, and their mutual hydrophobic interactions are important for the correct folding of proteins, as these chains tend to be located inside of the protein molecule. |- ! Leucine or isoleucine | J | Xle | A placeholder when either amino acid may occupy a position |- ! Lysine | K | Lys | Essential for humans. Behaves similarly to arginine. Contains a long flexible side-chain with a positively-charged end. The flexibility of the chain makes lysine and arginine suitable for binding to molecules with many negative charges on their surfaces. E.g., DNA-binding proteins have their active regions rich with arginine and lysine. The strong charge makes these two amino acids prone to be located on the outer hydrophilic surfaces of the proteins; when they are found inside, they are usually paired with a corresponding negatively-charged amino acid, e.g., aspartate or glutamate. |- ! Leucine | L | Leu | Essential for humans. Behaves similar to isoleucine and valine. See isoleucine. |- ! Methionine | M | Met | Essential for humans. Always the first amino acid to be incorporated into a protein; sometimes removed after translation. Like cysteine, contains sulfur, but with a methyl group instead of hydrogen. This methyl group can be activated, and is used in many reactions where a new carbon atom is being added to another molecule. |- ! Asparagine | N | Asn | Similar to aspartic acid. Asn contains an amide group where Asp has a carboxyl. |- ! Pyrrolysine | O | Pyl | Similar to lysine, with a pyrroline ring attached. |- ! Proline | P | Pro | Contains an unusual ring to the N-end amine group, which forces the CO-NH amide sequence into a fixed conformation. Can disrupt protein folding structures like α helix or β sheet, forcing the desired kink in the protein chain. Common in collagen, where it often undergoes a posttranslational modification to hydroxyproline. |- ! Glutamine | Q | Gln | Similar to glutamic acid. Gln contains an amide group where Glu has a carboxyl. Used in proteins and as a storage for ammonia. The most abundant Amino Acid in the body. |- ! Arginine | R | Arg | Functionally similar to lysine. |- ! Serine | S | Ser | Serine and threonine have a short group ended with a hydroxyl group. Its hydrogen is easy to remove, so serine and threonine often act as hydrogen donors in enzymes. Both are very hydrophilic, therefore the outer regions of soluble proteins tend to be rich with them. |- ! Threonine | T | Thr | Essential for humans. Behaves similarly to serine. |- ! Selenocysteine | U | Sec | Selenated form of cysteine, which replaces sulfur. |- ! Valine | V | Val | Essential for humans. Behaves similarly to isoleucine and leucine. See isoleucine. |- ! Tryptophan | W | Trp | Essential for humans. Behaves similarly to phenylalanine and tyrosine (see phenylalanine). Precursor of serotonin. Naturally fluorescent. |- ! Unknown | X | Xaa | Placeholder when the amino acid is unknown or unimportant. |- ! Tyrosine | Y | Tyr | Behaves similarly to phenylalanine (precursor to Tyrosine) and tryptophan (see phenylalanine). Precursor of melanin, epinephrine, and thyroid hormones. Naturally fluorescent, although fluorescence is usually quenched by energy transfer to tryptophans. |- ! Glutamic acid or glutamine | Z | Glx | A placeholder when either amino acid may occupy a position. |} <gallery> image:L-alanine-skeletal.png|<small>L</small>-Alanine<br>(Ala&nbsp;/&nbsp;A) image:L-arginine-skeletal-(tall).png|<small>L</small>-Arginine<br>(Arg&nbsp;/&nbsp;R) image:L-asparagine-skeletal.png|<small>L</small>-Asparagine<br>(Asn&nbsp;/&nbsp;N) image:L-aspartic-acid-skeletal.png|<small>L</small>-Aspartic acid<br>(Asp&nbsp;/&nbsp;D) image:L-cysteine-skeletal.png|<small>L</small>-Cysteine<br>(Cys&nbsp;/&nbsp;C) image:Kwas glutaminowy.svg|<small>L</small>-Glutamic acid<br>(Glu&nbsp;/&nbsp;E) image:L-glutamine-skeletal.png|<small>L</small>-Glutamine<br>(Gln&nbsp;/&nbsp;Q) image:Glycine-skeletal.png|Glycine<br>(Gly&nbsp;/&nbsp;G) image:L-histidine-skeletal.png|<small>L</small>-Histidine<br>(His&nbsp;/&nbsp;H) image:L-isoleucine-skeletal.svg|<small>L</small>-Isoleucine<br>(Ile&nbsp;/&nbsp;I) image:L-leucine-skeletal.svg|<small>L</small>-Leucine<br>(Leu&nbsp;/&nbsp;L) image:L-lysine-skeletal.svg|<small>L</small>-Lysine<br>(Lys&nbsp;/&nbsp;K) image:L-methionine-skeletal.png|<small>L</small>-Methionine<br>(Met&nbsp;/&nbsp;M) image:Fenyloalanina.svg|<small>L</small>-Phenylalanine<br>(Phe&nbsp;/&nbsp;F) image:Amminoacido prolina formula.svg|<small>L</small>-Proline<br>(Pro&nbsp;/&nbsp;P) image:L-serine-skeletal.svg|<small>L</small>-Serine<br>(Ser&nbsp;/&nbsp;S) image:L-threonine-skeletal.png|<small>L</small>-Threonine<br>(Thr&nbsp;/&nbsp;T) image:L-tryptophan-skeletal.png|<small>L</small>-Tryptophan<br>(Trp&nbsp;/&nbsp;W) image:L-tyrosine-skeletal.png|<small>L</small>-Tyrosine<br>(Tyr&nbsp;/&nbsp;Y) image:L-valine-skeletal.png|<small>L</small>-Valine<br>(Val&nbsp;/&nbsp;V) image:L-selenocysteine-2D-skeletal.png|<small>L</small>-Selenocysteine<br>(Sec&nbsp;/&nbsp;U) image:Pyrrolysine.svg|<small>L</small>-Pyrrolysine<br>(Pyl&nbsp;/&nbsp;O) </gallery> [[Image:Molecular structures of the 21 proteinogenic amino acids.svg|thumb|upright=2.0|right|alt=Table of Amino Acids.|The 21 amino acids found in eukaryotes, grouped according to their side-chains' pKas and charge at physiological pH 7.4]] ===Classification of aminoacids=== The 20 amino acids encoded directly by the genetic code can be divided into several groups based on their properties. Important factors are charge, hydrophilicity or hydrophobicity, size and functional groups.Amino acids are usually classified by the properties of their side chain into four groups. The side chain can make an amino acid a weak acid or a weak base, and a hydrophile if the side chain is polar or a hydrophobe if it is nonpolar. [[Image:a-amino-acid.png|thumb|150px|An α-amino acid. The C<sub>α</sub>H atom is omitted in the diagram.]] Protein amino acids are combined into a single polypeptide chain in a condensation reaction. This reaction is catalysed by the ribosome in a process known as translation. {| class="wikitable" ! Essential ! Nonessential |- | Isoleucine | Alanine |- | Leucine | Asparagine |- | Lysine | Aspartic Acid |- | Methionine | Cysteine* |- | Phenylalanine | Glutamic Acid |- | Threonine | Glutamine* |- | Tryptophan | Glycine* |- | Valine | Proline* |- | | Selenocysteine* |- | | Serine* |- | | Tyrosine* |- | | Arginine* |- | | Histidine* |- | | Ornithine* |- | | Taurine* |} '''Polar and non polar amino acids and their single and three letter code''' {| class="wikitable sortable" ! Amino Acid ! Three Letter code ! Single Letter code ! Side chain polarity ! Side chain charge (pH 7.4) ! Hydropathy index ! Absorbance λ<sub>max</sub>(nm) ! ε at λ<sub>max</sub> (x10<sup>−3</sup> M<sup>−1</sup> cm<sup>−1</sup>) |- align="center" | Alanine | Ala | A | nonpolar | neutral | 1.8 | | |- align="center" | Arginine | Arg | R | polar | positive | −4.5 | | |- align="center" | Asparagine | Asn | N | polar | neutral | −3.5 | | |- align="center" | Aspartic acid | Asp | D | polar | negative | −3.5 | | |- align="center" | Cysteine | Cys | C | nonpolar | neutral | 2.5 | 250 | 0.3 |- align="center" | Glutamic acid | Glu | E | polar | negative | −3.5 | | |- align="center" | Glutamine | Gln | Q | polar | neutral | −3.5 | | |- align="center" | Glycine | Gly | G | nonpolar | neutral | −0.4 | | |- align="center" | Histidine | His | H | polar | positive(10%) neutral(90%) | −3.2 | 211 | 5.9 |- align="center" | Isoleucine | Ile | I | nonpolar | neutral | 4.5 | | |- align="center" | Leucine | Leu | L | nonpolar | neutral | 3.8 | | |- align="center" | Lysine | Lys | K | polar | positive | −3.9 | | |- align="center" | Methionine | Met | M | nonpolar | neutral | 1.9 | | |- align="center" | Phenylalanine | Phe | F | nonpolar | neutral | 2.8 | 257, 206, 188 | 0.2, 9.3, 60.0 |- align="center" | Proline | Pro | P | nonpolar | neutral | −1.6 | | |- align="center" | Serine | Ser | S | polar | neutral | −0.8 | | |- align="center" | Threonine | Thr | T | polar | neutral | −0.7 | | |- align="center" | Tryptophan | Trp | W | nonpolar | neutral | −0.9 | 280, 219 | 5.6, 47.0 |- align="center" | Tyrosine | Tyr | Y | polar | neutral | −1.3 | 274, 222, 193 | 1.4, 8.0, 48.0 |- align="center" | Valine | Val | V | nonpolar | neutral | 4.2 | | |} Additionally, there are two additional amino acids which are incorporated by overriding stop codons: {| class="wikitable" ! 21st and 22nd amino acids ! 3-Letter ! 1-Letter |- align="center" | Selenocysteine | Sec | U |- align="center" | Pyrrolysine | Pyl | O |} In addition to the specific amino acid codes, placeholders are used in cases where chemical or crystallographic analysis of a peptide or protein can not conclusively determine the identity of a residue. {| class="wikitable" ! Ambiguous Amino Acids ! 3-Letter ! 1-Letter |- align="center" | Asparagine or aspartic acid | Asx | B |- align="center" | Glutamine or glutamic acid | Glx | Z |- align="center" | Leucine or Isoleucine | Xle | J |- align="center" | Unspecified or unknown amino acid | Xaa | X |} '''Unk''' is sometimes used instead of '''Xaa''', but is less standard. Additionally, many non-standard amino acids have a specific code. For example, several peptide drugs, such as Bortezomib or MG132 are artificially synthesized and retain their protecting groups, which have specific codes. Bortezomib is Pyz-Phe-boroLeu and MG132 is Z-Leu-Leu-Leu-al. Additionally, To aid in the analysis of protein structure, photocrosslinking amino acid analogues are available. These include photoleucine ('''pLeu''') and photomethionine ('''pMet''').<ref> Photo-leucine and photo-methionine allow identification of protein-protein interactions in living cells.Nature Methods:4,261–7,2005</ref> ==Structure of protein== [[Image:Ramaplot.png|thumb|250px|A Ramachandran plot generated from the protein PCNA, a human DNA clamp protein that is composed of both beta sheets and alpha helices (PDB ID 1AXC). Points that lie on the axes indicate N- and C-terminal residues for each subunit. The green regions show possible angle formations that include glycine, while the blue areas are for formations that don't include glycine.]] ===Primary structure of protein=== [[Image:Ramachandran plot general 100K.jpg|thumb|right|250px|Ramachandran diagram (φ,ψ plot), with data points for α-helical residues forming a dense diagonal cluster below and left of center, around the global energy minimum for backbone conformation.<ref>{{ cite journal | author = Lovell SC et al. | title = Structure validation by Cα geometry: φ,ψ and Cβ deviation | journal = Proteins | volume = 50 | pages = 437–450 | doi = 10.1002/prot.10286 | pmid = 12557186 | year = 2003 | issue = 3}}</ref>]] The proposal that proteins were linear chains of α-amino acids was made nearly simultaneously by two scientists at the same conference in 1902, the 74th meeting of the Society of German Scientists and Physicians, held in Karlsbad. '''Franz Hofmeister made''' the proposal in the morning, based on his observations of the biuret reaction in proteins. Hofmeister was followed a few hours later by '''Emil Fischer''', who had amassed a wealth of chemical details supporting the peptide-bond model. For completeness, the proposal that proteins contained amide linkages was made as early as 1882 by the French chemist '''E. Grimaux'''. Despite these data and later evidence that proteolytically digested proteins yielded only oligopeptides, the idea that proteins were linear, unbranched polymers of amino acids was not accepted immediately. Some well-respected scientists such as William Astbury doubted that covalent bonds were strong enough to hold such long molecules together; they feared that thermal agitations would shake such long molecules asunder. Hermann Staudinger faced similar prejudices in the 1920s when he argued that rubber was composed of macromolecules. Thus, several alternative hypotheses arose. The '''colloidal protein hypothesis''' stated that proteins were colloidal assemblies of smaller molecules. This hypothesis was disproved in the 1920s by ultracentrifugation measurements by Theodor Svedberg that showed that proteins had a well-defined, reproducible molecular weight and by electrophoretic measurements by Arne Tiselius that indicated that proteins were single molecules<ref>http://en.wikipedia.org/w/index.php?title=Protein_primary_structure&oldid=415921787</ref>. A second hypothesis, the '''cyclol hypothesis''' advanced by Dorothy Wrinch, proposed that the linear polypeptide underwent a chemical cyclol rearrangement C=O + HN C(OH)-N that crosslinked its backbone amide groups, forming a two-dimensional fabric. Other primary structures of proteins were proposed by various researchers, such as the diketopiperazine model of Emil Abderhalden and the pyrrol/piperidine model of Troensegaard in 1942. Although never given much credence, these alternative models were finally disproved when Frederick Sanger successfully sequenced insulin and by the crystallographic determination of myoglobin and hemoglobin by Max Perutz and John Kendrew. The primary structure of peptides and proteins refers to the linear sequence of its amino acid structural units. The term "primary structure" was first coined by Linderstrøm-Lang in 1951. By convention, the primary structure of a protein is reported starting from the amino-terminal (N) end to the carboxyl-terminal (C) end. The post-translational modifications of protein such as disulfide formation, phosphorylations and glycosylations are usually also considered a part of the primary structure, and cannot be read from the gene<ref>http://en.wikipedia.org/w/index.php?title=Protein_primary_structure&oldid=415921787</ref>. {{quotation|A '''Ramachandran plot''' (also known as a ''Ramachandran map or a Ramachandran diagram'' or a [φ,ψ] plot), developed by Gopalasamudram Narayana Ramachandran and Viswanathan Sasisekharan is a way to visualize dihedral angles ψ against φ of amino acid residues in protein structure. <ref> RAMACHANDRAN GN, RAMAKRISHNAN C, SASISEKHARAN V (July 1963). "Stereochemistry of polypeptide chain configurations". J. Mol. Biol. 7: 95–9</ref>. It shows the possible conformations of ψ and φ angles for a polypeptide. Mathematically, the Ramachandran plot is the visualization of a function <math>f: \left[-\pi,\pi\right) \times \left[-\pi,\pi\right) \rightarrow \mathbb{R_{{}+{}}}</math>. The domain of this function is the torus. Hence, the conventional Ramachandran plot is a projection of the torus on the plane, resulting in a distorted view and the presence of discontinuities. One would expect that larger side chains would result in more restrictions and consequently a smaller allowable region in the Ramachandran plot. In practice this does not appear to be the case; only the methylene group at the α position has an influence. Glycine has a hydrogen atom, with a smaller van der Waals radius, instead of a methyl group at the α position. Hence it is least restricted and this is apparent in the Ramachandran plot for glycine for which the allowable area is considerably larger. In contrast, the Ramachandran plot for proline shows only a very limited number of possible combinations of ψ and φ. The Ramachandran plot was calculated just before the first protein structures at atomic resolution were determined. Forty years later there were tens of thousands of high-resolution protein structures determined by X-ray crystallography and deposited in the Protein Data Bank (PDB). From one thousand different protein chains, Ramachandran plots of over 200 000 amino acids were plotted, showing some significant differences, especially for glycine (Hovmöller et al. 2002). The upper left region was found to be split into two; one to the left containing amino acids in beta sheets and one to the right containing the amino acids in random coil of this conformation. One can also plot the dihedral angles in polysaccharides and other polymers in this fashion. For the first two protein side-chain dihedral angles a similar plot is the Janin Plot.}} ===Secondary structure of protein=== [[Image:1GZX Haemoglobin.png|thumb|right|200px|The Hemoglobin molecule has four heme-binding subunits, each largely made of alpha helices.]] Secondary structure refers to highly regular local sub-structures. Two main types of secondary structure, the alpha helix and the beta strand, were suggested in 1951 by '''Linus Pauling'''' and coworkers.<ref name="Pauling1951">{{Cite journal|author=Pauling L, Corey RB, Branson HR |journal=Proc Natl Acad Sci USA |year=1951 |volume=37 |issue=4 |pages=205–211 |title=The structure of proteins; two hydrogen-bonded helical configurations of the polypeptide chain |pmid=14816373 |doi=10.1073/pnas.37.4.205 |pmc=1063337}}</ref>. These secondary structures are defined by patterns of hydrogen bonds between the main-chain peptide groups. They have a regular geometry, being constrained to specific values of the dihedral angles ψ and φ on the Ramachandran plot. Both the alpha helix and the beta-sheet represent a way of saturating all the hydrogen bond donors and acceptors in the peptide backbone. Some parts of the protein are ordered but do not form any regular structures. They should not be confused with random coil, an unfolded polypeptide chain lacking any fixed three-dimensional structure. Several sequential secondary structures may form a "supersecondary unit".<ref name="ChiangYS2007">{{Cite journal|author=Chiang YS, Gelfand TI, Kister AE, Gelfand IM |title=New classification of supersecondary structures of sandwich-like proteins uncovers strict patterns of strand assemblage. |journal=Proteins. |volume=68 |issue=4 |pages=915–921 |year=2007 |pmid=17557333 |doi=10.1002/prot.21473}}</ref> [[Image:beta-meander1.png|right|200px|thumb|<div align="center">'''Beta-meander motif'''<br/>Portion of outer surface Protein A of Borrelia burgdorferi complexed with a murine monoclonal antibody.<br/></div>]] Amino acids vary in their ability to form the various secondary structure elements. Proline and glycine are sometimes known as "helix breakers" because they disrupt the regularity of the α helical backbone conformation; however, both have unusual conformational abilities and are commonly found in turns. Amino acids that prefer to adopt helical conformations in proteins include methionine, alanine, leucine, glutamate and lysine ("MALEK" in amino-acid 1-letter codes); by contrast, the large aromatic residues (tryptophan, tyrosine and phenylalanine) and Cβ-branched amino acids (isoleucine, valine, and threonine) prefer to adopt β-strand conformations. However, these preferences are not strong enough to produce a reliable method of predicting secondary structure from sequence alone.Secondary structure in proteins consists of local inter-residue interactions mediated by hydrogen bonds, or not. The most common secondary structures are alpha helices and beta sheets. Other helices, such as the 310 helix and π helix, are calculated to have energetically favorable hydrogen-bonding patterns but are rarely if ever observed in natural proteins except at the ends of α helices due to unfavorable backbone packing in the center of the helix<ref>http://en.wikipedia.org/w/index.php?title=Protein_secondary_structure&oldid=406816422</ref>. '''α helix''' The amino acids in an α helix are arranged in a right-handed helical structure where each amino acid residue corresponds to a 100° turn in the helix (i.e., the helix has 3.6 residues per turn), and a translation of 1.5 Å (0.15 nm) along the helical axis. (Short pieces of left-handed helix sometimes occur with a large content of achiral glycine amino acids, but are unfavorable for the other normal, biological L-amino acids.) The pitch of the alpha-helix (the vertical distance between one consecutive turn of the helix) is 5.4 Å (0.54 nm) which is the product of 1.5 and 3.6. What is most important is that the N-H group of an amino acid forms a hydrogen bond with the C=O group of the amino acid four residues earlier; this repeated hydrogen bonding is the most prominent characteristic of an α-helix. Official international nomenclature specifies two ways of defining α-helices, rule 6.2 in terms of repeating φ,ψ torsion angles and rule 6.3 in terms of the combined pattern of pitch and hydrogen bonding. Different amino-acid sequences have different propensities for forming α-helical structure. Methionine, alanine, leucine, uncharged glutamate, and lysine ("MALEK" in the amino-acid 1-letter codes) all have especially high helix-forming propensities, whereas proline and glycine have poor helix-forming propensities. Proline either breaks or kinks a helix, both because it cannot donate an amide hydrogen bond (having no amide hydrogen), and also because its sidechain interferes sterically with the backbone of the preceding turn - inside a helix, this forces a bend of about 30° in the helix axis. However, proline is often seen as the first residue of a helix, presumably due to its structural rigidity. At the other extreme, glycine also tends to disrupt helices because its high conformational flexibility makes it entropically expensive to adopt the relatively constrained α-helical structure<ref>http://en.wikipedia.org/w/index.php?title=Alpha_helix&oldid=423162580</ref>. [[Image:Beta hairpin.png|thumb|right|130px|Representation of a beta hairpin]] [[Image:Anthrax toxin protein key motif.svg|right|thumb|200px|Greek-key motif in protein structure.]] '''β sheet''' The first β sheet structure was proposed by William Astbury in the 1930s. He proposed the idea of hydrogen bonding between the peptide bonds of parallel or antiparallel extended β strands. However, Astbury did not have the necessary data on the bond geometry of the amino acids in order to build accurate models, especially since he did not then know that the peptide bond was planar. A refined version was proposed by Linus Pauling and Robert Corey in 1951. The β sheet (also β-pleated sheet) is the second form of regular secondary structure in proteins, only somewhat less common than alpha helix. Beta sheets consist of beta strands connected laterally by at least two or three backbone hydrogen bonds, forming a generally twisted, pleated sheet. A beta strand (also β strand) is a stretch of polypeptide chain typically 3 to 10 amino acids long with backbone in an almost fully extended conformation. A very simple structural motif involving β sheets is the β hairpin, in which two antiparallel strands are linked by a short loop of two to five residues, of which one is frequently a glycine or a proline, both of which can assume the unusual dihedral-angle conformations required for a tight turn. However, individual strands can also be linked in more elaborate ways with long loops that may contain alpha helices or even entire protein domains<ref>http://en.wikipedia.org/w/index.php?title=Beta_sheet&oldid=425195965</ref>. ''Greek key motif'' The Greek key motif consists of four adjacent antiparallel strands and their linking loops. It consists of three antiparallel strands connected by hairpins, while the fourth is adjacent to the first and linked to the third by a longer loop. This type of structure forms easily during the protein folding process.<ref>[http://swissmodel.expasy.org/course/text/chapter4.htm Tertiary Protein Structure and Folds: section 4.3.2.1]. From [http://swissmodel.expasy.org/course/ Principles of Protein Structure, Comparative Protein Modelling, and Visualisation]</ref><ref name="pmid8506258">{{cite journal | author = Hutchinson EG, Thornton JM | title = The Greek key motif: extraction, classification and analysis | journal = Protein Eng. | volume = 6 | issue = 3 | pages = 233–45 | date = April 1993 | pmid = 8506258 | doi = 10.1093/protein/6.3.233 | url = | issn = }}</ref> It was named after a pattern common to Greek ornamental artwork (see meander (art))<ref>http://en.wikipedia.org/w/index.php?title=Beta_sheet&oldid=425195965</ref>. ''The β-&alpha;-β motif'' Due to the chirality of their component amino acids, all strands exhibit a "right-handed" twist evident in most higher-order β sheet structures. In particular, the linking loop between two parallel strands almost always has a right-handed crossover chirality, which is strongly favored by the inherent twist of the sheet. This linking loop frequently contains a helical region, in which case it is called a β-α-β motif. A closely related motif called a β-α-β-α motif forms the basic component of the most commonly observed protein tertiary structure, the TIM barrel<ref>http://en.wikipedia.org/w/index.php?title=Beta_sheet&oldid=425195965</ref>. ''β-meander motif'' A simple supersecondary protein topology composed of 2 or more consecutive antiparallel β-strands linked together by hairpin loops.<ref>[http://scop.mrc-lmb.cam.ac.uk/scop/data/scop.b.c.bbf.html SCOP: Fold: WW domain-like<!-- Bot generated title -->]</ref><ref>[http://www.cryst.bbk.ac.uk/PPS2/course/section9/sss/super2.html PPS '96 - Super Secondary Structure<!-- Bot generated title -->]</ref> This motif is common in β-sheets and can be found in several structural architectures including β-barrels and β-propellers<ref>http://en.wikipedia.org/w/index.php?title=Beta_sheet&oldid=425195965</ref>. [[Image:5CPAgood.png|right|thumb|200px|<div align="center">'''Psi-loop motif'''<br/>Portion of Carboxypeptidase A.<br/></div>]] ''Psi-loop motif'' The psi-loop, Ψ-loop, motif consists of two antiparallel strands with one strand in between that is connected to both by hydrogen bonds.<ref>{{cite journal |last=Hutchinson |first=E. |authorlink= |coauthors=Thornton, J. |year=1996 |month= |title=PROMOTIF—A program to identify and analyze structural motifs in proteins |journal=Protein Science |volume=5 |issue=2 |pages=212–220 |pmid=8745398 |url= |accessdate= |quote= |pmc=2143354 |doi=10.1002/pro.5560050204 }}</ref> There are four possible strand topologies for single Ψ-loops as cited by Hutchinson ''et al.'' (1990). This motif is rare as the process resulting in its formation seems unlikely to occur during protein folding. The Ψ-loop was first identified in the aspartic protease family.<ref name="pmid2281084">{{cite journal | author = Hutchinson EG, Thornton JM | title = HERA--a program to draw schematic diagrams of protein secondary structures | journal = Proteins | volume = 8 | issue = 3 | pages = 203–12 | year = 1990 | pmid = 2281084 | doi = 10.1002/prot.340080303 | url = | issn = }}</ref> '''Coiled coils''' The possibility of coiled coils for α-keratin was proposed by Francis Crick in 1952 as well as mathematical methods for determining their structure. Remarkably, this was soon after the structure of the alpha helix was suggested in 1951 by Linus Pauling and coworkers. Coiled coils usually contain a repeated pattern, ''hxxhcxc'', of hydrophobic (h) and charged (c) amino-acid residues, referred to as a heptad repeat. The positions in the heptad repeat are usually labeled abcdefg, where a and d are the hydrophobic positions, often being occupied by isoleucine, leucine or valine. Folding a sequence with this repeating pattern into an alpha-helical secondary structure causes the hydrophobic residues to be presented as a 'stripe' that coils gently around the helix in left-handed fashion, forming an amphipathic structure. The most favorable way for two such helices to arrange themselves in the water-filled environment of the cytoplasm is to wrap the hydrophobic strands against each other sandwiched between the hydrophilic amino acids. It is thus the burial of hydrophobic surfaces, that provides the thermodynamic driving force for the oligomerization. The packing in a coiled-coil interface is exceptionally tight, with almost complete van der Waals contact between the side chains of the a and d residues. This tight packing was originally predicted by '''Francis Crick in 1952''' and is referred to as Knobs into holes packing. The α-helices may be parallel or anti-parallel, and usually adopt a left-handed super-coil. Although disfavored, a few right-handed coiled coils have also been observed in nature and in designed proteins<ref>http://en.wikipedia.org/w/index.php?title=Coiled_coil&oldid=420935661</ref>. {| class="wikitable" |+ Structural features of the three major forms of protein helices<ref>{{cite web |url=http://www.biomed.curtin.edu.au/biochem/tutorials/prottute/helices.htm |title=Interactive Protein Structure Tutorial |author=Steven Bottomley |authorlink=http://www.biomed.curtin.edu.au/profile.php?person_id=264 |year=2004 |accessdate=January 9, 2011 }}</ref> !Geometry attribute !&alpha;-helix !3<sub>10</sub> helix !&pi;-helix |- |Residues per turn ||align="right"| 3.6 ||align="right"| 3.0 ||align="right"| 4.4 |- |Translation per residue ||align="right"| 1.5Å||align="right"| 2.0Å ||align="right"| 1.1Å |- |Radius of helix ||align="right"| 2.3Å||align="right"| 1.9Å ||align="right"| 2.8Å |- |Pitch ||align="right"| 5.4Å ||align="right"| 6.0Å <!-- 3.0 r/t * 2.0Å trans --> ||align="right"|4.8Å <!-- 4.4 r/t * 1.1Å trans --> |} [[Image:ProteinStructures.png|thumb|The four levels of protein structure, from top to bottom: primary structure, secondary structure (β-sheet left, right α-helix), tertiary and quartary structure.]] ===Tertiary structure of protein=== Tertiary structure is considered to be largely determined by the protein's primary structure - the sequence of amino acids of which it is composed. Efforts to predict tertiary structure from the primary structure are known generally as protein structure prediction. However, the environment in which a protein is synthesized and allowed to fold are significant determinants of its final shape and are usually not directly taken into account by current prediction methods. In globular proteins, tertiary interactions are frequently stabilized by the sequestration of hydrophobic amino acid residues in the protein core, from which water is excluded, and by the consequent enrichment of charged or hydrophilic residues on the protein's water-exposed surface. In secreted proteins that do not spend time in the cytoplasm, disulfide bonds between cysteine residues help to maintain the protein's tertiary structure. A variety of common and stable tertiary structures appear in a large number of proteins that are unrelated in both function and evolution - for example, many proteins are shaped like a TIM barrel, named for the enzyme triosephosphateisomerase. Another common structure is a highly stable dimeric coiled coil structure composed of 2-7 alpha helices. The majority of protein structures known to date have been solved with the experimental technique of X-ray crystallography, which typically provides data of high resolution but provides no time-dependent information on the protein's conformational flexibility. A second common way of solving protein structures uses NMR, which provides somewhat lower-resolution data in general and is limited to relatively small proteins, but can provide time-dependent information about the motion of a protein in solution. Dual polarisation interferometry is a time resolved analytical method for determining the overall conformation and conformational changes in surface captured proteins providing complementary information to these high resolution methods. More is known about the tertiary structural features of soluble globular proteins than about membrane proteins because the latter class is extremely difficult to study using these methodshttp://en.wikipedia.org/w/index.php?title=Protein_tertiary_structure&oldid=422486540. ===Quartary structure of proteins=== Several proteins are actually assemblies of more than '''one polypeptide chain''', which in the context of the larger assemblage are known as protein subunits. In addition to the tertiary structure of the subunits, multiple-subunit proteins possess a quartary structure, which is the arrangement into which the subunits assemble. Enzymes composed of subunits with diverse functions are sometimes called holoenzymes, in which some parts may be known as regulatory subunits and the functional core is known as the catalytic subunit. Examples of proteins with quartary structure include hemoglobin, DNA polymerase, and ion channels. Other assemblies referred to instead as multiprotein complexes also possess quaternary structure. Examples include '''nucleosomes and microtubules'''. Changes in quartary structure can occur through conformational changes within individual subunits or through reorientation of the subunits relative to each other. It is through such changes, which underlie cooperativity and allostery in "multimeric" enzymes, that many proteins undergo regulation and perform their physiological function. The above definition follows a classical approach to biochemistry, established at times when the distinction between a protein and a functional, proteinaceous unit was difficult to elucidate. More recently, people refer to protein-protein interaction when discussing quartary structure of proteins and consider all assemblies of proteins as protein complexes. ==Types of protein== ===Conjugated protein=== A conjugated protein is a protein that functions in interaction with other chemical groups attached by covalent bonds or by weak interactions. Many proteins contain only amino acids and no other chemical groups, and they are called simple proteins. However, other kind of proteins yield, on hydrolysis, some other chemical component in addition to amino acids and they are called conjugated proteins. The nonamino part of a conjugated protein is usually called its prosthetic group. Most prosthetic groups are formed from vitamins. Conjugated proteins are classified on the basis of the chemical nature of their prosthetic groups. Some examples of conjugated proteins are ====Lipoproteins==== A lipoprotein is a biochemical assembly that contains both '''proteins''' and '''lipids''' water-bound to the proteins. Many enzymes, transporters, structural proteins, antigens, adhesins and toxins are lipoproteins. Examples include the high density (HDL) and low density (LDL) lipoproteins which enable fats to be carried in the blood stream, the transmembrane proteins of the mitochondrion and the chloroplast, and bacterial lipoproteins. ====Glycoproteins==== Glycoproteins are proteins that contain oligosaccharide chains (glycans) covalently attached to polypeptide side-chains. The carbohydrate is attached to the protein in a cotranslational or posttranslational modification. This process is known as glycosylation. In proteins that have segments extending extracellularly, the extracellular segments are often glycosylated. Glycoproteins are often important integral membrane proteins, where they play a role in cell-cell interactions. Glycoproteins also occur in the cytosol, but their functions and the pathways producing these modifications in this compartment are less well-understood.'''Glycoproteins are generally the largest and most abundant group of conjugated proteins'''. They range from glycoproteins in cell surface membranes that constitute the glycocalyx, to important antibodies produced by leukocytes. ====phosphoproteins==== Phosphoproteins are proteins which are chemically bonded to a substance containing phosphoric acid (see phosphorylation for more). The category of organic molecules that includes Fc receptors, Ulks, Calcineurins, K chips, and urocortins. ====Metalloprotein==== A protein that contains a metal ion cofactor known as Metalloprotein. Metalloproteins have many different functions in cells, such as enzymes, transport and storage proteins, and signal transduction proteins. Indeed, about one quarter to one third of all proteins require metals to carry out their functions. The metal ion is usually coordinated by nitrogen, oxygen or sulfur atoms belonging to amino acids in the polypeptide chain and/or a macrocyclic ligand incorporated into the protein. The presence of the metal ion allows metalloenzymes to perform functions such as redox reactions that cannot easily be performed by the limited set of functional groups found in amino acids. [[Image:Zinc finger rendered.png|thumb|400px|right|Computer-generated 3-D representation of the zinc finger motif of proteins, consisting of an &alpha; helix and an antiparallel &beta; sheet. The zinc ion (green) is coordinated by two histidine residues and two cysteine residues.]] {| class="wikitable" |- !Metal Ion!!Examples of enzymes containing this ion |- ||Magnesium || Glucose 6-phosphatase<br/>Hexokinase<br>DNA polymerase |- ||Vanadium||vanabins |- ||Manganese|| Arginase |- ||Iron|| Catalase<BR>Hydrogenase<br>IRE-BP<br>Aconitase |- ||Nickel<ref>{{cite book|title=Nickel and Its Surprising Impact in Nature|editor=Astrid Sigel, Helmut Sigel and Roland K.O. Sigel|publisher=Wiley|date=2008|series=Metal Ions in Life Sciences|volume=2|isbn=978-0-470-01671-8}}</ref> || Urease<br>Hydrogenase |- ||Copper || Cytochrome oxidase<br>Laccase |- ||Zinc || Alcohol dehydrogenase<br>Carboxypeptidase<br>Aminopeptidase<br>Beta amyloid |- ||Molybdenum || Nitrate reductase |- ||Selenium || Glutathione peroxidase |- ||various||Metallothionein<br>Phosphatase |} ====hemoproteins==== A hemeprotein (or hemoprotein or haemoprotein), or heme protein, is a metalloprotein containing a heme prosthetic group, either covalently or noncovalently bound to the protein itself. The iron in the heme is capable of undergoing oxidation and reduction (usually to +2 and +3, though stabilized Fe+4 and even Fe+5 species are well known in the peroxidases). Hemoproteins probably evolved from a primordial strategy allowing to incorporate the iron (Fe) atom contained within the protoporphyrin IX ring of heme into proteins. This strategy has been maintained throughout evolution as it makes hemoproteins responsive to molecules that can bind divalent iron (Fe). These molecules included, but are probably not restricted to, gaseous molecules, such as oxygen (O2) nitric oxide (NO), carbon monoxide (CO) and hydrogen sulfide (H2S). Once bound to the prosthetic heme groups of hemoproteins these gaseous molecules can modulate the activity/function of those hemoproteins in a way that is said to afford signal transduction. Therefore, when produced in biologic systems (cells), these gaseous molecules are referred to as gasotransmitters.'''Haemoglobin contains the prosthetic group containing iron''', which is the haem. It is with in the haem group that carries the oxygen molecule through the binding of the oxygen molecule to the iron ion (Fe2+) found in the haem group<ref>http://en.wikipedia.org/w/index.php?title=Hemeprotein&oldid=410476687</ref>. '''Hemoglobin''' Hemoglobin (also spelled haemoglobin and abbreviated Hb or Hgb) is the iron-containing oxygen-transport metalloprotein in the red blood cells of all vertebrates (except the fish family Channichthyidae ) and the tissues of some invertebrates. Hemoglobin in the blood is what transports oxygen from the lungs or gills to the rest of the body (i.e. the tissues) where it releases the oxygen for cell use, and collects carbon dioxide to bring it back to the lungs. In mammals the protein makes up about 97% of the red blood cells' dry content, and around 35% of the total content (including water). Hemoglobin has an oxygen binding capacity of 1.34 ml O2 per gram of hemoglobin, which increases the total blood oxygen capacity seventyfold. Hemoglobin is involved in the transport of other gases: it carries some of the body's respiratory carbon dioxide (about 10% of the total) as carbaminohemoglobin, in which CO2 is bound to the globin protein. The molecule also carries the important regulatory molecule nitric oxide bound to a globin protein thiol group, releasing it at the same time as oxygen. Hemoglobin is also found outside red blood cells and their progenitor lines. Other cells that contain hemoglobin include the A9 dopaminergic neurons in the substantia nigra, macrophages, alveolar cells, and mesangial cells in the kidney. In these tissues, hemoglobin has a non-oxygen-carrying function as an antioxidant and a regulator of iron metabolism. Hemoglobin and hemoglobin-like molecules are also found in many invertebrates, fungi, and plants. In these organisms, hemoglobins may carry oxygen, or they may act to transport and regulate other things such as carbon dioxide, nitric oxide, hydrogen sulfide and sulfide. A variant of the molecule, called leghemoglobin, is used to scavenge oxygen, to keep it from poisoning anaerobic systems, such as nitrogen-fixing nodules of leguminous plants<ref>http://en.wikipedia.org/w/index.php?title=Hemoglobin&oldid=424939141</ref>. phytochromes, '''Cytochromes''' [[Image:Cytochrome c.png|thumb|250px|Cytochrome ''c'' with heme ''c''.]] Cytochromes are, in general, membrane-bound hemoproteins that contain heme groups and carry out electron transport. They are found either as monomeric proteins (e.g., cytochrome c) or as subunits of bigger enzymatic complexes that catalyze redox reactions. They are found in the mitochondrial inner membrane and endoplasmic reticulum of eukaryotes, in the chloroplasts of plants, in photosynthetic microorganisms, and in bacteria. {| class="wikitable" | '''Cytochromes ''' || '''Combination''' |- | ''a'' and ''a<sub>3</sub>'' || Cytochrome c oxidase ("Complex IV") with electrons delivered to complex by soluble cytochrome c (hence the name) |- | ''b'' and ''c<sub>1</sub>'' || Coenzyme Q - cytochrome c reductase ("Complex III") |- | ''b<sub>6</sub>'' and ''f'' || Plastoquinol—plastocyanin reductase |} [[Image:Rhodopsin 3D.jpeg|thumb|250px|3-dimensional structure of bovine rhodopsin. The seven transmembrane domains are shown in varying colors. The chromophore is shown in red.]] {| class="wikitable" | '''Type''' || '''prosthetic group''' |- | Cytochrome a || heme a |- | Cytochrome b || heme b |- | Cytochrome d || tetrapyrrolic chelate of iron |} ====Opsins==== Opsins are a group of light-sensitive 35-55 kDa membrane-bound G protein-coupled receptors of the retinylidene protein family found in photoreceptor cells of the retina. Five classical groups of opsins are involved in vision, mediating the conversion of a photon of light into an electrochemical signal, the first step in the visual transduction cascade. Another opsin found in the mammalian retina, melanopsin, is involved in circadian rhythms and pupillary reflex but not in image-forming. ====Flavoproteins==== Flavoproteins are proteins that contain a nucleic acid derivative of riboflavin: the flavin adenine dinucleotide (FAD) or flavin mononucleotide (FMN). Flavoproteins are involved in a wide array of biological processes, including, but by no means limited to, bioluminescence, removal of radicals contributing to oxidative stress, photosynthesis, DNA repair, and apoptosis. The spectroscopic properties of the flavin cofactor make it a natural reporter for changes occurring within the active site; this makes flavoproteins one of the most-studied enzyme families. ===Simple proteins=== The proteins which upon hydrolysis yield only amino acids are known as simple proteins. ====Albumin==== Albumin (Latin: albus, white) refers generally to any protein that is water soluble, which is moderately soluble in concentrated salt solutions, and experiences heat denaturation. They are commonly found in blood plasma, and are unique to other plasma proteins in that they are not glycosylated. Substances containing albumin, such as egg white, are called albuminoids. ====Globulin==== Globulin is one of the three types of serum proteins, the others being albumin and fibrinogen. Some globulins are produced in the liver, while others are made by the immune system. The term globulin encompasses a heterogeneous group of proteins with typical high molecular weight, and both solubility and electrophoretic migration rates lower than for albumin. ====Histones==== In biology, histones are highly alkaline proteins found in all eukaryotic cell nuclei and some archaea, which package and order the DNA into structural units called nucleosomes. They are the chief protein components of chromatin, acting as spools around which DNA winds, and play a role in gene regulation. ===Derived protein=== ====Peptones==== Peptones are derived from animal milk or meat digested by proteolytic digestion. In addition to containing small peptides, the resulting spray-dried material includes fats, metals, salts, vitamins and many other biological compounds. Peptone is used in nutrient media for growing bacteria and fungi ====Proteases==== Proteases occur naturally in all organisms. These enzymes are involved in a multitude of physiological reactions from simple digestion of food proteins to highly-regulated cascades (e.g., the blood-clotting cascade, the complement system, apoptosis pathways, and the invertebrate prophenoloxidase-activating cascade). Proteases can either break specific peptide bonds (limited proteolysis), depending on the amino acid sequence of a protein, or break down a complete peptide to amino acids (unlimited proteolysis). The activity can be a destructive change, abolishing a protein's function or digesting it to its principal components; it can be an activation of a function, or it can be a signal in a signaling pathway. ==Functions of protein== ===Protein as an Enzyme=== The best-known role of proteins in the cell is as enzymes, which catalyze chemical reactions. Enzymes are usually highly specific and accelerate only one or a few chemical reactions. Enzymes carry out most of the reactions involved in metabolism, as well as manipulating DNA in processes such as DNA replication, DNA repair, and transcription. Some enzymes act on other proteins to add or remove chemical groups in a process known as post-translational modification. About 4,000 reactions are known to be catalyzed by enzymes. The rate acceleration conferred by enzymatic catalysis is often enormous—as much as 1017-fold increase in rate over the uncatalyzed reaction in the case of orotate decarboxylase (78 million years without the enzyme, 18 milliseconds with the enzyme). The molecules bound and acted upon by enzymes are called substrates. Although enzymes can consist of hundreds of amino acids, it is usually only a small fraction of the residues that come in contact with the substrate, and an even smaller fraction—three to four residues on average—that are directly involved in catalysis. The region of the enzyme that binds the substrate and contains the catalytic residues is known as the active site<ref>http://en.wikipedia.org/w/index.php?title=Protein&oldid=422392976</ref>. ===Protein as cell signalling molecule=== Many proteins are involved in the process of cell signaling and signal transduction. Some proteins, such as insulin, are extracellular proteins that transmit a signal from the cell in which they were synthesized to other cells in distant tissues. Others are membrane proteins that act as receptors whose main function is to bind a signaling molecule and induce a biochemical response in the cell. Many receptors have a binding site exposed on the cell surface and an effector domain within the cell, which may have enzymatic activity or may undergo a conformational change detected by other proteins within the cell. Antibodies are protein components of adaptive immune system whose main function is to bind antigens, or foreign substances in the body, and target them for destruction. Antibodies can be secreted into the extracellular environment or anchored in the membranes of specialized B cells known as plasma cells. Whereas enzymes are limited in their binding affinity for their substrates by the necessity of conducting their reaction, antibodies have no such constraints. An antibody's binding affinity to its target is extraordinarily high. Many ligand transport proteins bind particular small biomolecules and transport them to other locations in the body of a multicellular organism. These proteins must have a high binding affinity when their ligand is present in high concentrations, but must also release the ligand when it is present at low concentrations in the target tissues. The canonical example of a ligand-binding protein is haemoglobin, which transports oxygen from the lungs to other organs and tissues in all vertebrates and has close homologs in every biological kingdom. Lectins are sugar-binding proteins which are highly specific for their sugar moieties. Lectins typically play a role in biological recognition phenomena involving cells and proteins. Receptors and hormones are highly specific binding proteins. Transmembrane proteins can also serve as ligand transport proteins that alter the permeability of the cell membrane to small molecules and ions. The membrane alone has a hydrophobic core through which polar or charged molecules cannot diffuse. Membrane proteins contain internal channels that allow such molecules to enter and exit the cell. Many ion channel proteins are specialized to select for only a particular ion; for example, potassium and sodium channels often discriminate for only one of the two ions<ref>http://en.wikipedia.org/w/index.php?title=Protein&oldid=422392976</ref>. ===Other functions=== Structural proteins confer stiffness and rigidity to otherwise-fluid biological components. Most structural proteins are fibrous proteins; for example, actin and tubulin are globular and soluble as monomers, but polymerize to form long, stiff fibers that comprise the cytoskeleton, which allows the cell to maintain its shape and size. Collagen and elastin are critical components of connective tissue such as cartilage, and keratin is found in hard or filamentous structures such as hair, nails, feathers, hooves, and some animal shells. Other proteins that serve structural functions are motor proteins such as myosin, kinesin, and dynein, which are capable of generating mechanical forces. These proteins are crucial for cellular motility of single celled organisms and the sperm of many multicellular organisms which reproduce sexually. They also generate the forces exerted by contracting muscles<ref>http://en.wikipedia.org/w/index.php?title=Protein&oldid=422392976</ref>. ==Protein structure determination== [[File:Myoglobin.png|thumb|left|Ribbon diagram of the structure of myoglobin, showing colored alpha helices. Such proteins are long, linear molecules with thousands of atoms; yet the relative position of each atom has been determined with sub-atomic resolution by X-ray crystallography. Since it is difficult to visualize all the atoms at once, the ribbon shows the rough path of the protein polymer from its N-terminus (blue) to its C-terminus (red).]] Around 90% of the protein structures available in the Protein Data Bank have been determined by X-ray crystallography. This method allows one to measure the 3D density distribution of electrons in the protein (in the crystallized state) and thereby infer the 3D coordinates of all the atoms to be determined to a certain resolution. Roughly 9% of the known protein structures have been obtained by Nuclear Magnetic Resonance techniques. The secondary structure composition can be determined via circular dichroism or dual polarisation interferometry. Cryo-electron microscopy has recently become a means of determining protein structures to high resolution (less than 5 angstroms or 0.5 nanometer) and is anticipated to increase in power as a tool for high resolution work in the next decade. This technique is still a valuable resource for researchers working with very large protein complexes such as virus coat proteins and amyloid fibers. ===X-ray crystallography=== X-ray crystallography of biological molecules took off with Dorothy Crowfoot Hodgkin, who solved the structures of cholesterol (1937), vitamin B12 (1945) and penicillin (1954), for which she was awarded the Nobel Prize in Chemistry in 1964. In 1969, she succeeded in solving the structure of insulin, on which she worked for over thirty years.<ref>{{cite journal|author=Crowfoot Hodgkin D|authorlink=Dorothy Crowfoot Hodgkin|year = 1935|title=X-ray Single Crystal Photographs of Insulin|journal=Nature|volume=135|page=591|doi=10.1038/135591a0}}</ref> X-ray crystallography is a method of determining the arrangement of atoms within a crystal, in which a beam of X-rays strikes a crystal and diffracts into many specific directions. Crystal structures of proteins (which are irregular and hundreds of times larger than cholesterol) began to be solved in the late 1950s, beginning with the structure of sperm whale myoglobin by Max Perutz and Sir John Cowdery Kendrew, for which they were awarded the Nobel Prize in Chemistry in 1962.<ref>{{Cite journal|doi=10.1038/181662a0|volume=181|issue=4610|page=662|author=Kendrew J. C. ''et al.''|authorlink=John Kendrew|title=A Three-Dimensional Model of the Myoglobin Molecule Obtained by X-Ray Analysis|journal=Nature|date = 1958-03-08|pmid=13517261}}</ref> Since that success, over 61840 X-ray crystal structures of proteins, nucleic acids and other biological molecules have been determined.<ref>{{cite web|url=http://www.rcsb.org/pdb/statistics/holdings.do|title=Table of entries in the PDB, arranged by experimental method}}</ref> For comparison, the nearest competing method in terms of structures analyzed is nuclear magnetic resonance (NMR) spectroscopy, which has resolved 8759 chemical structures.<ref>{{cite web|url=http://pdbbeta.rcsb.org/pdb/static.do?p=general_information/pdb_statistics/index.html|title=PDB Statistics|publisher=RCSB Protein Data Bank|accessdate = 2010-02-09}}</ref> Moreover, crystallography can solve structures of arbitrarily large molecules, whereas solution-state NMR is restricted to relatively small ones (less than 70 kDa). X-ray crystallography is now used routinely by scientists to determine how a pharmaceutical drug interacts with its protein target and what changes might improve it.<ref>{{cite journal|author=Scapin G|title=Structural biology and drug discovery|journal=Curr. Pharm. Des.|volume=12|page=2087|year=2006|pmid=16796557|doi=10.2174/138161206777585201|issue=17}}</ref> However, intrinsic membrane proteins remain challenging to crystallize because they require detergents or other means to solubilize them in isolation, and such detergents often interfere with crystallization. Such membrane proteins are a large component of the genome and include many proteins of great physiological importance, such as ion channels and receptors.<ref>{{cite journal|author=Lundstrom K|title=Structural genomics for membrane proteins|journal=Cell. Mol. Life Sci.|volume=63|page=2597|year=2006|pmid=17013556|doi=10.1007/s00018-006-6252-y|issue=22}}</ref><ref>{{cite journal|author=Lundstrom K|title=Structural genomics on membrane proteins: mini review|journal=Comb. Chem. High Throughput Screen.|volume=7|page=431|year=2004|pmid=15320710|issue=5}}</ref> ===Nuclear magnetic resonance spectroscopy or NMR=== Protein nuclear magnetic resonance spectroscopy (usually abbreviated protein NMR) is a field of structural biology in which NMR spectroscopy is used to obtain information about the structure and dynamics of proteins. The field was pioneered by Richard R. Ernst and Kurt Wüthrich[1], among others. Protein NMR techniques are continually being used and improved in both academia and the biotech industry. Structure determination by NMR spectroscopy usually consists of several following phases, each using a separate set of highly specialized techniques. The sample is prepared, resonances are assigned, restraints are generated and a structure is calculated and validated ==Hemoglobin and its structure== The oxygen-carrying protein hemoglobin was discovered by Hünefeld in 1840. In 1851, Otto Funke published a series of articles in which he described growing hemoglobin crystals by successively diluting red blood cells with a solvent such as pure water, alcohol or ether, followed by slow evaporation of the solvent from the resulting protein solution. Hemoglobin's reversible oxygenation was described a few years later by Felix Hoppe-Seyler. In 1959 Max Perutz determined the molecular structure of hemoglobin by X-ray crystallography. This work resulted in his sharing with John Kendrew the 1962 Nobel Prize in Chemistry. The role of hemoglobin in the blood was elucidated by physiologist Claude Bernard. The name hemoglobin is derived from the words heme and globin, reflecting the fact that each subunit of hemoglobin is a globular protein with an embedded heme (or haem) group. Each heme group contains one iron atom, that can bind one oxygen molecule through ion-induced dipole forces. The most common type of hemoglobin in mammals contains four such subunits. Hemoglobin (also spelled haemoglobin and abbreviated Hb or Hgb) is the iron-containing oxygen-transport metalloprotein in the red blood cells of all vertebrates[1] (except the fish family Channichthyidae ) and the tissues of some invertebrates. Hemoglobin in the blood is what transports oxygen from the lungs or gills to the rest of the body (i.e. the tissues) where it releases the oxygen for cell use, and collects carbon dioxide to bring it back to the lungs. In mammals the protein makes up about 97% of the red blood cells' dry content, and around 35% of the total content (including water). Hemoglobin has an oxygen binding capacity of 1.34 ml O2 per gram of hemoglobin, which increases the total blood oxygen capacity seventyfold compared to dissolved oxygen in blood. The mammalian hemoglobin molecule can bind (carry) up to four oxygen molecules<ref>http://en.wikipedia.org/w/index.php?title=Hemoglobin&oldid=424939141</ref>. Hemoglobin consists mostly of protein (the "globin" chains), and these proteins, in turn, are composed of sequences of amino acids. These sequences are linear, in the manner of letters in a written sentence or beads on a string. In all proteins, it is the variation in the type of amino acids in the protein sequence of amino acids, which determine the protein's chemical properties and function. This is true of hemoglobin, where the sequence of amino acids may affect crucial functions such as the protein's affinity for oxygen. There is more than one hemoglobin gene. The amino acid sequences of the globin proteins in hemoglobins usually differ between species, although the differences grow with the evolutionary distance between species. For example, the most common hemoglobin sequences in humans and chimpanzees are nearly identical, differing by only one amino acid in both the alpha and the beta globin protein chains. These differences grow larger between less closely related species. Even within a species, different variants of hemoglobin always exist, although one sequence is usually a "most common" one in each species. Mutations in the genes for the hemoglobin protein in a species result in hemoglobin variants. Many of these mutant forms of hemoglobin cause no disease. Some of these mutant forms of hemoglobin, however, cause a group of hereditary diseases termed the hemoglobinopathies. The best known hemoglobinopathy is sickle-cell disease, which was the first human disease whose mechanism was understood at the molecular level. A (mostly) separate set of diseases called thalassemias involves underproduction of normal and sometimes abnormal hemoglobins, through problems and mutations in globin gene regulation. All these diseases produce anemia<ref>http://en.wikipedia.org/w/index.php?title=Hemoglobin&oldid=424939141</ref>. Hemoglobin variants are a part of the normal embryonic and fetal development, but may also be pathologic mutant forms of hemoglobin in a population, caused by variations in genetics. Some well-known hemoglobin variants such as sickle-cell anemia are responsible for diseases, and are considered hemoglobinopathies. Other variants cause no detectable pathology, and are thus considered non-pathological variants<ref>http://en.wikipedia.org/w/index.php?title=Hemoglobin&oldid=424939141</ref>. ''In the embryo:'' Gower 1 (ζ2ε2) Gower 2 (α2ε2) (PDB 1A9W) Hemoglobin Portland (ζ2γ2) ''In the fetus:'' Hemoglobin F (α2γ2) (PDB 1FDH) ''In adults:'' Hemoglobin A (α2β2) (PDB 1BZ0) - The most common with a normal amount over 95% Hemoglobin A2 (α2δ2) - δ chain synthesis begins late in the third trimester and in adults, it has a normal range of 1.5-3.5% Hemoglobin F (α2γ2) - In adults Hemoglobin F is restricted to a limited population of red cells called F-cells. However, the level of Hb F can be elevated in persons with sickle-cell disease and beta-thalassemia. ''Variant forms that cause disease:'' Hemoglobin H (β4) - A variant form of hemoglobin, formed by a tetramer of β chains, which may be present in variants of α thalassemia. Hemoglobin Barts (γ4) - A variant form of hemoglobin, formed by a tetramer of γ chains, which may be present in variants of α thalassemia. Hemoglobin S (α2βS2) - A variant form of hemoglobin found in people with sickle cell disease. There is a variation in the β-chain gene, causing a change in the properties of hemoglobin, which results in sickling of red blood cells. Hemoglobin C (α2βC2) - Another variant due to a variation in the β-chain gene. This variant causes a mild chronic hemolytic anemia. Hemoglobin E (α2βE2) - Another variant due to a variation in the β-chain gene. This variant causes a mild chronic hemolytic anemia. Hemoglobin AS - A heterozygous form causing Sickle cell trait with one adult gene and one sickle cell disease gene Hemoglobin SC disease - Another heterozygous form with one sickle gene and another encoding Hemoglobin C. Variations in hemoglobin amino acid sequences, as with other proteins, may be adaptive. For example, recent studies have suggested genetic variants in deer mice that help explain how deer mice that live in the mountains are able to survive in the thin air that accompanies high altitudes. A researcher from the University of Nebraska-Lincoln found mutations in four different genes that can account for differences between deer mice that live in lowland prairies versus the mountains. After examining wild mice captured from both highlands and lowlands, it was found that: the genes of the two breeds are “virtually identical–except for those that govern the oxygen-carrying capacity of their hemoglobin”. “The genetic difference enables highland mice to make more efficient use of their oxygen”, since less is available at higher altitudes, such as those in the mountains. Mammoth hemoglobin featured mutations that allowed for oxygen delivery at lower temperatures, thus enabling mammoths to migrate to higher latitudes during the Pleistocene. {{quotation|[[Image:Autorecessive.svg|left|thumb|200px|Sickle-cell disease is inherited in the autosomal recessive pattern.]] [[Image:Sickle cell distribution.jpg|thumb|left|150px|Distribution of the sickle-cell trait shown in pink and purple]] [[Image:Malaria distribution.jpg|thumb|left|150px|Historical distribution of malaria (no longer endemic in Europe) shown in green]] [[Image:Paludisme - Frequence statistique.png|thumb|left|150px|Modern distribution of malaria]]'''Sickle-cell disease (SCD) or sickle-cell anaemia (or anemia; SCA) or drepanocytosis'''is an autosomal recessive genetic blood disorder, with overdominance, characterized by red blood cells that assume an abnormal, rigid, sickle shape. Sickling decreases the cells' flexibility and results in a risk of various complications. The sickling occurs because of a mutation in the haemoglobin gene. Life expectancy is shortened, with studies reporting an average life expectancy of 42 in males and 48 in females.Sickle-cell anaemia is caused by a point mutation in the β-globin chain of haemoglobin, causing the hydrophilic amino acid glutamic acid to be replaced with the hydrophobic amino acid valine at the sixth position. The β-globin gene is found on the short arm of chromosome 11. The association of two wild-type α-globin subunits with two mutant β-globin subunits forms haemoglobin S (HbS). Under low-oxygen conditions (being at high altitude, for example), the absence of a polar amino acid at position six of the β-globin chain promotes the non-covalent polymerisation (aggregation) of haemoglobin, which distorts red blood cells into a sickle shape and decreases their elasticity. The loss of red blood cell elasticity is central to the pathophysiology of sickle-cell disease. Normal red blood cells are quite elastic, which allows the cells to deform to pass through capillaries. In sickle-cell disease, low-oxygen tension promotes red blood cell sickling and repeated episodes of sickling damage the cell membrane and decrease the cell's elasticity. These cells fail to return to normal shape when normal oxygen tension is restored. As a consequence, these rigid blood cells are unable to deform as they pass through narrow capillaries, leading to vessel occlusion and ischaemia. The actual anaemia of the illness is caused by haemolysis, the destruction of the red cells inside the spleen, because of their misshape. Although the bone marrow attempts to compensate by creating new red cells, it does not match the rate of destruction. Healthy red blood cells typically live 90–120 days, but sickle cells only survive 10–20 days. Normally, humans have Haemoglobin A, which consists of two alpha and two beta chains, Haemoglobin A2, which consists of two alpha and two delta chains and Haemoglobin F, consisting of two alpha and two gamma chains in their bodies. Of these, Haemoglobin A makes up around 96-97% of the normal haemoglobin in humans. Sickle-cell gene mutation probably arose spontaneously in different geographic areas, as suggested by restriction endonuclease analysis. These variants are known as Cameroon, Senegal, Benin, Bantu and Saudi-Asian. Their clinical importance springs from the fact that some of them are associated with higher HbF levels, e.g., Senegal and Saudi-Asian variants, and tend to have milder disease.<ref name="pmid7505527">{{cite journal |author=Green NS, Fabry ME, Kaptue-Noche L, Nagel RL |title=Senegal haplotype is associated with higher HbF than Benin and Cameroon haplotypes in African children with sickle cell anemia |journal=Am. J. Hematol. |volume=44 |issue=2 |pages=145–6 |year=1993 |pmid=7505527 | doi = 10.1002/ajh.2830440214 |month=Oct |issn=0361-8609}}</ref> In people heterozygous for HgbS (carriers of sickling haemoglobin), the polymerisation problems are minor, because the normal allele is able to produce over 50% of the haemoglobin. In people homozygous for HgbS, the presence of long-chain polymers of HbS distort the shape of the red blood cell from a smooth doughnut-like shape to ragged and full of spikes, making it fragile and susceptible to breaking within capillaries. Carriers have symptoms only if they are deprived of oxygen (for example, while climbing a mountain) or while severely dehydrated. Under normal circumstances, these painful crises occur about 0.8 times per year per patient. The sickle-cell disease occurs when the seventh amino acid (if the initial methionine is counted), glutamic acid, is replaced by valine to change its structure and function. The gene defect is a known mutation of a single nucleotide ( single-nucleotide polymorphism - SNP) (A to T) of the β-globin gene, which results in glutamic acid being substituted by valine at position 6. Haemoglobin S with this mutation are referred to as HbS, as opposed to the normal adult HbA. The genetic disorder is due to the mutation of a single nucleotide, from a GAG to GTG codon mutation, becoming a GUG codon by transcription. This is normally a benign mutation, causing ''no'' apparent effects on the secondary, tertiary, or quaternary structure of haemoglobin in conditions of normal oxygen concentration. What it does allow for, under conditions of low oxygen concentration, is the polymerization of the HbS itself. The deoxy form of haemoglobin exposes a hydrophobic patch on the protein between the E and F helices. The hydrophobic residues of the valine at position 6 of the beta chain in haemoglobin are able to associate with the hydrophobic patch, causing haemoglobin S molecules to aggregate and form fibrous precipitates. The allele responsible for sickle-cell anaemia is autosomal recessive and can be found on the short arm of chromosome 11. A person that receives the defective gene from both father and mother develops the disease; a person that receives one defective and one healthy allele remains healthy, but can pass on the disease and is known as a carrier. If two parents who are carriers have a child, there is a 1-in-4 chance of their child developing the disease and a 1-in-2 chance of their child's being just a carrier. Since the gene is incompletely recessive, carriers can produce a few sickled red blood cells, not enough to cause symptoms, but enough to give resistance to malaria. Because of this, heterozygotes have a higher |fitness than either of the homozygotes. This is known as heterozygote advantage. Due to the adaptive advantage of the heterozygote, the disease is still prevalent, especially among people with recent ancestry in malaria-stricken areas, such as Africa, the Mediterranean, India and the Middle East.<ref name="pmid16001361">{{cite journal |author=Kwiatkowski DP |title=How malaria has affected the human genome and what human genetics can teach us about malaria |journal=Am. J. Hum. Genet. |volume=77 |issue=2 |pages=171–92 |year=2005 |pmid=16001361 |doi=10.1086/432519 |month=Aug |issn=0002-9297 |pmc=1224522}} {{PMC|1224522}}</ref> Malaria was historically endemic to southern Europe, but it was declared eradicated in the mid-20th century, with the exception of rare sporadic cases.<ref>{{cite journal |author=Ponçon N, Toty C, L'Ambert G, ''et al.'' |title=Biology and dynamics of potential malaria vectors in Southern France |journal=Malar. J. |volume=6 |issue= |pages=18 |year=2007 |pmid=17313664 |pmc=1808464 |doi=10.1186/1475-2875-6-18}}</ref> The malaria parasite has a complex life cycle and spends part of it in red blood cells. In a carrier, the presence of the malaria parasite causes the red blood cells with defective haemoglobin to rupture prematurely, making the plasmodium unable to reproduce. Further, the polymerization of Hb affects the ability of the parasite to digest Hb in the first place. Therefore, in areas where malaria is a problem, people's chances of survival actually increase if they carry sickle-cell trait (selection for the heterozygote). In the USA, where there is no endemic malaria, the prevalence of sickle-cell anaemia among blacks is lower (about 0.25%) than in West Africa (about 4.0%) and is falling. Without endemic malaria from Africa, the sickle cell mutation is purely disadvantageous and will tend to be selected out of the affected population. Another factor limiting the spread of sickle-cell genes in North America is the absence of cultural proclivities to polygamy.<ref>{{cite journal |author=Lesi FE, Bassey EE |title=Family study in sickle cell disease in Nigeria |journal=J Biosoc Sci |volume=4 |issue=3 |pages=307–13 |year=1972 |month=July |pmid=5041262 |doi=10.1017/S0021932000008622}}</ref> '''Inheritance''' Sickle-cell conditions are inherited from parents in much the same way as blood type, hair colour and texture, eye colour, and other physical traits. The types of haemoglobin a person makes in the red blood cells depend on what haemoglobin genes are inherited from his parents. If one parent has sickle-cell anaemia (SS) and the other has sickle-cell trait (AS), there is a 50% chance of a child's having sickle-cell disease (SS) and a 50% chance of a child's having sickle-cell trait (AS). When both parents have sickle-cell trait (AS),a child has a 25% chance (1 of 4) of sickle-cell disease (SS), as shown in the diagram above.}} [[Image:Heme b.svg|thumb|Heme b group]] Hemoglobin has a quaternary structure characteristic of many multi-subunit globular proteins. Most of the amino acids in hemoglobin form alpha helices, connected by short non-helical segments. Hydrogen bonds stabilize the helical sections inside this protein, causing attractions within the molecule, folding each polypeptide chain into a specific shape. Hemoglobin's quaternary structure comes from its four subunits in roughly a tetrahedral arrangement. In most vertebrates, the hemoglobin molecule is an assembly of four globular protein subunits. Each subunit is composed of a protein chain tightly associated with a non-protein heme group. Each protein chain arranges into a set of alpha-helix structural segments connected together in a globin fold arrangement, so called because this arrangement is the same folding motif used in other heme/globin proteins such as myoglobin. This folding pattern contains a pocket that strongly binds the heme group. A heme group consists of an iron (Fe) ion (charged atom) held in a heterocyclic ring, known as a porphyrin. This porphyrin ring consists of four pyrrole molecules cyclically linked together (by methene bridges) with the iron ion bound in the center. The iron ion, which is the site of oxygen binding, coordinates with the four nitrogens in the center of the ring, which all lie in one plane. The iron is bound strongly (covalently) to the globular protein via the imidazole ring of the F8 histidine residue (also known as the proximal histidine) below the porphyrin ring. A sixth position can reversibly bind oxygen by a coordinate covalent bond,[24] completing the octahedral group of six ligands. Oxygen binds in an "end-on bent" geometry where one oxygen atom binds Fe and the other protrudes at an angle. When oxygen is not bound, a very weakly bonded water molecule fills the site, forming a distorted octahedron. Even though carbon dioxide is carried by hemoglobin, it does not compete with oxygen for the iron-binding positions, but is actually bound to the protein chains of the structure. The iron ion may be either in the Fe2+ or in the Fe3+ state, but ferrihemoglobin (methemoglobin) (Fe3+) cannot bind oxygen. In binding, oxygen temporarily and reversibly oxidizes (Fe2+) to (Fe3+) while oxygen temporally turns into superoxide, thus iron must exist in the +2 oxidation state to bind oxygen. If superoxide ion associated to Fe3+ is protonated the hemoglobin iron will remain oxidized and incapable to bind oxygen. In such cases, the enzyme methemoglobin reductase will be able to eventually reactivate methemoglobin by reducing the iron center. In adult humans, the most common hemoglobin type is a tetramer (which contains 4 subunit proteins) called hemoglobin A, consisting of two α and two β subunits non-covalently bound, each made of 141 and 146 amino acid residues, respectively. This is denoted as α2β2. The subunits are structurally similar and about the same size. Each subunit has a molecular weight of about 17,000 daltons, for a total molecular weight of the tetramer of about 68,000 daltons (64,458 g/mol).[26] Thus, 1 g/dL = 0.01551 mmol/L. Hemoglobin A is the most intensively studied of the hemoglobin molecules. In human infants, the hemoglobin molecule is made up of 2 α chains and 2 gamma chains. The gamma chains are gradually replaced by β chains as the infant grows. The four polypeptide chains are bound to each other by salt bridges, hydrogen bonds, and the hydrophobic effect. There are two kinds of contacts between the α and β chains: α1β1 and α1β2. Oxygen Saturation In general, hemoglobin can be saturated with oxygen molecules (oxyhemoglobin), or desaturated with oxygen molecules (deoxyhemoglobin). Oxyhemoglobin Oxyhemoglobin is formed during physiological respiration when oxygen binds to the heme component of the protein hemoglobin in red blood cells. This process occurs in the pulmonary capillaries adjacent to the alveoli of the lungs. The oxygen then travels through the blood stream to be dropped off at cells where it is utilized in aerobic glycolysis and in the production of ATP by the process of oxidative phosphorylation. It does not, however, help to counteract a decrease in blood pH. Ventilation, or breathing, may reverse this condition by removal of carbon dioxide, thus causing a shift up in pH. Hemoglobin exists in two forms, a taut form (T) and a relaxed form (R). Various factors such as low pH, high CO2 and high 2,3 BPG at the level of the tissues favor the taut form, which has low oxygen affinity and releases oxygen in the tissues. The opposite of these aforementioned factors at the level of the lung capillaries favors the relaxed form which can better bind oxygen<ref>http://en.wikipedia.org/w/index.php?title=Hemoglobin&oldid=424939141</ref>. Deoxyhemoglobin Deoxyhemoglobin is the form of hemoglobin without the bound oxygen. The absorption spectra of oxyhemoglobin and deoxyhemoglobin differ. The oxyhemoglobin has significantly lower absorption of the 660 nm wavelength than deoxyhemoglobin, while at 940 nm its absorption is slightly higher. This difference is used for measurement of the amount of oxygen in patient's blood by an instrument called pulse oximeter. This difference also accounts for the presentation of cyanosis, the blue to purplish color that tissues develop during hypoxiaOxyhemoglobin is formed during physiological respiration when oxygen binds to the heme component of the protein hemoglobin in red blood cells. This process occurs in the pulmonary capillaries adjacent to the alveoli of the lungs. The oxygen then travels through the blood stream to be dropped off at cells where it is utilized in aerobic glycolysis and in the production of ATP by the process of oxidative phosphorylation. It does not, however, help to counteract a decrease in blood pH. Ventilation, or breathing, may<ref>http://en.wikipedia.org/w/index.php?title=Hemoglobin&oldid=424939141</ref>. ==References== {{reflist|2}} {{bookcat}} '''Bold text''' 83ubdidzwe6ph1d3mkf6r660497ih08 Principles of Biochemistry/Cell Metabolism III: Synthesis of protein 0 250237 4672098 4646434 2026-09-24T09:11:34Z R. Henrik Nilsson 3395618 refrences > references 4672098 wikitext text/x-wiki Protein synthesis is the process in which cells build proteins. The term is sometimes used to refer only to protein translation but more often it refers to a multi-step process, beginning with amino acid synthesis and transcription of nuclear DNA into messenger RNA, which is then used as input to translation. The cistron DNA is transcribed into a variety of RNA intermediates. The last version is used as a template in synthesis of a polypeptide chain. Proteins can often be synthesized directly from genes by translating mRNA. When a protein must be available on short notice or in large quantities, a protein precursor is produced. A proprotein is an inactive protein containing one or more inhibitory peptides that can be activated when the inhibitory sequence is removed by proteolysis during posttranslational modification. A preprotein is a form that contains a signal sequence (an N-terminal signal peptide) that specifies its insertion into or through membranes, i.e., targets them for secretion.The signal peptide is cleaved off in the endoplasmic reticulum. Preproproteins have both sequences (inhibitory and signal) still present. [[File:Insulin path.svg|right|thumb|350px|The bottom of this diagram shows the modification of [[primary structure]] of insulin, as described.]] For synthesis of protein, a succession of tRNA molecules charged with appropriate amino acids have to be brought together with an mRNA molecule and matched up by base-pairing through their anti-codons with each of its successive codons. The amino acids then have to be linked together to extend the growing protein chain, and the tRNAs, relieved of their burdens, have to be released. This whole complex of processes is carried out by a giant multimolecular machine, the ribosome, formed of two main chains of RNA, called ribosomal RNA (rRNA), and more than 50 different proteins. This molecular juggernaut latches onto the end of an mRNA molecule and then trundles along it, capturing loaded tRNA molecules and stitching together the amino acids they carry to form a new protein chain. Protein biosynthesis, although very similar, is different for prokaryotes and eukaryotes. ==Translation: The Synthesis of protein== The synthesis of proteins is known as translation. '''Translation generally occurs in the cytoplasm, where the ribosomes are located.''' Ribosomes are made of a small and large subunit that surround the mRNA. In translation, messenger RNA (mRNA) is decoded to produce a specific polypeptide according to the rules specified by the trinucleotide genetic code. This uses an mRNA sequence as a template to guide the synthesis of a chain of amino acids that form a protein. Translation proceeds in four phases: activation, initiation, elongation, and termination (all describing the growth of the amino acid chain, or polypeptide that is the product of translation). In activation, the correct amino acid (AA) is joined to the correct transfer RNA (tRNA). While this is not technically a step in translation, it is required for translation to proceed. The AA is joined by its carboxyl group to the 3' OH of the tRNA by an ester bond. When the tRNA has an amino acid linked to it, it is termed "charged". Initiation involves the small subunit of the ribosome binding to 5' end of mRNA with the help of initiation factors (IF), other proteins that assist the process. Elongation occurs when the next aminoacyl-tRNA (charged tRNA) in line binds to the ribosome along with GTP and an elongation factor. Termination of the polypeptide happens when the A site of the ribosome faces a '''stop codon (UAA, UAG, or UGA)'''. When this happens, no tRNA can recognize it, but releasing factor can recognize nonsense codons and causes the release of the polypeptide chain. The capacity of disabling or inhibiting translation in protein biosynthesis is used by antibiotics such as: anisomycin, cycloheximide, chloramphenicol, tetracycline, streptomycin, erythromycin, puromycin etc.<ref>[http://en.wikipedia.org/wiki/Protein_biosynthesis Protein Biosynthesis]</ref> Each protein has its own unique amino acid sequence that is specified by the nucleotide sequence of the gene encoding this protein. The genetic code is a set of three-nucleotide sets called codons and each three-nucleotide combination designates an amino acid, for example AUG (Adenine-Uracil-Guanine) is the code for methionine. Because DNA contains four nucleotides, the total number of possible codons is 64; hence, there is some redundancy in the genetic code, with some amino acids specified by more than one codon. Genes encoded in DNA are first transcribed into pre-messenger RNA (mRNA) by proteins such as RNA polymerase. Most organisms then process the pre-mRNA (also known as a primary transcript) using various forms of post-transcriptional modification to form the mature mRNA, which is then used as a template for protein synthesis by the ribosome. In prokaryotes the mRNA may either be used as soon as it is produced, or be bound by a ribosome after having moved away from the nucleoid. In contrast, eukaryotes make mRNA in the cell nucleus and then translocate it across the nuclear membrane into the cytoplasm, where protein synthesis then takes place. The rate of protein synthesis is higher in prokaryotes than eukaryotes and can reach up to 20 amino acids per second. We should always remember that following antibiotics inhibit the protein synthesis e.g. '''anisomycin, cycloheximide, chloramphenicol, tetracycline, streptomycin, erythromycin, puromycin''' etc. The mRNA is loaded onto the ribosome and is read three nucleotides at a time by matching each codon to its base pairing anticodon present on a transfer RNA (t-RNA) molecule, which carries the amino acid corresponding to the codon it recognizes. The enzyme aminoacyl tRNA synthetase "charges" the tRNA molecules with the correct amino acids. The growing polypeptide is often termed the nascent chain. Proteins are always biosynthesized from N-terminus to C-terminus. The size of a synthesized protein can be measured by the number of amino acids it contains and by its total molecular mass, which is normally reported in units of daltons (synonymous with atomic mass units), or the derivative unit '''Kilodalton (kDa)'''. '''Yeast proteins are on average 466 amino acids long and 53 kDa in mass.''' The largest known proteins are the '''titins''', a component of the muscle sarcomere, with a molecular mass of almost 3,000 kDa and a total length of almost 27,000 amino acids.<ref> [http://en.wikipedia.org/wiki/Protein Protein]</ref> Example of computational translation - notice the indication of (alternative) start-codons: <PRE> VIRTUAL RIBOSOME ---- Translation table: Standard SGC0 >Seq1 Reading frame: 1 M V L S A A D K G N V K A A W G K V G G H A A E Y G A E A L 5' ATGGTGCTGTCTGCCGCCGACAAGGGCAATGTCAAGGCCGCCTGGGGCAAGGTTGGCGGCCACGCTGCAGAGTATGGCGCAGAGGCCCTG 90 >>>...)))..............................................................................))) E R M F L S F P T T K T Y F P H F D L S H G S A Q V K G H G 5' GAGAGGATGTTCCTGAGCTTCCCCACCACCAAGACCTACTTCCCCCACTTCGACCTGAGCCACGGCTCCGCGCAGGTCAAGGGCCACGGC 180 ......>>>...))).......................................)))................................. A K V A A A L T K A V E H L D D L P G A L S E L S D L H A H 5' GCGAAGGTGGCCGCCGCGCTGACCAAAGCGGTGGAACACCTGGACGACCTGCCCGGTGCCCTGTCTGAACTGAGTGACCTGCACGCTCAC 270 ..................)))..................)))......))).........)))......)))......)))......... K L R V D P V N F K L L S H S L L V T L A S H L P S D F T P 5' AAGCTGCGTGTGGACCCGGTCAACTTCAAGCTTCTGAGCCACTCCCTGCTGGTGACCCTGGCCTCCCACCTCCCCAGTGATTTCACCCCC 360 ...)))...........................))).........))))))......))).............................. A V H A S L D K F L A N V S T V L T S K Y R * 5' GCGGTCCACGCCTCCCTGGACAAGTTCTTGGCCAACGTGAGCACCGTGCTGACCTCCAAATACCGTTAA 429 ...............))).........)))..................)))...............*** Annotation key: >>> : START codon (strict) ))) : START codon (alternative) *** : STOP </PRE> ==Ribosome== Ribosomes are the components of cells that make proteins from all amino acids. One of the central tenets of biology, often referred to as the "central dogma," is that DNA is used to make RNA, which, in turn, is used to make protein. The DNA sequence in genes is copied into a messenger RNA (mRNA). Ribosomes then read the information in this RNA and use it to create proteins. This process is known as translation; i.e., the ribosome "translates" the genetic information from RNA into proteins. Ribosomes do this by binding to an mRNA and using it as a template for the correct sequence of amino acids in a particular protein. The amino acids are attached to transfer RNA (tRNA) molecules, which enter one part of the ribosome and bind to the messenger RNA sequence. The attached amino acids are then joined together by another part of the ribosome. The ribosome moves along the mRNA, "reading" its sequence and producing a chain of amino acids. Ribosomes are made from complexes of RNAs and proteins. Ribosomes are divided into two subunits, one larger than the other. The smaller subunit binds to the mRNA, while the larger subunit binds to the tRNA and the amino acids. When a ribosome finishes reading a mRNA, these two subunits split apart. Ribosomes have been classified as ribozymes, since the ribosomal RNA seems to be most important for the peptidyl transferase activity that links amino acids together. Ribosomes from bacteria, archaea and eukaryotes (the three domains of life on Earth), have significantly different structures and RNA sequences. These differences in structure allow some antibiotics to kill bacteria by inhibiting their ribosomes, while leaving human ribosomes unaffected. The ribosomes in the mitochondria of eukaryotic cells resemble those in bacteria, reflecting the likely evolutionary origin of this organelle. '''The word ribosome comes from ribonucleic acid and the Greek: soma (meaning body)<ref>http://en.wikipedia.org/w/index.php?title=Ribosome&oldid=416005241</ref>.''' ===Structure of the Ribosome=== [[File:Peptide syn.png|thumb|350px|Ribosomes read the sequence of [[messenger RNA]]s and assemble [[protein]]s out of [[amino acid]]s bound to [[transfer RNA]]s.]] {{quotation|A svedberg (symbol S, sometimes Sv, not to be confused with Sv for the SI unit sievert as well as the non-SI sverdrup) is a non-SI physical unit used for sedimentation coefficients. It characterizes the behaviour of a particle type in sedimentation processes, notably centrifugation. The svedberg is technically a measure of time, and is defined as exactly 10-13 seconds (100 fs). The unit is named after the Swedish chemist Theodor Svedberg (1884-1971), winner of the Nobel prize in chemistry in 1926 for his work in the chemistry of colloids and his invention of the ultracentrifuge. Bigger particles tend to sediment faster and thus have higher svedberg values. Sedimentation coefficients are, however, not additive. Sedimentation rate does not depend only on the mass or volume of a particle, and when two particles bind together there is inevitably a loss of surface area. Thus when measured separately they will have svedberg values that may not add up to that of the bound particle. The svedberg is the most important measure used to distinguish ribosomes, which are important in phylogenetic studies.}} The ribosomal subunits of prokaryotes and eukaryotes are quite similar.The unit of measurement is the Svedberg unit, a measure of the rate of sedimentation in centrifugation rather than size and accounts for why fragment names do not add up (70S is made of 50S and 30S). '''Prokaryotes have 70S ribosomes, each consisting of a small (30S) and a large (50S) subunit.''' Their large subunit is composed of a 5S RNA subunit (consisting of 120 nucleotides), a 23S RNA subunit (2900 nucleotides) and 34 proteins. The 30S subunit has a 1540 nucleotide RNA subunit (16S) bound to 21 proteins. E'''ukaryotes have 80S ribosomes, each consisting of a small (40S) and large (60S) subunit.''' Their large subunit is composed of a 5S RNA (120 nucleotides), a 28S RNA (4700 nucleotides), a 5.8S subunit (160 nucleotides) and ~49 proteins. The 40S subunit has a 1900 nucleotide (18S) RNA and ~33 proteins. The ribosomes found in chloroplasts and mitochondria of eukaryotes also consist of large and small subunits bound together with proteins into one 70S particle. These organelles are believed to be descendants of bacteria (see Endosymbiotic theory) and as such their ribosomes are similar to those of bacteria. The various ribosomes share a core structure, which is quite similar despite the large differences in size. Much of the RNA is highly organized into various tertiary structural motifs, for example pseudoknots that exhibit coaxial stacking. The extra RNA in the larger ribosomes is in several long continuous insertions, such that they form loops out of the core structure without disrupting or changing it. All of the catalytic activity of the ribosome is carried out by the RNA; the proteins reside on the surface and seem to stabilize the structure<ref>http://en.wikipedia.org/w/index.php?title=Ribosome&oldid=416005241</ref>. The differences between the bacterial and eukaryotic ribosomes are exploited by pharmaceutical chemists to create antibiotics that can destroy a bacterial infection without harming the cells of the infected person. Due to the differences in their structures, the bacterial 70S ribosomes are vulnerable to these antibiotics while the eukaryotic 80S ribosomes are not. Even though mitochondria possess ribosomes similar to the bacterial ones, mitochondria are not affected by these antibiotics because they are surrounded by a double membrane that does not easily admit these antibiotics into the organelle. [[Image:Ribosome structure.png|frame|'''Figure :''' The large subunit red (1) and small subunit in blue(2)]] ''Ribogenesis in Prokaryotes'' There are 52 genes that encode the ribosomal proteins and they can be found in 20 operons within prokaryotic DNA. Regulation of ribosome synthesis hinges on the regulation of the rRNA itself.First, a reduction in aminoacyl-tRNA will cause the prokaryotic cell to respond by lowering transcription and translation. This occurs through a series of steps, beginning with stringent factor binding to ribosomes and catalyzing the reaction: GTP + ATP --> pppGpp + AMP The γ-phosphate is then removed and ppGpp will bind to and inhibit RNA polymerase. This binding causes a reduction in rRNA transcription. A reduced amount of rRNA means that ribosomal proteins (r-proteins) will be translated but will not have an rRNA to bind to. Instead, they will negatively feedback and bind to their own mRNA, repressing r-protein synthesis. Note that r-proteins preferentially bind to its complementary rRNA if it is present, rather than mRNA. The ribosome operons also include the genes for RNA polymerase and elongation factors (used in RNA translation). Regulation of all of these genes at once illustrate the coupling between transcription and translation in prokaryotes. ''Ribogenesis in Eukaryotes'' Ribosomal protein synthesis in eukaryotes occurs, like most protein synthesis, in the cytoplasm just outside the nucleus. Individual large and small units are synthesized and imported into the nucleus through nuclear pores. These pores have a diameter of 120 nm and import 560,000 ribosomal proteins per minute into the nucleus with active transport. See nuclear import for more about the movement of the ribosomal proteins into the nucleus. Ribosomal RNA (rRNA) is transcribed at the nucleolus, at a high speed, which contains all 45S rRNA genes. After transcription, the rRNA is put together with the ribosomal subunits to make a functioning ribosome<ref>http://en.wikipedia.org/w/index.php?title=Ribosome&oldid=416005241</ref>. ===Kozak consensus sequence=== [[File:TRNA-Phe yeast en.svg|thumb|300px|Secondary ''cloverleaf structure'' of tRNA<sup>Phe</sup> from yeast.]] Kozak consensus sequence on an mRNA molecule is recognized by the ribosome as the translational start site, from which a protein is coded by that mRNA molecule. The ribosome requires this sequence, or a possible variation to initiate translation. The Kozak sequence is not to be confused with the ribosomal binding site '''(RBS)''', that being either the 5' cap of a messenger RNA or an Internal Ribosome Entry Site (IRES). In vivo, this site is often not matched exactly on different mRNAs and the amount of protein synthesized from a given mRNA is dependent on the strength of the Kozak sequence. Some nucleotides in this sequence are more important than others: the AUG is most important because it is the actual initiation codon encoding a methionine amino acid at the N-terminus of the protein. (Rarely, CTG is used as an initiation codon, encoding a leucine instead of its typical methionine.) The A nucleotide of the "AUG" is referred to as number 1. For a 'strong' consensus, the nucleotides at positions +4 (i.e. G in the consensus) and -3 (i.e. either A or G in the consensus) relative to the number 1 nucleotide must both match the consensus (there is no number 0 position). An 'adequate' consensus has only 1 of these sites, while a 'weak' consensus has neither. The cc at -1 and -2 are not as conserved, but contribute to the overall strength. There is also evidence that a G in the -6 position is important in the initiation of translation. There are examples in vivo of each of these types of Kozak consensus, and they probably evolved as yet another mechanism of gene regulation. Lmx1b is an example of a gene with a weak Kozak consensus sequence. For initiation of translation from such a site, other features are required in the mRNA sequence in order for the ribosome to recognize the initiation codon<ref>http://en.wikipedia.org/w/index.php?title=Kozak_consensus_sequence&oldid=423149623</ref>. ==tRNA (Transfer RNA)== tRNA appears like cloverleaf structure. Its anticodon arm is a 5 base pair (bp) stem whose loop contains the anticodon while its D arm is a 4 bp stem ending in a loop that often contains dihydrouridine. T arm of tRNA is a 5 bp stem containing the sequence TΨC where Ψ is a pseudouridine.In eukaryotic cells, tRNAs are transcribed by RNA pol III as pre-tRNAs in the nucleus. tRNA is a small RNA molecule usually 73-95 nucleotides long. RNA polymerase III recognizes two internal promoter sequences (A-box B internal promoter) inside tRNA genes. The first promoter begins at nucleotide 8 of mature tRNAs and the second promoter is located 30-60 nucleotides downstream of the first promoter. The transcription terminates after a strech of four or more thymidines. Pre-tRNAs undergo extensive modifications inside the nucleus. Some pre-tRNAs contain introns; in bacteria these self-splice, whereas in eukaryotes and archaea they are removed by tRNA splicing endonuclease.The 5' sequence is removed by RNase P, whereas the 3' end is removed by the tRNase Z enzyme. A notable exception is in the archaeon Nanoarchaeum equitans which does not possess an RNase P enzyme and has a promoter placed such that transcription starts at the 5' end of the mature tRNA.. The non-templated 3' CCA tail is added by a nucleotidyl transferase. Before tRNAs are exported into the cytoplasm by Los1/Xpo-t, tRNAs are aminoacylated. The order of the processing events is not conserved. For example in yeast, the splicing is not carried out in the nucleus but at the cytoplasmic side of mitochondrial membranes.<ref>[http://en.wikipedia.org/wiki/Transfer_RNA Transfer RNA]</ref>An aminoacyl tRNA synthetase (aaRS) is an enzyme that catalyzes the esterification of a specific amino acid or its precursor to one of all its compatible cognate tRNAs to form an aminoacyl-tRNA. This is sometimes called "charging" the tRNA with the amino acid. Once the tRNA is charged, a ribosome can transfer the amino acid from the tRNA onto a growing peptide, according to the genetic code. There are two classes of aminoacyl tRNA synthetase: Class I has two highly conserved sequence motifs. It aminoacylates at the 2'-OH of an adenosine nucleotide, and is usually monomeric or dimeric (one or two subunits, respectively). Class II has three highly conserved sequence motifs. It aminoacylates at the 3'-OH of the same adenosine, and is usually dimeric or tetrameric (two or four subunits, respectively). Although phenylalanine-tRNA synthetase is class II, it aminoacylates at the 2'-OH. The amino acids are attached to the hydroxyl (-OH) group of the adenosine via the carboxyl (-COOH) group. Regardless of where the aminoacyl is initially attached to the nucleotide, the 2'-O-aminoacyl-tRNA will ultimately migrate to the 3' position via transesterification. Reaction: amino acid + ATP → aminoacyl-AMP + PPi aminoacyl-AMP + tRNA → aminoacyl-tRNA + AMP Sum of 1 and 2: amino acid + tRNA + ATP → aminoacyl-tRNA + AMP + PPi ==Synthesis of protein in Eukaryotes== [[Image:Eukaryotic initiation.png|thumb|right|600px|The process of initiation of translation in eukaryotes with eIF2 in light green. Other factors are shown too.]] ===Initiation=== Eukaryotic initiation factors (eIF) are proteins involved in the initiation phase of eukaryotic translation. They function in forming a complex with the 40S ribosomal subunit and Met-tRNAi called the 43S preinitation complex (PIC), recognizing the 5' cap structure of mRNA and recruiting the 43S PIC to mRNA, promoting ribosomal scanning of mRNA and regulating recognition of the AUG initiation codon, and joining of the 60S ribosomal subunit to create the 80S ribosome. There exist many more eukaryotic initiation factors than prokaryotic initiation factors due to greater biological complexity of eukaryotic cells. The protein RLI is known to have an essential, probably catalytic role in the formation of initiation complexes as well<Ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_initiation_factor&oldid=420870296</ref>. '''eIF4 (eIF4F)''' The eIF4 initiation factors include eIF4A, eIF4B, eIF4E, and eIF4G. eIF4F is often used to refer to the complex of eIF4A, eIF4E, and eIF4G. eIF4G is a scaffolding protein that interacts with eIF3 (see below), as well as the other members of the eIF4F complex. eIF4E recognizes and binds to the 5' cap structure of mRNA, while eIF4G binds to Poly(A)-binding protein which binds the poly(A) tail, circularizing and activating the bound mRNA. eIF4A – a DEAD box RNA helicase – is important for resolving mRNA secondary structures. eIF4B contains two RNA-binding domains – one non-specifically interacts with mRNA, whereas the second specifically binds the 18S portion of the small ribosomal subunit. It acts as an anchor, as well as a critical co-factor for eIF4A. It is a substrate of S6K, and, when phosphorylated, it promotes the formation of the pre-initiation complex. In vertebrates, eIF4H is an additional initiation factor with similar function to eIF4B<Ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_initiation_factor&oldid=420870296</ref>. '''eIF1 & eIF3''' eIF1, eIF1A, and eIF3, all bind to the ribosome subunit-mRNA complex. They have been implicated in preventing the large ribosomal subunit from binding the small subunit before it is ready to commence elongation. In mammals, eIF3 is the largest scaffolding initiation factor, made up of 13 subunits (a-m). It is roughly ~750 kDa and it controls the assembly of 40S ribosomal subunit on mRNA that have a 5' cap or an IRES. eIF3 uses the eIF4F complex or IRES (Internal Ribosomal Entry Site) from viruses to position the mRNA strand near the exit site of the 40S ribosome subunit, thus promoting the assembly of the pre-initiation complex. In many cancers, eIF3 is overexpressed. Under serum-deprived conditions (inactive state), eIF3 is bound to S6K1. On stimulation either by mitogens, growth factors, or drugs, mTOR/Raptor complex gets activated and, in turn, binds and phosphorylates S6K1 on T389 (linker region), causing a conformational change that causes the kinase S6K1 to dissociate from eIF3. The T389 phosphorylated S6k1 is then further phosphorylated by PDK1 on T229. This second phosphorylation fully activates the S6K1 kinase, which can then phosphorylate eIF4B, S6 and other protein targets<Ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_initiation_factor&oldid=420870296</ref>. '''eIF2''' eIF2 is a GTP-binding protein responsible for bringing the initiator tRNA to the P-site of the pre-initiation complex. It has specificity for the methionine-charged initiator tRNA, which is distinct from other methionine-charged tRNAs specific for elongation of the polypeptide chain. Once it has placed the initiator tRNA on the AUG start codon in the P-site, it hydrolyzes GTP into GDP, and dissociates. This hydrolysis, also signals for the dissociation of eIF3, eIF1, and eIF1A, and allows the large subunit to bind. This signals the beginning of elongation. eIF2 has three subunits, eIF2-α, β, and γ. The former is of particular importance for cells that may need to turn off protein synthesis globally. When phosphorylated, it sequesters eIF2B (not to be confused with beta), a GEF. Without this GEF, GDP cannot be exchanged for GTP, and translation is repressed. eIF2α-induced translation repression occurs in reticulocytes when starved for iron. In addition, protein kinase R (PKR) phosphorylates eIF2α when dsRNA is detected in many multicellular organisms, leading to cell death<Ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_initiation_factor&oldid=420870296</ref>. '''eIF5 & eIF5B''' eIF5A is a GTPase-activating protein, which helps the large ribosomal subunit associate with the small subunit. It is required for GTP-hydrolysis by eIF2 and contains the unusual amino acid hypusine. eIF5B is a GTPase, and is involved in assembly of the full ribosome (which requires GTP hydrolysis). '''eIF6''' eIF6 performs the same inhibition of ribosome assembly as eIF3, but binds with the large subunit. The process of initiation of translation in eukaryotes depend up on mRNA capping<Ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_initiation_factor&oldid=420870296</ref>. ====The cap-independent initiation==== The best studied example of the cap-independent mode of translation initiation in eukaryotes is the Internal Ribosome Entry Site (IRES) approach. What differentiates cap-independent translation from cap-dependent translation is that cap-independent translation does not require the ribosome to start scanning from the 5' end of the mRNA cap until the start codon. The ribosome can be trafficked to the start site by ITAFs (IRES trans-acting factors) bypassing the need to scan from the 5' end of the untranslated region of the mRNA. This method of translation has been recently discovered, and has found to be important in conditions that require the translation of specific mRNAs, despite cellular stress or the inability to translate most mRNAs. Examples include factors responding to apoptosis, stress-induced responses<ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_translation&oldid=420870435</ref>. ====Cap-dependent initiation==== Initiation of translation usually involves the interaction of certain key proteins with a special tag bound to the 5'-end of an mRNA molecule, the 5' cap. The protein factors bind the small ribosomal subunit (also referred to as the 40S subunit), and these initiation factors hold the mRNA in place. The eukaryotic Initiation Factor 3 (eIF3) is associated with the small ribosomal subunit, and plays a role in keeping the large ribosomal subunit from prematurely binding. eIF3 also interacts with the eIF4F complex which consists of three other initiation factors: eIF4A, eIF4E and eIF4G. eIF4G is a scaffolding protein which directly associates with both eIF3 and the other two components. eIF4E is the cap-binding protein. It is the rate-limiting step of cap-dependent initiation, and is often cleaved from the complex by some viral proteases to limit the cell's ability to translate its own transcripts. This is a method of hijacking the host machinery in favor of the viral (cap-independent) messages. eIF4A is an ATP-dependent RNA helicase, which aids the ribosome in resolving certain secondary structures formed by the mRNA transcript. There is another protein associated with the eIF4F complex called the Poly(A)-binding protein (PABP), which binds the poly-A tail of most eukaryotic mRNA molecules. This protein has been implicated in playing a role in circularization of the mRNA during translation. This pre-initiation complex (43S subunit, or the 40S and mRNA) accompanied by the protein factors move along the mRNA chain towards its 3'-end, scanning for the 'start' codon (typically AUG) on the mRNA, which indicates where the mRNA will begin coding for the protein. In eukaryotes and archaea, the amino acid encoded by the start codon is methionine. The initiator tRNA charged with Met forms part of the ribosomal complex and thus all proteins start with this amino acid (unless it is cleaved away by a protease in subsequent modifications). The Met-charged initiator tRNA is brought to the P-site of the small ribosomal subunit by eukaryotic Initiation Factor 2 (eIF2). It hydrolyzes GTP, and signals for the dissociation of several factors from the small ribosomal subunit which results in the association of the large subunit (or the 60S subunit). The complete ribosome (80S) then commences translation elongation, during which the sequence between the 'start' and 'stop' codons is translated from mRNA into an amino acid sequence—thus a protein is synthesized<ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_translation&oldid=420870435</ref>. Regulation of protein synthesis is dependent on phosphorylation of initiation factor eIF2 which is a part of the met-tRNAi complex. When large numbers of eIF2 are phosphorylated, protein synthesis is inhibited. This would occur if there is amino acid starvation or there has been a virus infection. However naturally a small percentage is of this initiation factor is phosphorylated. Another regulator is 4EBP which binds to the initiation factor eIF4E found on the 5’ cap on mRNA stopping protein synthesis. To oppose the effects of the 4EBP growth factors phosphorylate 4EBP reducing its affinity for eIF4E and permitting protein synthesis<ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_translation&oldid=420870435</ref>. ===Elongation=== Eukaryotic elongation factors are very similar to those in prokaryotes. Elongation in eukaryotes is carried out with two elongation factors: eEF-1 and eEF-2. The first is eEF-1, and has two subunits, α and βγ. α acts as counterpart to prokaryotic EF-Tu, mediating the entry of the aminoacyl tRNA into a free site of the ribosome. βγ acts as counterpart to prokaryotic EF-Ts, serving as the guanine nucleotide exchange factor for α, catalyzing the release of GDP from α. The second elongation factor is eEF-2, the counterpart to prokaryotic EF-G, catalyzing the translocation of the tRNA and mRNA down the ribosome at the end of each round of polypeptide elongation<ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_translation&oldid=420870435</ref>. At the end of the initiation step, the mRNA is positioned so that the next codon can be translated during the elongation stage of protein synthesis. The initiator tRNA occupies the P site in the ribosome, and the A site is ready to receive an aminoacyl-tRNA. During chain elongation, each additional amino acid is added to the nascent polypeptide chain in a three-step microcycle. The steps in this microcycle are (1) positioning the correct aminoacyl-tRNA in the A site of the ribosome, (2) forming the peptide bond and (3) shifting the mRNA by one codon relative to the ribosome. The translation machinery works relatively slowly compared to the enzyme systems that catalyze DNA replication. Proteins in prokaryotes are synthesized at a rate of only 18 amino acid residues per second, whereas bacterial replisomes synthesize DNA at a rate of 1000 nucleotides per second. This difference in rate reflects, in part, the difference between polymerizing four types of nucleotides to make nucleic acids and polymerizing 20 types of amino acids to make proteins. Testing and rejecting incorrect aminoacyl-tRNA molecules takes time and slows protein synthesis. The rate of transcription in prokaryotes is approximately 55 nucleotides per second, which corresponds to about 18 codons per second, or the same rate at which the mRNA is translated. In bacteria, translation initiation occurs as soon as the 5' end of an mRNA is synthesized, and translation and transcription are coupled. This tight coupling is not possible in eukaryotes because transcription and translation are carried out in separate compartments of the cell (the nucleus and cytoplasm). Eukaryotic mRNA precursors must be processed in the nucleus (e.g. capping, polyadenylation, splicing) before they are exported to the cytoplasm for translation<ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_translation&oldid=420870435</ref>. ===Termination=== Termination of elongation is dependent on eukaryotic release factors. The process of termination is similar to that of prokaryotic termination<ref>http://en.wikipedia.org/w/index.php?title=Eukaryotic_translation&oldid=420870435</ref>. ==Synthesis of protein in Prokaryotes== ===Initiation=== [[Image:Prokaryotic Translation Initiation.png|thumb|right|600px|The process of initiation of translation in prokaryotes.]] Initiation of translation in prokaryotes involves the assembly of the components of the translation system which are: the two [[ribosome|ribosomal]] subunits (50S & 30S subunits), the [[mRNA]] to be translated, the first (formyl) [[tRNA#Aminoacylation|aminoacyl tRNA]] (the tRNA charged with the first amino acid), GTP (as a source of energy), and three [[Prokaryotic initiation factors|initiation factors]] (Prokaryotic initiation factor-1 or IF1, Prokaryotic initiation factor-2 or IF2, and Prokaryotic initiation factor-3 or IF3 which help the assembly of the initiation complex.<ref name=" doi: 10.1007/s00018-010-0588-z">{{cite journal | unused_data = published online | author = Malys N, McCarthy JEG | title = Translation initiation: variations in the mechanism can be anticipated |journal = Cellular and Molecular Life Sciences | year = 2010 | doi =10.1007/s00018-010-0588-z }}</ref><ref>http://en.wikipedia.org/w/index.php?title=Prokaryotic_translation&oldid=424721560</ref> The ribosome has three active site|sites: the A site, the P site, and the E site. The ''A site'' is the point of entry for the aminoacyl tRNA (except for the first aminoacyl tRNA, [[FMET|fMet]]-tRNA<sub>f</sub><sup>Met</sup>, which enters at the P site). The ''P site'' is where the peptidyl tRNA is formed in the ribosome. And the ''E site'' which is the exit site of the now uncharged tRNA after it gives its amino acid to the growing peptide chain. ===Elongation=== Elongation of the polypeptide chain involves addition of amino acids to the carboxyl end of the growing chain. The growing protein exits the ribosome through the polypeptide exit tunnel in the large subunit<ref>Structure fo the ''E. coli'' protein-coducting channel bound to at translating ribosome, K. Mitra, et al. ''Nature'' (2005), vol 438, p 318</ref>.In prokaryotes, three elongation factors are required for translation: EF-Tu, EF-Ts, and EF-G. EF-Tu (elongation factor thermo unstable) mediates the entry of the aminoacyl tRNA into a free site of the ribosome. EF-Ts serves as the guanine nucleotide exchange factor for EF-Tu, catalyzing the release of GDP from EF-Tu. EF-G catalyzes the translocation of the tRNA and mRNA down the ribosome at the end of each round of polypeptide elongation. Elongation starts when the fmet-tRNA enters the P site, causing a conformational change which opens the A site for the new aminoacyl-tRNA to bind. This binding is facilitated by elongation factor-Tu (EF-Tu), a small GTPase. Now the P site contains the beginning of the peptide chain of the protein to be encoded and the A site has the next amino acid to be added to the peptide chain. The growing polypeptide connected to the tRNA in the P site is detached from the tRNA in the P site and a peptide bond is formed between the last amino acids of the polypeptide and the amino acid still attached to the tRNA in the A site. This process, known as ''peptide bond formation'', is catalyzed by a ribozyme (the [[23S ribosomal RNA]] in the 50S ribosomal subunit). Now, the A site has the newly formed peptide, while the P site has an uncharged tRNA (tRNA with no amino acids). In the final stage of elongation, ''translocation'', the ribosome moves 3 nucleotides towards the 3'end of mRNA. Since tRNAs are linked to mRNA by codon-anticodon base-pairing, tRNAs move relative to the ribosome taking the nascent polypeptide from the A site to the P site and moving the uncharged tRNA to the E exit site. This process is catalyzed by [[Prokaryotic elongation factors|elongation factor G]] (EF-G). <br> The ribosome continues to translate the remaining codons on the mRNA as more aminoacyl-tRNA bind to the A site, until the ribosome reaches a stop codon on mRNA(UAA, UGA, or UAG)<ref>http://en.wikipedia.org/w/index.php?title=Prokaryotic_translation&oldid=424721560</ref> '''EF-Tu''' EF-Tu (elongation factor thermo unstable) is one of the prokaryotic elongation factors. The prokaryotic factor EF-Tu mediates the entry of the aminoacyl tRNA into a free site of the ribosome. EF-Tu functions by binding an aminoacylated, or charged, tRNA molecule in the cytoplasm. This complex transiently enters the ribosome, with the tRNA anticodon domain associating with the mRNA codon in the ribosomal A site. If the codon-anticodon pairing is correct, EF-Tu hydrolyzes guanosine triphosphate (GTP) into guanosine diphosphate (GDP) and inorganic phosphate, and changes in conformation to dissociate from the tRNA molecule. The aminoacyl tRNA then fully enters the A site, where its amino acid is brought near the P-site polypeptide and the ribosome catalyzes the covalent transfer of the amino acid onto the polypeptide. EF-Tu contributes to translational accuracy in three ways. It delays GTP hydrolysis if the tRNA in the ribosome’s A site does not match the mRNA codon, thus preferentially increasing the likelihood for the incorrect tRNA to leave the ribosome. It also adds a second delay (regardless of tRNA matching) after freeing itself from tRNA, before the aminoacyl tRNA fully enters the A site. This delay period is a second opportunity for incorrectly-paired tRNA (and their bound amino acids) to move out of the A site before the incorrect amino acid is irreversibly added to the polypeptide chain. A third mechanism is the less well understood function of EF-Tu to crudely check amino acid-tRNA associations, and reject complexes where the amino acid is not bound to the correct tRNA coding for it. '''EF-Ts''' EF-Ts (elongation factor thermo stable) is one of the prokaryotic elongation factors. EF-Ts serves as the guanine nucleotide exchange factor for EF-Tu (elongation factor thermo unstable), catalyzing the release of guanosine diphosphate from EF-Tu. This enables EF-Tu to bind to a new guanosine triphosphate molecule, release EF-Ts, and go on to catalyze another aminoacyl tRNA addition. '''EF-G''' The factor EF-G catalyzes the translocation of the tRNA and mRNA down the ribosome at the end of each round of polypeptide elongation. Homologous to EF-Tu + tRNA, EF-G also binds to the ribosome in its GTP-bound state. When it associates with the A site, EF-G causes the tRNA previously occupying that site to occupy an intermediate A/P position (bound to the A site of the small ribosomal subunit and to the P site of the large subunit), and the tRNA in the P site is shifted to a P/E hybrid state. EF-G hydrolysis of GTP causes a conformation change that forces the A/P tRNA to fully occupy the P site, the P/E tRNA to fully occupy the E site (and exit the ribosome complex), and the mRNA to shift three nucleotides down relative to the ribosome due to its association with these tRNA molecules. The GDP-bound EF-G molecule then dissociates from the complex, leaving another free A-site where the elongation cycle can start again. Apart from its role in translocation, EF-G, working together with Ribosome Recycling Factor promotes ribosome recycling in a GTP-dependent manner [[File:Ribosomer i arbete.png|thumb|600px|right|'''Figure :''' Translation of mRNA (1) by a ribosome (2)(shown as <span style="color: #0000AA;">small (in blue color)</span> and <span style="color: #AA0000;">large(in red color)</span> subunits) into a <span style="color: #AA00AA;">polypeptide chain</span> (3). The ribosome begins at the start codon of mRNA (<span style="color: #00AA00;">AUG</span>) and ends at the stop codon (<span style="color: #00AA00;">UAG</span>).]] ===Termination=== Termination occurs when one of the three termination codons. moves into the A site. These codons are not recognized by any tRNAs. Instead, they are recognized by proteins called release factors, namely RF1 (recognizing the UAA and UAG stop codons) or RF2 (recognizing the UAA and UGA stop codons). These factors trigger the hydrolysis of the ester bond in peptidyl-tRNA and the release of the newly synthesized protein from the ribosome. A third release factor RF-3 catalyzes the release of RF-1 and RF-2 at the end of the termination process<ref>http://en.wikipedia.org/w/index.php?title=Prokaryotic_translation&oldid=424721560</ref> === Recycling === The post-termination complex formed by the end of the termination step consists of mRNA with the termination codon at the A-site, an uncharged tRNA in the P site, and the intact 70S ribosome. Ribosome recycling step is responsible for the disassembly of the post-termination ribosomal complex.<ref>Hirokawa et al. (2006) "''The Ribosome Recycling Step: Consensus or Controversy?''". Trends in Biochemical Sciences Vol. 31(3), 143-149.</ref> Once the nascent protein is released in termination, [[Ribosome Recycling Factor]] and Elongation Factor G (EF-G) function to release mRNA and tRNAs from ribosomes and dissociate the 70S ribosome into the 30S and 50S subunits. IF3 then replaces the deacylated tRNA releasing the mRNA. All translational components are now free for additional rounds of translation<ref>http://en.wikipedia.org/w/index.php?title=Prokaryotic_translation&oldid=424721560</ref> ===Polysomes=== Translation is carried out by more than one ribosome simultaneously. Because of the relatively large size of ribosomes, they can only attach to sites on mRNA 35 nucleotides apart. The complex of one mRNA and a number of ribosomes is called a polysome or polyribosome<ref>http://en.wikipedia.org/w/index.php?title=Prokaryotic_translation&oldid=424721560</ref> ==Drugs which inhibit protein synthesis== In general, protein synthesis inhibitors work at different stages of prokaryotic mRNA translation into proteins, like initiation, elongation (including aminoacyl tRNA entry, proofreading, peptidyl transfer, and ribosomal translocation) and termination: ''Earlier stages'' Rifampicin inhibits prokaryotic DNA transcription into mRNA by inhibiting DNA-dependent RNA polymerase by binding its beta-subunit. ''Initiation'' Linezolid acts at the initiation stage, probably by preventing the formation of the initiation complex, although the mechanism is not fully understood. ''Aminoacyl tRNA entry'' Tetracyclines and Tigecycline(a glycylcycline related to tetracyclines) block the A site on the ribosome, preventing the binding of aminoacyl tRNAs. ''Proofreading'' Aminoglycosides, among other potential mechanisms of action, interfere with the proofreading process, causing increased rate of error in synthesis with premature termination. ''Peptidyl transfer'' Chloramphenicol blocks the peptidyl transfer step of elongation on the 50S ribosomal subunit in both bacteria and mitochondria. Macrolides (as well as inhibiting ribosomal translocation and other potential mechanisms) bind to the 50s ribosomal subunits, inhibiting peptidyl transfer. Quinupristin/dalfopristin act synergistically, with dalfopristin, enhancing the binding of quinupristin, as well as inhibiting peptidyl transfer. Quinupristin binds to binds to a nearby site on the 50S ribosomal subunit and prevents elongation of the polypeptide, as well as causing incomplete chains to be released. ''Ribosomal translocation'' Clindamycin, among other potential mechanisms. Aminoglycosides and macrolides among other potential mechanisms of action, have evidence of inhibition of ribosomal translocation. Fusidic acid prevents the turnover of elongation factor G (EF-G) from the ribosome. ''Termination'' Puromycin has a structure similar to that of the tyrosinyl aminoacyl-tRNA. Thus, it binds to the ribosomal A site and participates in peptide bond formation, producing peptidyl-puromycin. However, it does not engage in translocation and quickly dissociates from the ribosome, causing a premature termination of polypeptide synthesis. Macrolides and clindamycin (both also having other potential mechanisms) cause premature dissociation of the peptidyl-tRNA from the ribosome. Streptogramins also cause premature release of the peptide chain. Protein synthesis inhibitors of unspecified mechanism Retapamulin ''Binding site'' The following antibiotics bind to the 30S subunit of the ribosome: Aminoglycosides Tetracyclines The following antibiotics bind to the 50S ribosomal subunit: Chloramphenicol Erythromycin Clindamycin Linezolid Telithromycin Streptogramins Retapamulin ==Posttranslational modification (PTM) of proteins== '''PTMs involving addition of functional groups''' '''PTMs involving addition by an enzyme in vivo''' acylation, e.g. O-acylation (esters), N-acylation (amides), S-acylation (thioesters) acetylation, the addition of an acetyl group, either at the N-terminus [2]of the protein or at lysine residues. See also histone acetylation. The reverse is called deacetylation. formylation lipoylation, attachment of a lipoate (C8) functional group myristoylation, attachment of myristate, a C14 saturated acid palmitoylation, attachment of palmitate, a C16 saturated acid alkylation, the addition of an alkyl group, e.g. methyl, ethyl methylation the addition of a methyl group, usually at lysine or arginine residues. The reverse is called demethylation. isoprenylation or prenylation, the addition of an isoprenoid group (e.g. farnesol and geranylgeraniol) farnesylation geranylgeranylation amidation at C-terminus amino acid addition arginylation, a tRNA-mediation addition polyglutamylation, covalent linkage of glutamic acid residues to tubulin and some other proteins.[6] (See tubulin polyglutamylase) polyglycylation, covalent linkage of one to more than 40 glycine residues to the tubulin C-terminal tail diphthamide formation gamma-carboxylation dependent on Vitamin K glycosylation, the addition of a glycosyl group to either asparagine, hydroxylysine, serine, or threonine, resulting in a glycoprotein. Distinct from glycation, which is regarded as a nonenzymatic attachment of sugars. polysialylation, addition of polysialic acid, PSA, to NCAM glypiation, glycosylphosphatidylinositol (GPI) anchor formation heme moiety may be covalently attached hydroxylation hypusine formation (on conserved lysine of [EIF5A] and aIF5a) iodination (e.g. of thyroid hormones) nucleotides or derivatives thereof may be covalently attached adenylation ADP-ribosylation flavin attachment nitrosylation S-glutathionylation oxidation phosphopantetheinylation, the addition of a 4'-phosphopantetheinyl moiety from coenzyme A, as in fatty acid, polyketide, non-ribosomal peptide and leucine biosynthesis phosphorylation, the addition of a phosphate group, usually to serine, tyrosine, threonine or histidine pyroglutamate formation sulfation, the addition of a sulfate group to a tyrosine. selenoylation (co-translational incorporation of selenium in selenoproteins) '''PTMs involving non-enzymatic additions in vivo''' glycation, the addition of a sugar molecule to a protein without the controlling action of an enzyme. '''PTMs involving non-enzymatic additions in vitro''' biotinylation, acylation of conserved lysine residues with a biotin appendage pegylation '''PTMs involving addition of other proteins or peptide'''s ISGylation, the covalent linkage to the ISG15 protein (Interferon-Stimulated Gene 15) SUMOylation, the covalent linkage to the SUMO protein (Small Ubiquitin-related MOdifier) ubiquitination, the covalent linkage to the protein ubiquitin. Neddylation, the covalent linkage to Nedd '''PTMs involving changing the chemical nature of amino acids''' citrullination, or deimination, the conversion of arginine to citrulline deamidation, the conversion of glutamine to glutamic acid or asparagine to aspartic acid eliminylation, the conversion to an alkene by beta-elimination of phosphothreonine and phosphoserine, or dehydration of threonine and serine, as well as by decarboxylation of cysteine. carbamylation, the conversion of lysine to homocitrulline '''PTMs involving structural changes''' disulfide bridges, the covalent linkage of two cysteine amino acids proteolytic cleavage, cleavage of a protein at a peptide bond racemization of proline by prolyl isomerase<ref>http://en.wikipedia.org/w/index.php?title=Posttranslational_modification&oldid=423971333</ref> ==References== {{reflist}} {{bookcat}} 6zuk0fzefbc0hq05ejdth3v42ladp9x Principles of Biochemistry/Signaling inside the Cell 0 250299 4672096 4098729 2026-09-24T09:10:43Z R. Henrik Nilsson 3395618 refrences > references 4672096 wikitext text/x-wiki Cell signaling is part of a complex system of communication that governs basic cellular activities and coordinates cell actions. The ability of cells to perceive and correctly respond to their microenvironment is the basis of development, tissue repair, and immunity as well as normal tissue homeostasis. Errors in cellular information processing are responsible for diseases such as cancer, autoimmunity, and diabetes. By understanding cell signaling, diseases may be treated effectively and, theoretically, artificial tissues may be created. Traditional work in biology has focused on studying individual parts of cell signaling pathways. Systems biology research helps us to understand the underlying structure of cell signaling networks and how changes in these networks may affect the transmission and flow of information. Such networks are complex systems in their organization and may exhibit a number of emergent properties including bistability and ultrasensitivity. Analysis of cell signaling networks requires a combination of experimental and theoretical approaches including the development and analysis of simulations and modelling<ref>http://en.wikipedia.org/w/index.php?title=Cell_signaling&oldid=424060709</ref>. ==Signaling pathways inside the Cell== [[Image:signal transduction pathways.png|thumb|900px|centre|Overview of signal transduction pathways.]] In some cases, receptor activation caused by ligand binding to a receptor is directly coupled to the cell's response to the ligand. For example, the neurotransmitter GABA can activate a cell surface receptor that is part of an ion channel. GABA binding to a GABA A receptor on a neuron opens a chloride-selective ion channel that is part of the receptor. GABA A receptor activation allows negatively-charged chloride ions to move into the neuron, which inhibits the ability of the neuron to produce action potentials. However, for many cell surface receptors, ligand-receptor interactions are not directly linked to the cell's response. The activated receptor must first interact with other proteins inside the cell before the ultimate physiological effect of the ligand on the cell's behavior is produced. Often, the behavior of a chain of several interacting cell proteins is altered following receptor activation. The entire set of cell changes induced by receptor activation is called a signal transduction mechanism or pathway.[citation needed] In the case of Notch-mediated signaling, the signal transduction mechanism can be relatively simple. As shown in Figure 2 (above, left), activation of Notch can cause the Notch protein to be altered by a protease. Part of the Notch protein is released from the cell surface membrane and can act to change the pattern of gene transcription in the cell nucleus. This causes the responding cell to make different proteins, resulting in an altered pattern of cell behavior. Cell signaling research involves studying the spatial and temporal dynamics of both receptors and the components of signaling pathways that are activated by receptors in various cell types.[citation needed] A more complex signal transduction pathway is shown in Figure 3. This pathway involves changes of protein-protein interactions inside the cell, induced by an external signal. Many growth factors bind to receptors at the cell surface and stimulate cells to progress through the cell cycle and divide. Several of these receptors are kinases that start to phosphorylate themselves and other proteins when binding to a ligand. This phosphorylation can generate a binding site for a different protein and thus induce protein-protein interaction. In Figure 3, the ligand (called epidermal growth factor (EGF)) binds to the receptor (called EGFR). This activates the receptor to phosphorylate itself. The phosphorylated receptor binds to an adaptor protein (GRB2), which couples the signal to further downstream signaling processes. For example, one of the signal transduction pathways that are activated is called the mitogen-activated protein kinase (MAPK) pathway. The signal transduction component labeled as "MAPK" in the pathway was originally called "ERK," so the pathway is called the MAPK/ERK pathway. The MAPK protein is an enzyme, a protein kinase that can attach phosphate to target proteins such as the transcription factor MYC and, thus, alter gene transcription and, ultimately, cell cycle progression. Many cellular proteins are activated downstream of the growth factor receptors (such as EGFR) that initiate this signal transduction pathway.[citation needed] Some signaling transduction pathways respond differently depending on the amount of signaling received by the cell. For instance, the hedgehog protein activates different genes, depending on the amount of hedgehog protein present.[citation needed] Complex multi-component signal transduction pathways provide opportunities for feedback, signal amplification, and interactions inside one cell between multiple signals and signaling pathways<ref>http://en.wikipedia.org/w/index.php?title=Cell_signaling&oldid=424060709</ref>. ==Intercellular communication== [[File:Notchccr.svg|thumb|[[Notch signaling|Notch]]-mediated juxtacrine signal between adjacent cells.]] '''Intracrine''' refers to a hormone that acts inside a cell. Steroid hormones act through intracellular (mostly nuclear) receptors and, thus, are considered to be intracrines. In contrast, peptide or protein hormones, in general, act as endocrines, autocrines, or paracrines by binding to their receptors present on the cell surface. Several peptide/protein hormones or their isoforms also act inside the cell through different mechanisms. These peptide/protein hormones, which have intracellular functions, are also called intracrines. The term 'intracrine' is thought to have been coined to represent peptide/protein hormones that also have intracellular actions. The biological effects produced by intracellular actions are referred as intracrine effects, whereas those produced by binding to cell surface receptors are called endocrine, autocrine, or paracrine effects, depending on the origin of the hormone. The intracrine effect of some of the peptide/protein hormones are similar to their endocrine, autocrine, or paracrine effects; however, these effects are different for some other hormones<ref>http://en.wikipedia.org/w/index.php?title=Intracrine&oldid=405759955</ref>. '''Autocrine''' signaling is a form of signaling in which a cell secretes a hormone or chemical messenger (called the autocrine agent) that binds to autocrine receptors on the same cell, leading to changes in the cell. This can be contrasted with paracrine signaling, intracrine signaling, or classical endocrine signaling.An example of an autocrine agent is the cytokine interleukin-1 in monocytes. When interleukin-1 is produced in response to external stimuli, it can bind to cell-surface receptors on the same cell that produced it. Another example occurs in activated T cell lymphocytes, i.e., when a T cell is induced to mature by binding to a peptide:MHC complex on a professional antigen-presenting cell and by the B7:CD28 costimulatory signal. Upon activation, "low-affinity" IL-2 receptors are replaced by "high-affinity" IL-2 receptors consisting of α, β, and γ chains. The cell then releases IL-2, which binds to its own new IL-2 receptors, causing self-stimulation and ultimately a monoclonal population of T cells. These T cells can then go on to perform effector functions such as macrophage activation, B cell activation, and cell-mediated cytoxicity. '''Juxtacrine''' signaling is a type of intercellular communication that is transmitted via oligosaccharide, lipid, or protein components of a cell membrane, and may affect either the emitting cell or the immediately-adjacent cells. It occurs between adjacent cells that possess broad patches of closely-opposed plasma membrane linked by transmembrane channels known as connexons. The gap between the cells can usually be between only 2 and 4 nm. Unlike other types of cell signaling (such as paracrine and endocrine), juxtacrine signaling requires physical contact between the two cells involved. Juxtacrine signaling has been observed for some growth factors, cytokine and chemokine cellular signals. '''Endocrine''' signals target distant cells. Endocrine cells produce hormones that travel through the blood to reach all parts of the body. [[File:MAPKpathway diagram.svg|thumb|right|Key components of the MAPK/ERK pathway. "P" represents [[phosphate]], which communicates the signal. Top, epidermal growth factor (EGF) binds to the EGF receptor (EGFR) in the cell membrane, starting the cascade of signals. Further downstream, phosphate signal activates MAPK (also known as ERK). Bottom, signal enters the cell nucleus and causes transcription of DNA, which is then expressed as protein.]] '''Paracrine''' signaling is a form of cell signaling in which the target cell is near ("para" = near) the signal-releasing cell.Some signaling molecules degrade very quickly, limiting the scope of their effectiveness to the immediate surroundings. Others affect only nearby cells because they are taken up quickly, leaving few to travel further, or because their movement is hindered by the extracellular-matrix.Growth factor and clotting factors are paracrine signaling agents. The local action of growth factor signaling plays an especially important role in the development of tissues. Also, retinoic acid, the active form of vitamin A, functions in a paracrine fashion to regulate gene expression during embryonic development in higher animals. In insects, Allatostatin controls growth though paracrine action on the corpora allata. In mature organisms, paracrine signaling is involved in responses to allergens, tissue repair, the formation of scar tissue, and blood clotting. ==MAPK/ERK pathway== The MAPK/ERK pathway is a chain of proteins in the cell that communicates a signal from a receptor on the surface of the cell to the DNA in the nucleus of the cell. The signal starts when a growth factor binds to the receptor on the cell surface and ends when the DNA in the nucleus expresses a protein and produces some change in the cell, such as cell division. The pathway includes many proteins, including MAPK (originally called ERK), which communicate by adding phosphate groups to a neighboring protein, which acts as an "on" or "off" switch. When one of the proteins in the pathway is mutated, it can be stuck in the "on" or "off" position, which is a necessary step in the development of many cancers. Components of the MAPK/ERK pathway were discovered when they were found in cancer cells. Drugs that reverse the "on" or "off" switch are being investigated as cancer treatments. Receptor-linked tyrosine kinases such as the epidermal growth factor receptor (EGFR) are activated by extracellular ligands. Binding of epidermal growth factor (EGF) to the EGFR activates the tyrosine kinase activity of the cytoplasmic domain of the receptor. The EGFR becomes phosphorylated on tyrosine residues. Docking proteins such as GRB2 contains an SH2 domain that binds to the phosphotyrosine residues of the activated receptor . GRB2 binds to the guanine nucleotide exchange factor SOS by way of the two SH3 domains of GRB2. When the GRB2-SOS complex docks to phosphorylated EGFR, SOS becomes activated. Activated SOS then promotes the removal of GDP from a member of the Ras subfamily (most notably H-Ras or K-Ras). Ras can then bind GTP and become active. Apart from EGFR, other cell surface receptors that can activate this pathway via GRB2 include Trk A/B, Fibroblast growth factor receptor (FGFR) and PDGFR<ref>http://en.wikipedia.org/w/index.php?title=MAPK/ERK_pathway&oldid=422032501</ref>. Activated Ras activates the protein kinase activity of RAF kinase . RAF kinase phosphorylates and activates MEK. MEK phosphorylates and activates a mitogen-activated protein kinase (MAPK). RAF, MEK, and MAPK are all serine/threonine-selective protein kinases. In the technical sense, RAF, MEK, and MAPK are all mitogen-activated kinases, as is MNK (see below). MAPK was originally called "extracellular signal-regulated kinases" (ERKs) and "microtubule-associated protein kinase" (MAPK). One of the first proteins known to be phosphorylated by ERK was a microtubule-associated protein (MAP). As discussed below, many additional targets for phosphorylation by MAPK were later found, and the protein was re-named "mitogen-activated protein kinase" (MAPK). The series of kinases from RAF to MEK to MAPK is an example of a protein kinase cascade. Such series of kinases provide opportunities for feedback regulation and signal amplification. Three of the many proteins that are phosphorylated by MAPK are shown in the Figure. One effect of MAPK activation is to alter the translation of mRNA to proteins. MAPK phosphorylates 40S ribosomal protein S6 kinase (RSK). This activates RSK, which, in turn, phosphorylates ribosomal protein S6 . Mitogen-activated protein kinases that phosphorylate ribosomal protein S6 were the first to be isolated. MAPK regulates the activities of several transcription factors. MAPK can phosphorylate C-myc. MAPK phosphorylates and activates MNK, which, in turn, phosphorylates CREB. MAPK also regulates the transcription of the C-Fos gene. By altering the levels and activities of transcription factors, MAPK leads to altered transcription of genes that are important for the cell cycle. The 22q11, 1q42, and 19p13 genes are associated with schizophrenia, schizoaffective, bipolar, and migraines by affecting the ERK pathway. In simpler terms, the mitogen binds to the membrane ligand. This means that Ras (a GTPase) can swap its GDP for a GTP. It can now activate MAP3K (e.g., Raf), which activates MAP2K, which activates MAPK. MAPK can now activate a transcription factor, such as myc<ref>http://en.wikipedia.org/w/index.php?title=MAPK/ERK_pathway&oldid=422032501</ref>. ===What is Extracellular-signal-regulated kinases (ERKs)?=== In biochemistry, extracellular-signal-regulated kinases (ERKs)(old name of MAPK) or classical MAP kinases are widely expressed protein kinase intracellular signalling molecules that are involved in functions including the regulation of meiosis, mitosis, and postmitotic functions in differentiated cells. Many different stimuli, including growth factors, cytokines, virus infection, ligands for heterotrimeric G protein-coupled receptors, transforming agents, and carcinogens, activate the ERK pathway. The term, "extracellular-signal-regulated kinases", is sometimes used as a synonym for mitogen-activated protein kinase (MAPK), but has more recently been adopted for a specific subset of the mammalian MAPK family. In the MAPK/ERK pathway, Ras activates c-Raf, followed by mitogen-activated protein kinase kinase (abbreviated as MKK, MEK, or MAP2K) and then MAPK1/2 (below). Ras is typically activated by growth hormones through receptor tyrosine kinases and GRB2/SOS, but may also receive other signals. ERKs are known to activate many transcription factors, such as ELK1, and some downstream protein kinases. Disruption of the ERK pathway is common in cancers, especially Ras, c-Raf and receptors such as HER2. Mitogen-activated protein kinase 1 (MAPK1) is also known as "extracellular signal-regulated kinase 2" (ERK2). Two similar (85% sequence identity) protein kinases were originally called ERK1 and ERK2. They were found during a search for protein kinases that are rapidly phosphorylated after activation of cell surface tyrosine kinases such as the epidermal growth factor receptor. Phosphorylation of ERKs leads to the activation of their kinase activity. The molecular events linking cell surface receptors to activation of ERKs are complex. It was found that Ras GTP-binding proteins are involved in the activation of ERKs. Another protein kinase, Raf-1, was shown to phosphorylate a "MAPK kinase", thus qualifying as a "MAPK kinase kinase". The MAPK kinase was named "MAPK/ERK kinase" (MEK). Receptor-linked tyrosine kinases, Ras, Raf, MEK, and MAPK could be fitted into a signaling cascade linking an extracellular signal to MAPK activation. See: MAPK/ERK pathway. Transgenic gene knockout mice lacking MAPK1 have major defects in early development. Mitogen-activated protein kinase 3 (MAPK3) is also known as "extracellular signal-regulated kinase 1" (ERK1). Transgenic gene knockout mice lacking MAPK3 are viable and it is thought that MAPK1 can fulfill most MAPK3 functions in most cells. The main exception is in T cells. Mice lacking MAPK3 have reduced T cell development past the CD4+CD8+ stage<ref>http://en.wikipedia.org/w/index.php?title=Extracellular_signal-regulated_kinases&oldid=414776335</ref>. ==Activation of Mitogen-activated protein (MAP) kinases== MAP kinases are activated within the protein kinase cascades called “MAPK cascade”. Each one consists of three enzymes, MAP kinase, MAP kinase kinase (MKK, MEK, or MAP2K) and MAP kinase kinase kinase (MKKK, MEKK or MAP3K) that are activated in series. A MAP3K that is activated by extracellular stimuli phosphorylates a MAP2K on its serine and threonine residues, and this MAP2K activates a MAP kinase through phosphorylation on its threonine and tyrosine residues (Tyr-185 and Thr-183 of ERK2). In vivo and in vitro, phosphorylation of [[tyrosine]] precedes phosphorylation of threonine, although phosphorylation of either residue can occur in the absence of the other. Because both tyrosine and threonine phosphorylations are required to activate the MAP kinases, phosphatases that remove phosphate from either site will inactivate them. The MAP kinase signaling cascade has been well-conserved in evolution from yeast to mammals. Cascades convey information to effectors, coordinate incoming information from other signaling pathways, amplify signals, and allow for a variety of response patterns. They respond to different stimuli by phosphorylating cytoplasmic components and nuclear transcription factors depending on the cellular context. Down-regulation of MAP kinase pathways may occur through dephosphorylation by serine/threonine phosphatases, tyrosine phosphatases, or dual-specificity phosphatases and through feedback inhibitory mechanisms that involve the phosphorylation of upstream kinases. Drugs that selectively down-regulate MAP kinase cascades could prove to be valuable as therapeutic agents in the control of malignant disease<ref>http://en.wikipedia.org/w/index.php?title=Mitogen-activated_protein_kinase&oldid=421970562</ref>. ===Groups=== ERK1 and ERK2 were the first of the ERK/MAP kinase subfamily to be cloned. Other related mammalian enzymes have been detected including: two ERK3 isoforms, ERK4, Jun N-terminal kinases/stress-activated protein kinases (JNK/SAPKs), p38/HOG, and p57 MAP kinases (38). The presence of at least six MAP kinases in yeast suggests that there are more in mammals. # [[extracellular signal-regulated kinases]] ([[Extracellular signal-regulated kinase|ERK1, ERK2]]). The ERK1/2 (also known as classical MAP kinases) signaling pathway is preferentially activated in response to [[growth factor]]s and [[phorbol ester]] (a [[tumor promoter]]), and regulates cell proliferation and cell differentiation. # [[c-Jun N-terminal kinases]] (JNKs), ([[MAPK8]], [[MAPK9]], [[MAPK10]]) also known as stress-activated protein kinases (SAPKs). # [[P38 mitogen-activated protein kinases|p38]] isoforms.(p38-α ([[MAPK14]]), -β ([[MAPK11]]), -γ ([[MAPK12]] or ERK6) and -δ ([[MAPK13]] or SAPK4)) Both [[c-Jun N-terminal kinases|JNK]] and [[P38 mitogen-activated protein kinases|p38]] signaling pathways are responsive to stress stimuli, such as [[cytokines]], [[ultraviolet]] irradiation, heat shock, and [[osmotic]] shock, and are involved in cell differentiation and apoptosis. # [[ERK5]]. ERK5 ([[MAPK7]]), which has been found recently, is activated both by growth factors and by stress stimuli, and it participates in cell proliferation. # ERK3/4. ERK3 ([[MAPK6]]) and ERK4 ([[MAPK4]]) are structurally-related atypical MAPKs possessing SEG motifs in the activation loop and displaying major differences only in the C-terminal extension. ERK3 and ERK4 are primarily cytoplasmic proteins that bind, translocate, and activate MK5 (PRAK, MAPKAP5). ERK3 is unstable, unlike ERK4, which is relatively stable.<ref name="PMID16973613">{{cite journal | author = Kant S, Schumacher S, Singh MK, Kispert A, Kotlyarov A, Gaestel M. | title = Characterization of the atypical MAPK ERK4 and its activation of the MAPK-activated protein kinase MK5| journal = J Biol Chem. | volume = 281 | issue = 46 | pages = 35511–9| year = 2006 | pmid = 16973613 | doi = 10.1074/jbc.M606693200}}</ref> # ERK7/8. ([[MAPK15]]) This is the newest member of MAPKs and behaves like atypical MAPKs. It possesses a long C terminus similar to ERK3/4<ref>http://en.wikipedia.org/w/index.php?title=Mitogen-activated_protein_kinase&oldid=421970562</ref>. ===c-Jun N-terminal kinases (JNKs)=== c-Jun N-terminal kinases (JNKs), were originally identified as kinases that bind and phosphorylate c-Jun on Ser-63 and Ser-73 within its transcriptional activation domain. They belong to the mitogen-activated protein kinase family, and are responsive to stress stimuli, such as cytokines, ultraviolet irradiation, heat shock, and osmotic shock. They also play a role in T cell differentiation and the cellular apoptosis pathway. Activation occurs through a dual phosphorylation of threonine (Thr) and tyrosine (Tyr) residues within a Thr-Pro-Tyr motif located in kinase subdomain VIII. Activation is carried out by two MAP kinases, MKK4 and MKK7 and JNK can be inactivated by Ser/Thr and Tyr protein phosphatases. It has been suggested that this signaling pathway contributes to inflammatory responses in mammals and insects. Inflammatory signals, changes in levels of reactive oxygen species, ultraviolet radiation, protein synthesis inhibitors, and a variety of stress stimuli can activate JNK. One way this activation may occur is through disruption of the conformation of sensitive protein phosphatase enzymes; specific phosphatases normally inhibit the activity of JNK itself and the activity of proteins linked to JNK activation. JNKs can associate with scaffold proteins JNK interacting proteins as well as their upstream kinases JNKK1 and JNKK2 following their activation. JNK, by phosphorylation, modifies the activity of numerous proteins that reside at the mitochondria or act in the nucleus. Downstream molecules that are activated by JNK include c-Jun, ATF2, ELK1, SMAD4, p53 and HSF1. The downstream molecules that are inhibited by JNK activation include NFAT4, NFATC1 and STAT3. By activating and inhibiting other small molecules in this way, JNK activity regulates several important cellular functions including cell growth, differentiation, survival and apoptosis. JNK1 is involved in apoptosis, neurodegeneration, cell differentiation and proliferation, inflammatory conditions and cytokine production mediated by AP-1 (activation protein 1) such as RANTES, IL-8 and GM-CSF. Recently, JNK1 has been found to regulate Jun protein turnover by phosphorylation and activation of the ubiquitin ligase Itch<Ref>http://en.wikipedia.org/w/index.php?title=C-Jun_N-terminal_kinases&oldid=417136418</ref>. == Control of the MAP kinase cascade == === Receptor tyrosine kinase === Various ligands that activate MAPK’s cascade bind receptor tyrosine kinases, and tyrosine residues are phosphorylated; the phosphotyrosine residues of autophosphorylated receptors then bind the [[SH2 domain]]s of adapters, (Grb2: growth factor receptor-bound protein 2). Exchange factors promote the association of Ras with GTP. GTP-Ras bind Raf-1 and B-Raf, two protein kinases. Consequently, Raf protein kinase activity is increased. Receptor tyrosine kinases have also been reported to activate the cascade in fibroblasts via a [Ca<sup>2+</sup>] increase. === G Protein-coupled receptors === The MAP kinase cascade can also be activated by certain heterotrimeric G proteins. === Protein kinase C === [[Protein kinase C]] (PKC) is used by many receptors to regulate the MAP kinase pathway, alone or in concert with other mechanisms, and may act at several steps in the cascade. PKC may directly activate Raf-1, but if a mutation exists at the site phosphorylated by PKC, no interaction can occur with Raf. Other sites of action of PKC are likely to be either farther upstream or at the level of MAP kinase inactivation. === Regulation and specificity of MEKs === MEK1 and MEK2 phosphorylate and activate MAP kinase. MEKs are activated by Raf-1, B-Raf, the Mos protooncogene product, MEK kinase 1 (MEKK1), and other growth factor-stimulated activities. The mechanisms controlling MEKK1 are unknown, although Ras may be required. It is thought MEKs are kinases that phosphorylate only MAP Kinases because no other substrates have been identified. ==JAK-STAT signaling pathway== [[Image:Jakstat pathway.svg|thumb|right|500px|Key steps of the JAK-STAT pathway]] The '''JAK-STAT signaling pathway''' transmits information from chemical signals outside the cell, through the cell membrane, and into gene promoters on the DNA in the cell nucleus, which causes DNA transcription and activity in the cell. The JAK-STAT system is a major signaling alternative to the [[second messenger system]]. The JAK-STAT system consists of three main components: a receptor, [[Janus kinase|JAK]] and [[STAT protein|STAT]].<ref name="aaronson">{{cite journal |author=Aaronson DS, Horvath CM |title=A road map for those who don't know JAK-STAT |journal=Science |volume=296 |issue=5573 |pages=1653–5 |year=2002 |month=May |pmid=12040185 |doi=10.1126/science.1071545 |url=http://www.sciencemag.org/cgi/pmidlookup?view=long&pmid=12040185}}</ref> JAK is short for '''Ja'''nus '''K'''inase, and STAT is short for '''S'''ignal '''T'''ransducer and '''A'''ctivator of '''T'''ranscription.<ref name="aaronson"/> The receptor is activated by a signal from interferon, interleukin, growth factors, or other chemical messengers. This activates the kinase function of JAK, which autophosphorylates itself (phosphate groups act as "on" and "off" switches on proteins). The STAT protein then binds to the phosphorylated receptor. STAT is phosphorylated and translocates into the cell nucleus, where it binds to DNA and promotes transcription of genes responsive to STAT. In mammals, there are seven STAT genes, and each one binds to a different DNA sequence. STAT binds to a DNA sequence called a promoter, which controls the expression of other DNA sequences. This affects basic cell functions, like cell growth, differentiation and death.<ref name="aaronson"/><REf>http://en.wikipedia.org/w/index.php?title=JAK-STAT_signaling_pathway&oldid=416185051</ref> The JAK-STAT pathway is evolutionarily conserved, from slime molds and worms to mammals (but not fungi or plants). Disrupted or dysregulated JAK-STAT functionality (which is usually by inherited or acquired genetic defects) can result in immune deficiency syndromes and cancers.<ref name="aaronson"/> ===Mechanism=== JAKs, which have [[tyrosine kinase]] activity, bind to some cell surface [[cytokine receptors]]. The binding of the [[ligand (biochemistry)|ligand]] to the receptor triggers activation of JAKs. With increased kinase activity, they [[Phosphorylation|phosphorylate]] [[tyrosine]] residues on the receptor and create sites for interaction with proteins that contain [[phosphotyrosine]]-binding [[SH2 domain]]s. STATs possessing SH2 domains capable of binding these phosphotyrosine residues are recruited to the receptors, and are themselves tyrosine-phosphorylated by JAKs. These phosphotyrosines then act as binding sites for SH2 domains of other STATs, mediating their dimerization. Different STATs form [[heterodimer|hetero-]] or [[homodimer]]s. Activated STAT dimers accumulate in the [[cell nucleus]] and activate transcription of their target genes.<ref name="review1">{{cite journal| doi=10.1358/dnp.2005.18.4.908658| author=Hebenstreit D, Horejs-Hoeck J and Duschl A | title=JAK/STAT-dependent gene regulation by cytokines | year=2005 | journal=Drug News Perspect | volume=18| pmid=16034480 | issue=4 | pages=243–249 | id=16034480}}</ref> STATs may also be tyrosine-phosphorylated directly by [[receptor tyrosine kinase]]s, such as the [[epidermal growth factor receptor]], as well as by non-receptor [[tyrosine kinase]]s such as [[Src (gene)|c-src]]. The pathway is negatively regulated on multiple levels. [[Protein tyrosine phosphatase]]s remove phosphates from cytokine receptors and activated STATs.<ref name="review1" /> More recently identified [[suppressors of cytokine signalling]] (SOCS) inhibit STAT phosphorylation by binding and inhibiting JAKs or competing with STATs for phosphotyrosine binding sites on cytokine receptors.<ref name="Krebs2001">{{cite journal |author=Krebs DL, Hilton DJ |title=SOCS proteins: negative regulators of cytokine signaling |journal=Stem Cells |volume=19 |issue=5 |pages=378–87 |year=2001 |pmid=11553846 |doi=10.1634/stemcells.19-5-378}}</ref> STATs are also negatively regulated by [[protein inhibitors of activated STAT]] (PIAS), which act in the nucleus through several mechanisms.<ref>{{cite journal| doi=10.1038/sj.cr.7310027| author=Shuai K | year=2006 | title=Regulation of cytokine signaling pathways by PIAS proteins | journal=Cell Research| pmid=16474434 | volume=16 | issue=2 | pages=196–202 | id=16474434}}</ref> For example, PIAS1 and PIAS3 inhibit transcriptional activation by STAT1 and STAT3 respectively by binding and blocking access to the DNA sequences they recognize<REf>http://en.wikipedia.org/w/index.php?title=JAK-STAT_signaling_pathway&oldid=416185051</ref>. '''Janus kinase inhibitors''' Janus kinase inhibitor is a class of medicines that function by inhibiting the effect of one or more of the Janus kinase family of enzymes (JAK1, JAK2, JAK3, TYK2), interfering with the JAK-STAT signaling pathway. Some JAK2 inhibitors are under development for the treatment of polycythemia vera, essential thrombocythemia, and myeloid metaplasia with myelofibrosis. Some inhibitors of JAK2 are in clinical trials, e.g. for psoriasis. JAK3 is also being targeted for a variety of inflammatory diseases, and one has had good results in a phase II trial for rheumatoid arthritis. Examples * Lestaurtinib against JAK2, for acute myelogenous leukemia (AML) * Tofacitinib (previously called tasocitinib) (CP-690550) against JAK3 for psoriasis, and rheumatoid arthritis.Early Phase III results in November 2010 were encouraging.[6] * Ruxolitinib[7] against JAK1/JAK2 for psoriasis, myelofibrosis, and rheumatoid arthritis * SB1518[11][12] against JAK2 for relapsed lymphoma, advanced myeloid malignancies, myelofibrosis and CIMF * CYT387 against JAK2 for myeloproliferative disorders * LY3009104 (INCB28050) against JAK1/JAK2 starting phase IIb for rheumatoid arthritis * TG101348 against JAK2; phase I results for myelofibrosis are published[ ==References== {{reflist}} {{bookcat}} d44qrkol52aocjaabfhvr0l109ceq1s Principles of Biochemistry/Chromosome and its structure 0 250353 4672099 4621582 2026-09-24T09:11:46Z R. Henrik Nilsson 3395618 refrences > references 4672099 wikitext text/x-wiki {{Dewikify}}In a series of experiments beginning in the mid-1880s, Theodor Boveri gave the definitive demonstration that chromosomes are the vectors of heredity. His two principles were the continuity of chromosomes and the individuality of chromosome. It is the second of these principles that was so original.Wilhelm Roux suggested that each chromosome carries a different genetic load. Boveri was able to test and confirm this hypothesis. Aided by the rediscovery at the start of the 1900s of Gregor Mendel's earlier work, Boveri was able to point out the connection between the rules of inheritance and the behaviour of the chromosomes. Boveri influenced two generations of American cytologists: Edmund Beecher Wilson, Walter Sutton and Theophilus Painter were all influenced by Boveri (Wilson and Painter actually worked with him). In his famous textbook The Cell in Development and Heredity, Wilson linked together the independent work of Boveri and Sutton (both around 1902) by naming the chromosome theory of inheritance the "Sutton-Boveri Theory" (the names are sometimes reversed). Ernst Mayr remarks that the theory was hotly contested by some famous geneticists: William Bateson, Wilhelm Johannsen, Richard Goldschmidt and T.H. Morgan, all of a rather dogmatic turn-of-mind. Eventually, complete proof came from chromosome maps in Morgan's own lab.<ref>http://en.wikipedia.org/w/index.php?title=Chromosome&oldid=424607651</ref> [[File:HumanChromosomesChromomycinA3.jpg|thumb|200px|right|Human chromosomes during metaphase.]] [[File:Chromatin_chromosome.png|thumb|400px|Chromatin on the phases of the cell cycle (1) double chain of deoxyribonucleic acid (DNA). (2) chromatin (deoxyribonucleic acid single chain and histones) (3) chromatin in interphase (blue) and centromere (red) (4) dense chromatin during prophase (5) Chromosomes at metaphase]] ==Chromosome== A chromosome is an organized structure of DNA and protein that is found in nucleus of the cell. It is a single piece of coiled DNA containing many genes, regulatory elements and other nucleotide sequences. Chromosomes also contain DNA-bound proteins, which serve to package the DNA and control its functions. Chromosomes vary widely between different organisms. The DNA molecule may be circular or linear, and can be composed of 10,000 to 1,000,000,000 nucleotides in a long chain. Typically, eukaryotic cells (cells with nuclei) have large linear chromosomes and prokaryotic cells (cells without defined nuclei) have smaller circular chromosomes, although there are many exceptions to this rule. Also, cells may contain more than one type of chromosome; for example, mitochondria in most eukaryotes and chloroplasts in plants have their own small chromosomes.<ref>http://en.wikipedia.org/w/index.php?title=Chromosome&oldid=424607651</ref> In eukaryotes, nuclear chromosomes are packaged by proteins into a condensed structure called chromatin. This allows the very long DNA molecules to fit into the cell nucleus. The structure of chromosomes and chromatin varies through the cell cycle. Chromosomes are the essential unit for cellular division and must be replicated, divided, and passed successfully to their daughter cells so as to ensure the genetic diversity and survival of their progeny. Chromosomes may exist as either duplicated or unduplicated. Unduplicated chromosomes are single linear strands, whereas duplicated chromosomes (copied during synthesis phase) contain two copies joined by a centromere. Compaction of the duplicated chromosomes during mitosis and meiosis results in the classic four-arm structure (pictured to the right). Chromosomal recombination plays a vital role in genetic diversity. If these structures are manipulated incorrectly, through processes known as chromosomal instability and translocation, the cell may undergo mitotic catastrophe and die, or it may unexpectedly evade apoptosis leading to the progression of cancer. In practice "chromosome" is a rather loosely defined term. In prokaryotes and viruses, the term genophore is more appropriate when no chromatin is present. However, a large body of work uses the term chromosome regardless of chromatin content. In prokaryotes, DNA is usually arranged as a circle, which is tightly coiled in on itself, sometimes accompanied by one or more smaller, circular DNA molecules called plasmids. These small circular genomes are also found in mitochondria and chloroplasts, reflecting their bacterial origins. The simplest genophores are found in viruses: these DNA or RNA molecules are short linear or circular genophores that often lack structural proteins. The word chromosome comes from the Greek χρῶμα (chroma, colour) and σῶμα (soma, body) due to their property of being very strongly stained by particular dyes.<ref>http://en.wikipedia.org/w/index.php?title=Chromosome&oldid=424607651</ref> ===Chromatin=== Chromatin is the combination of DNA, histone, and other proteins that make up chromosomes. It is found inside the nuclear envelope of eukaryotic cells. It is divided between heterochromatin (condensed) and euchromatin (extended) forms. The functions of chromatin are to package DNA into a smaller volume to fit in the cell, to strengthen the DNA to allow mitosis and meiosis, and to control gene expression and DNA replication. Changes in chromatin structure are affected by chemical modifications of histone proteins, such as methylation and acetylation, and by other DNA-binding proteins. ===Packaging of DNA in chromatin=== Chromatin undergoes various forms of change in its structure. Histone proteins, the foundation blocks of chromatin, are modified by various post-translational modification to alter DNA packing. Acetylation results in the loosening of chromatin and lends itself to replication and transcription. When certain residues are methylated they hold DNA together strongly and restrict access to various enzymes. A recent study showed that there is a [[bivalent chromatin|bivalent]] structure present in the chromatin: methylated lysine residues at location 4 and 27 on histone 3. It is thought that this may be involved in development; there is more methylation of lysine 27 in embryonic cells than in differentiated cells, whereas lysine 4 methylation positively regulates transcription by recruiting nucleosome remodeling enzymes and histone acetylases<ref>http://en.wikipedia.org/w/index.php?title=Chromatin&oldid=423073917</ref>.<ref> {{cite journal |title=A bivalent chromatin structure marks key developmental genes in embryonic stem cells |author=Bernstein, B.E., T.S. Mikkelsen, X. Xie, M. Kamal, D.J. Huebert, J. Cuff, B. Fry, A. Meissner, M. Wernig, K. Plath, R. Jaenisch, A. Wagschal, R. Feil, S.L. Schreiber & E.S. Lander |journal=[[Cell (journal)|Cell]] |year=2006 |month=April |volume=125 |issue=2 |pages=315–26 |pmid=16630819 |issn=0092-8674 |doi=10.1016/j.cell.2006.02.041}} </ref> Polycomb-group proteins play a role in regulating genes through modulation of chromatin structure.<ref name= Portoso >{{cite book |chapterurl=http://www.horizonpress.com/rnareg|author= Portoso M and Cavalli G|year=2008|chapter=The Role of RNAi and Noncoding RNAs in Polycomb Mediated Control of Gene Expression and Genomic Programming|title=RNA and the Regulation of Gene Expression: A Hidden Layer of Complexity|publisher=Caister Academic Press|id=[http://www.horizonpress.com/rnareg ISBN 978-1-904455-25-7]}}</ref> ====Chromatin and Watson/Crick base pairing==== Crick and Watson's famous structure of DNA (called B-DNA) is only one of three possible structural forms. For the C-N bond between a base and its sugar there are two different conformations. The anti-conformation occurs in all A- and B-DNAs as well as in Z-DNA where a Cytosine is present. In case of a Guanine Z-DNA takes the syn-conformation. The periodic change between a purine and pyrimidine along the strand of a Z-DNA accomplishes the alternating syn-anti-conformation characteristic of the zigzag structure of the Z-DNA helix. [[File:Nucleosome 1KX5 2.png|thumb|right|150px|A cartoon representation of the nucleosome structure. From pdb.]] ==Histone:The DNA binding protein== Histones were discovered in 1884 by Albrecht Kossel. The word "histone" dates from the late 19th century and is from the German "Histon", of uncertain origin: perhaps from Greek histanai or from histos. Until the early 1990s, histones were dismissed by most as inert packing material for eukaryotic nuclear DNA, based in part on the "ball and stick" models of Mark Ptashne and others who believed transcription was activated by protein-DNA and protein-protein interactions on largely naked DNA templates, as is the case in bacteria. During the 1980s, work by Michael Grunstein demonstrated that eukaryotic histones repress gene transcription, and that the function of transcriptional activators is to overcome this repression. We now know that histones play both positive and negative roles in gene expression, forming the basis of the histone code. The discovery of the H5 histone appears to date back to 1970's, and in classification it has been grouped with H1.<ref>http://en.wikipedia.org/w/index.php?title=Histone&oldid=423138985</ref> Histones are found in the nuclei of eukaryotic cells, and in certain Archaea, namely Euryarchaea, but not in bacteria. Archaeal histones may well resemble the evolutionary precursors to eukaryotic histones. Histone proteins are among the most highly conserved proteins in eukaryotes, emphasizing their important role in the biology of the nucleus.:939 In contrast mature sperm cells largely use protamines to package their genomic DNA, most likely because this allows them to achieve an even higher packaging ratio. Core histones are highly conserved proteins, that is, there are very few differences among the amino acid sequences of the histone proteins of different species. Linker histone usually has more than one form within a species and is also less conserved than the core histones. There are some variant forms in some of the major classes. They share amino acid sequence homology and core structural similarity to a specific class of major histones but also have their own feature that is distinct from the major histones. These minor histones usually carry out specific functions of the chromatin metabolism. For example, histone H3-like CenpA is a histone only associated with the centromere region of the chromosome. Histone H2A variant H2A.Z is associated with the promoters of actively transcribed genes and also involved in the prevention of the spread of silent heterochromatin. Another H2A variant H2A.X binds to the DNA with double strand breaks and marks the region undergoing DNA repair. Histone H3.3 is associated with the body of actively transcribed genes.<ref>http://en.wikipedia.org/w/index.php?title=Histone&oldid=423138985</ref><ref>Clarke HJ (1992). "Nuclear and chromatin composition of mammalian gametes and early embryos". Biochem. Cell Biol. 70 (10-11): 856–66.</ref> ===The nucleosome and "beads-on-a-string"=== The basic repeat element of chromatin is the nucleosome, interconnected by sections of linker DNA, a far shorter arrangement than pure DNA in solution. In addition to the core histones, there is the linker histone, H1, which contacts the exit/entry of the DNA strand on the nucleosome. The nucleosome core particle, together with histone H1, is known as a chromatosome. Nucleosomes, with about 20 to 60 base pairs of linker DNA, can form, under non-physiological conditions, an approximately 10&nbsp;nm "beads-on-a-string" fibre. The nucleosomes bind DNA non-specifically, as required by their function in general DNA packaging. There are, however, large DNA sequence preferences that govern nucleosome positioning. This is due primarily to the varying physical properties of different DNA sequences: For instance, [[adenosine]] and [[thymine]] are more favorably compressed into the inner minor grooves. This means nucleosomes can bind preferentially at one position approximately every 10 base pairs (the helical repeat of DNA)- where the DNA is rotated to maximise the number of A and T bases that will lie in the inner minor groove. {{quotation|'''What is a Nucleosome?''' Nucleosomes are the basic unit of DNA packaging in eukaryotes, consisting of a segment of DNA wound around a histone protein core. This structure is often compared to thread wrapped around a spool. Nucleosomes form the fundamental repeating units of eukaryotic chromatin, which is used to pack the large eukaryotic genomes into the nucleus while still ensuring appropriate access to it (in mammalian cells approximately 2 m of linear DNA have to be packed into a nucleus of roughly 10 µm diameter). Nucleosomes are folded through a series of successively higher order structures to eventually form a chromosome; this both compacts DNA and creates an added layer of regulatory control which ensures correct gene expression. Nucleosomes are thought to carry epigenetically inherited information in the form of covalent modifications of their core histones. The nucleosome hypothesis was proposed by Don and Ada Olins in 1974 and Roger Kornberg. The nucleosome core particle consists of approximately 147 base pairs of DNA wrapped in 1.67 left-handed superhelical turns around a histone octamer consisting of 2 copies each of the core histones H2A, H2B, H3, and H4. Core particles are connected by stretches of "linker DNA", which can be up to about 80 bp long. Technically, a nucleosome is defined as the core particle plus one of these linker regions; however the word is often synonymous with the core particle. Linker histones such as H1 and its isoforms are involved in chromatin compaction and sit at the base of the nucleosome near the DNA entry and exit binding to the linker region of the DNA. Non-condensed nucleosomes without the linker histone resemble "beads on a string of DNA" under an electron microscope. In contrast to most eukaryotic cells, mature sperm cells largely use protamines to package their genomic DNA, most likely to achieve an even higher packaging ratio.Histone equivalents and a simplified chromatin structure have also been found in Archea, proving that eukaryotes are not the only organisms that use nucleosomes.}} ===30 nm chromatin fibre=== [[File:30nm Chromatin Structures.png|thumb|right|200px|Two proposed structures of the 30nm chromatin filament. <br />Left: 1 start helix "solenoid" structure. <br />Right: 2 start loose helix structure. <br />Note: the histones are omitted in this diagram - only the DNA is shown.]] With addition of H1, the "beads-on-a-string" structure in turn coils into a 30&nbsp;nm diameter helical structure known as the 30&nbsp;nm fibre or filament. The precise structure of the chromatin fibre in the cell is not known in detail, and there is still some debate over this. This level of chromatin structure is thought to be the form of euchromatin, which contains actively transcribed genes. EM studies have demonstrated that the 30&nbsp;nm fibre is highly dynamic such that it unfolds into a 10&nbsp;nm fiber ("beads-on-a-string") structure when transversed by an RNA polymerase engaged in transcription. [[File:ChromatinFibers.png|thumb|left|250px|Four proposed structures of the 30&nbsp;nm chromatin filament for DNA repeat length per nucleosomes ranging from 177 to 207 bp. <br /> Linker DNA in yellow and nucleosomal DNA in pink.]] The existing models commonly accept that the nucleosomes lie perpendicular to the axis of the fibre, with linker histones arranged internally. A stable 30&nbsp;nm fibre relies on the regular positioning of nucleosomes along DNA. Linker DNA is relatively resistant to bending and rotation. This makes the length of linker DNA critical to the stability of the fibre, requiring nucleosomes to be separated by lengths that permit rotation and folding into the required orientation without excessive stress to the DNA. In this view, different length of the linker DNA should produce different folding topologies of the chromatin fiber. Recent theoretical work, based on electron-microscopy images<ref> {{cite journal |title=EM measurements define the dimensions of the "30-mm" chromatin fiber: evidence for a compact, interdigitated structure |author=Robinson DJ, Fairall L, Huynh VA, Rhodes D. |journal=[[PNAS (journal)|PNAS]] |year=2006 |month=April |volume=103 |issue=17 |pages=6506–11 |pmid=16617109 |doi=10.1073/pnas.0601212103 |pmc=1436021}} </ref> of reconstituted fibers support this view.<ref> {{cite journal |title=An all-atom model of the chromatin fiber containing linker histones reveals a versatile structure tuned by the nucleosomal repeat length |author=Wong H, Victor JM, Mozziconacci J. |journal=[[PLoS ONE (journal)|PLoS ONE]] |year=2007 |month=September |volume=2 |issue=9 |pmid=17849006 | doi = 10.1371/journal.pone.0000877 |pages=e877 |pmc=1963316 }} </ref> ===Spatial organization of chromatin in the cell nucleus=== <!--- Too speculative for an article: "[[File:Nucleus & Chromatin Territorial Structure.jpg|thumb|200px|left|'''Fig. 4:''' Hypothetical Model of the Territorial Organization of Chromatin in the Cell Nucleus. The diagram (Fig. 4) represents a model of a cell (gray oval) with a nucleus (dark gray oval). Two chromosomes are shown as chromatin fibers (yellow and red lines). Proteins are represented as small ovals. Note the association of the chromatin components with the nuclear membrane. Chromosomes are territorially interlinked by chromatin protein complexes (scaffold proteins see above).]]" ---> The layout of the [[genome]] within the nucleus is not random - specific regions of the genome have a tendency to be found in certain spaces. Specific regions of the chromatin are enriched at the [[nuclear membrane]], while other regions are bound together by protein complexes. The layout of this is not, however, well characterised apart from the compaction of one of the two X chromosomes in [[mammal]]ian [[female]]s into the [[Barr body]]. This serves the role of permanently deactivating these genes, which prevents females getting a '[[dosage compensation|double dose']] relative to [[male]]s. The extent to which the inactive X is actually compacted is a matter of some controversy. [[Image:Chromosome X.svg|125px|thumb|right|Scheme of the X chromatid]] [[Image:Chromosome Y.svg|125px|right|thumb|Human Y-chromatid]] === Human chromosomes === Chromosomes can be divided into two types—autosomes, and sex chromosomes. Certain genetic traits are linked to your sex, and are passed on through the sex chromosomes. The autosomes contain the rest of the genetic hereditary information. All act in the same way during cell division. Human cells have 23 pairs of large linear nuclear chromosomes, (22 pairs of autosomes and one pair of sex chromosomes) giving a total of 46 per cell. In addition to these, human cells have many hundreds of copies of the mitochondrial genome. [[DNA sequencing|Sequencing]] of the human genome has provided a great deal of information about each of the chromosomes. Below is a table compiling statistics for the chromosomes, based on the Sanger Institute's human genome information in the [[Vertebrate and Genome Annotation Project|Vertebrate Genome Annotation (VEGA) database]].<ref>[http://vega.sanger.ac.uk/Homo_sapiens/index.html Vega.sanger.ad.uk], all data in this table was derived from this database, November 11, 2008.</ref> Number of genes is an estimate as it is in part based on [[gene prediction]]s. Total chromosome length is an estimate as well, based on the estimated size of unsequenced heterochromatin regions. An '''autosome''' is a [[chromosome]] that is not a [[sex chromosome]]; that is to say, there is an equal number of copies of the chromosome in males and females.<ref>{{Cite book | last=Griffiths | first=Anthony J. F. | authorlink=Anthony J. F. Griffiths | title=An Introduction to genetic analysis | year=1999 | publisher=W.H. Freeman | location=New York | isbn=071673771X | pages= | url=http://www.ncbi.nlm.nih.gov/books/bv.fcgi?highlight=autosome&rid=iga.section.222}}</ref> For example, in [[human]]s, there are 22 pairs of autosomes. In addition to autosomes, there are sex chromosomes, to be specific: X chromosome and Y chromosome. So, humans have 23 pairs of chromosomes. '''Sex chromosomes''' The X chromosome is one of the two sex-determining chromosomes in many animal species, including mammals (the other is the Y chromosome). It is a part of the XY sex-determination system and X0 sex-determination system. The X chromosome was named for its unique properties by early researchers, which resulted in the naming of its counterpart Y chromosome, for the next letter in the alphabet, after it was discovered later. The Y-chromosome is one of the two sex-determining chromosomes in most mammals, including humans. In mammals, it contains the gene SRY, which triggers testis development if present. The human Y-chromosome is composed of about 60 million base pairs. DNA in the Y-chromosome is passed from father to son, and Y-DNA analysis may thus be used in genealogy research. {| class="wikitable" border="1" style="width: 75%; margin: 1em auto 1em auto;" |- ! colspan="2"|Human chromosomes |- |align="center"|Female (XX) |align="center"|Male (XY) |- |[[Image:PLoSBiol3.5.Fig7ChromosomesAluFish.jpg|420px|center]] |[[File:Human male karyotype.gif|331px|center]] |- | colspan="2"|There are two copies of each '''autosome''' (chromosomes 1-22) in both females and males. The '''sex chromosomes''' are different: There are two copies of the X-chromosome in females, but males have a single X-chromosome and a Y-chromosome. |} [[File:Chromosome size vs. number of protein-coding genes in Homo sapiens.svg|thumb|Chromosome size vs. number of protein-coding genes in Homo sapiens (GRCh38.p14)]] {| class="wikitable sortable" style="text-align:right" |+Human genome: Protein-coding genes and length by chromosome (GRC38.p14) |- ! Chromosome !! Protein-coding [[genes]]!! Total [[Nucleobase|bases]] |- | [[Chromosome 1 (human)|1]] || align="right" | 2,066 || align="right" | 248,956,422 |- | [[Chromosome 2 (human)|2]] || align="right" | 1,250 || align="right" | 242,193,529 |- | [[Chromosome 3 (human)|3]] || align="right" | 1,083 || align="right" | 198,295,559 |- | [[Chromosome 4 (human)|4]] || align="right" | 758 || align="right" | 190,214,555 |- | [[Chromosome 5 (human)|5]] || align="right" | 895 || align="right" | 181,538,259 |- | [[Chromosome 6 (human)|6]] || align="right" | 1,052 || align="right" | 170,805,979 |- | [[Chromosome 7 (human)|7]] || align="right" | 934 || align="right" | 159,345,973 |- | [[Chromosome 8 (human)|8]] || align="right" | 704 || align="right" | 145,138,636 |- | [[Chromosome 9 (human)|9]] || align="right" | 776 || align="right" | 138,394,717 |- | [[Chromosome 10 (human)|10]] || align="right" | 732 || align="right" | 133,797,422 |- | [[Chromosome 11 (human)|11]] || align="right" | 1,318 || align="right" | 135,086,622 |- | [[Chromosome 12 (human)|12]] || align="right" | 1,040 || align="right" | 133,275,309 |- | [[Chromosome 13 (human)|13]] || align="right" | 322 || align="right" | 114,364,328 |- | [[Chromosome 14 (human)|14]] || align="right" | 619 || align="right" | 107,043,718 |- | [[Chromosome 15 (human)|15]] || align="right" | 602 || align="right" | 101,991,189 |- | [[Chromosome 16 (human)|16]] || align="right" | 856 || align="right" | 90,338,345 |- | [[Chromosome 17 (human)|17]] || align="right" | 1,187 || align="right" | 83,257,441 |- | [[Chromosome 18 (human)|18]] || align="right" | 267 || align="right" | 80,373,285 |- | [[Chromosome 19 (human)|19]] || align="right" | 1,479 || align="right" | 58,617,616 |- | [[Chromosome 20 (human)|20]] || align="right" | 548 || align="right" | 64,444,167 |- | [[Chromosome 21 (human)|21]] || align="right" | 221 || align="right" | 46,709,983 |- | [[Chromosome 22 (human)|22]] || align="right" | 447 || align="right" | 50,818,468 |- | [[X chromosome|X (sex chromosome)]] || align="right" | 867 || align="right" | 156,040,895 |- | [[Y chromosome|Y (sex chromosome)]] || align="right" | 61 || align="right" | 57,227,415 |-class="sortbottom" ! Total !! 20,084 || 3,088,269,832 |} ==What is nucleoid?== [[Image:Celltypes.png|thumb|330px|right|Prokaryote cell showing the nucleoid.]] The nucleoid (meaning nucleus-like) is an irregularly-shaped region within the cell of prokaryotes which has nuclear material without a nuclear membrane and where the genetic material is localized. The genome of prokaryotic organisms generally is a circular, double-stranded piece of DNA, of which multiple copies may exist at any time. The length of a genome widely varies, but generally is at least a few million base pairs. Storage of the genome within a nucleoid can be contrasted against that within eukaryotes, where the genome is packed into chromatin and sequestered within a membrane-enclosed organelle called the nucleus. A genophore is the DNA of a prokaryote. This is commonly referred to as a prokaryotic chromosome. The term chromosome is misleading for a genophore because the genophore lacks chromatin. The genophore is compacted through a mechanism known as supercoiling, whereas a chromosome is compacted via chromatin. The genophore is circular in most prokaryotes, and linear in very few. The circular nature of the genophore allows replication to occur without telomeres. Genophores are generally of a much smaller size than Eukaryotic chromosomes. A genophore of a true organism can be as small as 580,073 base pairs (Mycoplasma genitalium). Many eukaryotes (such as plants and animals) carry genophores in organelles such as mitochondria and chloroplasts. These organelles are very similar to true prokaryotes.<ref>http://en.wikipedia.org/w/index.php?title=Nucleoid&oldid=422241758</ref> Experimental evidence suggests that the nucleoid is largely composed of DNA, about 60%, with a small amount of RNA and protein. The latter two constituents are likely to be mainly messenger RNA and the transcription factor proteins found regulating the bacterial genome. Proteins helping to maintain the supercoiled structure of the nucleic acid are known as nucleoid proteins or nucleoid-associated proteins and are distinct from histones of eukaryotic nuclei. In contrast to histones, the DNA-binding proteins of the nucleoid do not form nucleosomes, in which DNA is wrapped around a protein core. Instead, these proteins often use other mechanisms to promote compaction such as DNA looping.<ref>http://en.wikipedia.org/w/index.php?title=Nucleoid&oldid=422241758</ref> ===Circular bacterial chromosome=== Most bacterial chromosomes contain a circular DNA molecule - there are no free ends to the DNA. Free ends would otherwise create significant challenges to cells with respect to DNA replication and stability. Cells that do contain chromosomes with DNA ends, or telomeres (most eukaryotes), have acquired elaborate mechanisms to overcome these challenges. However, a circular chromosome can provide other challenges for cells. After replication, the two progeny circular chromosomes can sometimes remain interlinked or tangled, and they must be resolved so that each cell inherits one complete copy of the chromosome during cell division.<ref>http://en.wikipedia.org/w/index.php?title=Circular_bacterial_chromosome&oldid=422751175</ref> ==Structure of Eukaryotic chromosome == Some sequences are required for a properly functioning chromosome: Centromere: Used during cell division as the attachment point for the spindle fibers. Telomere: Used to maintain chromosomal integrity by capping off the ends of the linear chromosomes. This region is a microsatellite, but its function is more specific than a simple tandem repeat. ===Centromere=== A centromere is a region of DNA typically found near the middle of a chromosome where two identical sister chromatids come closest in contact. It is involved in cell division as the point of mitotic spindle attachment. The sister chromatids are attached all along their length, but they are closest at the centromere. The centromeric DNA is normally in a heterochromatin state, which is essential for the recruitment of the cohesin complex that mediates sister chromatid cohesion after DNA replication as well as coordinating sister chromatid separation during anaphase. In this chromatin, the normal histone H3 is replaced with a centromere-specific variant, CENP-A in humans. The presence of CENP-A is believed to be important for the assembly of the kinetochore on the centromere. CENP-C has been shown to localise almost exclusively to these regions of CENP-A associated chromatin. In human cells, the histones are found to be most enriched for H4K20me3 and H3K9me3 which are known heterochromatic modifications. In the yeast Schizosaccharomyces pombe (and probably in other eukaryotes), the formation of centromeric heterochromatin is connected to RNAi. In nematodes such as Caenorhabditis elegans, some plants, and the insect orders Lepidoptera and Hemiptera, chromosomes are "holocentric", indicating that there is not a primary site of microtubule attachments or a primary constriction, and a "diffuse" kinetochore assembles along the entire length of the chromosome. ===Centromere positions=== Each chromosome has two arms, labeled p (the shorter of the two) and q (the longer). The p arm is named for "petit" meaning 'small'; the q arm is named q simply because it follows p in the alphabet("q" refers to the French word "queue" meaning 'tail'.) They can be connected in either metacentric, submetacentric, acrocentric or telocentric manner. ===Metacentric=== A chromosome is '''metacentric''' if its two arms are roughly equal in length. In some cases, a metacentric chromosome is formed by balanced Robertsonian translocation: the fusion of two acrocentric chromosomes to form one metacentric chromosome. ===Submetacentric=== If arms' lengths are unequal, the chromosome is said to be '''submetacentric''' ===Acrocentric=== If the p (short) arm is so short that is hard to observe, but still present, then the chromosome is '''acrocentric''' (The "acro-" in acrocentric refers to the Greek word for "peak".). The [[human genome]] includes five acrocentric chromosomes: [[Chromosome 13 (human)|13]], [[Chromosome 14 (human)|14]], [[Chromosome 15 (human)|15]], [[Chromosome 21 (human)|21]] and [[Chromosome 22 (human)|22]]. In an acrocentric chromosome the p arm contains genetic material including repeated sequences such as nucleolar organizing regions, and can be translocated without significant harm, as in a balanced [[Robertsonian translocation]]. The [[horse|domestic horse]] genome includes one metacentric chromosome that is [[homology (biology)|homologous]] to two acrocentric chromosomes in the [[Conspecificity|conspecific]] but undomesticated [[Przewalski's horse]].<ref>{{cite journal | author = Myka JL, Lear TL, Houck ML, Ryder OA, Bailey E | title = FISH analysis comparing genome organization in the domestic horse (''Equus caballus'') to that of the Mongolian wild horse (''E. przewalskii'') | journal = Cytogenet. Genome Res. | volume = 102 | issue = 1-4 | pages = 222–5 | year = 2003 | pmid = 14970707 | doi = 10.1159/000075753 | url = http://content.karger.com/ProdukteDB/produkte.asp?Aktion=ShowAbstract&ArtikelNr=75753&Ausgabe=229862&ProduktNr=224037 }}</ref> This may reflect either fixation of a balanced Robertsonian translocation in domestic horses or, conversely, fixation of the fission of one metacentric chromosome into two acrocentric chromosomes in Przewalski's horses. A similar situation exists between the human and great ape genomes; in this case, because more species are [[extant taxon|extant]], it is apparent that the evolutionary sequence is a reduction of two acrocentric chromosomes in the great apes to one metacentric chromosome in humans. ===Telocentric=== A '''telocentric''' chromosome's centromere is located at the terminal end of the chromosome. [[Telomeres]] may extend from both ends of the chromosome. For example, the standard house mouse karyotype has only acrocentric chromosomes.<ref>[http://www.informatics.jax.org/silver/chapters/5-2.shtml 5.2 KARYOTYPES, CHROMOSOMES, AND TRANSLOCATIONS]<br/>{{cite journal |author=Waterston RH, Lindblad-Toh K, Birney E, ''et al.'' |title=Initial sequencing and comparative analysis of the mouse genome |journal=Nature |volume=420 |issue=6915 |pages=520–62 |year=2002 |month=December |pmid=12466850 |doi=10.1038/nature01262 |url=}}</ref> Humans do not possess telocentric chromosomes. Some authors denote extreme acrocentric chromosomes as telocentric- 21, 22, Y. ===Subtelocentric=== If chromosome's centromere is located closer to its end than to its center, it may be described as '''subtelocentric'''. ===Holocentric=== With '''holocentric''' chromosomes, the entire length of the chromosome acts as the centromere. Examples of this type of centromere can be found scattered throughout the plant and animal kingdoms<ref>{{cite journal |author=Dernburg AF |title=Here, there, and everywhere: kinetochore function on holocentric chromosomes |journal=J. Cell Biol. |volume=153 |issue=6 |pages=F33–8 |year=2001 |month=June |pmid=11402076 |pmc=2192025 |doi= 10.1083/jcb.153.6.F33|url=http://www.jcb.org/cgi/pmidlookup?view=long&pmid=11402076 |format=}} </ref> with the most well known example being in the nematode, ''[[Caenorhabditis elegans]]''. ===Telomere=== A telomere is a short and specific region of repetitive DNA at the end of a linear eukaryotic chromosome, which protects the end of the chromosome from deterioration. Its name is derived from the Greek nouns telos "end" and merοs "part". The telomere regions deter the degradation of genes near the ends of chromosomes by allowing for the shortening of chromosome ends, which necessarily occurs during chromosome replication.In 1975–1977, Elizabeth Blackburn, working as a postdoctoral fellow at Yale University with Joseph Gall, discovered the unusual nature of telomeres, with their simple repeated DNA sequences composing chromosome ends. Their work was published in 1978. The telomere shortening mechanism normally limits cells to a fixed number of divisions, and animal studies suggest that this is responsible for aging on the cellular level and sets a limit on lifespans. Telomeres protect a cell's chromosomes from fusing with each other or rearranging — abnormalities that can lead to cancer — and so cells are destroyed when their telomeres are consumed. Most cancers are the result of "immortal" cells that have ways of evading this programmed destruction. The maintenance of tolomeres depends on a specialized ribonucleoprotein (RNP) which is named tolomerase. Telomeres and tolomerase have different physical behavior but are given their substrate-enzyme relation which forces them to establish a productive interaction. However, the regulatory mechanism that controls their interaction still remains unknown.<ref>Londono-Vallejo, Arturo, and Raymund Wellinger. "Elsevier: Article Locator." ScienceDirect.com | Search through over 11 million science, health, medical journal full text articles and books.. N.p., n.d. Web. 6 Dec. 2012. <http://www.sciencedirect.com/science/article/pii/S0968000412000722#>. </ref> Elizabeth Blackburn, Carol Greider, and Jack Szostak were awarded the 2009 Nobel Prize in Physiology or Medicine for the discovery of how chromosomes are protected by telomeres and the enzyme telomerase. ===Structure and functions of telomere=== Telomeres are repetitive DNA sequences located at the termini of linear chromosomes of most eukaryotic organisms, and a few prokaryotes. Telomeres compensate for incomplete semi-conservative DNA replication at chromosomal ends. The protection against [[homologous recombination]] (HR) and [[non-homologous end joining]] (NHEJ) constitutes the essential “capping” role of telomeres that distinguishes them from DNA [[double-strand breaks]] (DSBs).<ref>Lundblad, 2000; Ferreira ''et al.'', 2004</ref> In most prokaryotes, chromosomes are circular and, thus, do not have ends to suffer premature replication termination. A small fraction of bacteria l chromosomes (such as those in Streptomyces and Borrelia) are linear and possess telomeres, which are very different from those of the eukaryotic chromosomes in structure and functions. The known structures of bacterial telomeres take the form of proteins bound to the ends of linear chromosomes, or hairpin loops of single-stranded DNA at the ends of the linear chromosomes.<ref>{{cite web|url=http://www.sci.sdsu.edu/~smaloy/MicrobialGenetics/topics/chroms-genes-prots/chromosomes.html|title=Bacterial Chromosome Structure|last=Maloy|first=Stanley|date=July 12, 2002|accessdate=2008-06-22}}</ref> In most multicellular eukaryotic organisms, telomerase is active only in germ cells, [[stem cell]]s and certain [[white blood cell]]s. There are theories that claim that the steady shortening of telomeres with each replication in somatic (body) cells may have a role in [[senescence]] and in the prevention of [[cancer]]. This is because the telomeres act as a sort of time-delay "fuse", eventually running out after a certain number of cell divisions and resulting in the eventual loss of vital genetic information from the cell's chromosome with future divisions. Telomere length varies greatly between species, from approximately 300 to 600 [[base pair]]s in yeast<ref>Shampay.J., Szostak,J.W. and Blackburn,E.H. (1984) Nature, 310, 154-157</ref> to many kilobases in humans, and usually is composed of arrays of [[guanine]]-rich, six- to eight-base-pair-long repeats. Eukaryotic telomeres normally terminate with 3′ single-stranded-DNA overhang, which is essential for telomere maintenance and capping. Multiple proteins binding single- and double-stranded telomere DNA have been identified.<ref>Blackburn, 2001; Smogorzewska and de Lange, 2004; Cech, 2004; De Lange ''et al.'', 2005; Kota and Runge, 1999</ref> These function in both telomere maintenance and capping. Telomeres form large loop structures called telomere loops, or T-loops. Here, the single-stranded DNA curls around in a long circle stabilized by telomere-binding proteins.<ref>Griffith J, Comeau L, Rosenfield S, Stansel R, Bianchi A, Moss H, de Lange T (1999). "Mammalian telomeres end in a large duplex loop". Cell 97 (4): 503–14.</ref> At the very end of the T-loop, the single-stranded telomere DNA is held onto a region of double-stranded DNA by the telomere strand disrupting the double-helical DNA and base pairing to one of the two strands. This triple-stranded structure is called a [[displacement loop]] or D-loop.<ref>Burge S, Parkinson G, Hazel P, Todd A, Neidle S (2006). "Quadruplex DNA: sequence, topology and structure". Nucleic Acids Res 34 (19): 5402–15.</ref> Telomere shortening in humans can induce replicative senescence, which blocks cell division. This mechanism appears to prevent genomic instability and development of cancer in human aged cells by limiting the number of cell divisions. However, shortened telomeres impair immune function which might also increase cancer susceptibility.<ref name="10.1002/ajhb.21127">{{cite journal |author=Eisenberg DTA |title=An evolutionary review of human telomere biology: The thrifty telomere hypothesis and notes on potential adaptive paternal effects. |journal=American Journal of Human Biology |year=2011 |doi=10.1002/ajhb.21127 |url=http://onlinelibrary.wiley.com/doi/10.1002/ajhb.21127/full}}</ref> Malignant cells that bypass this arrest become immortalized by telomere extension due mostly to the activation of telomerase, the reverse transcriptase enzyme responsible for synthesis of telomeres. However, 5–10% of human cancers activate the Alternative Lengthening of Telomeres (ALT) pathway, which relies on recombination-mediated elongation. Since shorter telomeres are thought to be a cause of poorer health and aging, this raises the question of why longer telomeres are not selected for to ameliorate these effects. A prominent explanation suggests that inheriting longer telomeres would cause increased cancer rates (e.g. Weinstein and Ciszek, 2002). However, a recent literature review and analysis <ref name="10.1002/ajhb.21127" /> suggests this is unlikely, because shorter telomeres and [[telomerase]] inactivation is more often associated with increased cancer rates, and the mortality from cancer occurs late in life when the force of [[natural selection]] is very low. An alternative explanation to the hypothesis that long telomeres are selected against due to their cancer promoting effects is the "thrifty telomere" hypothesis which suggests that the cellular proliferation effects of longer telomeres causes increased energy expenditures.<ref name="10.1002/ajhb.21127" /> In environments of energetic limitation, shorter telomeres might be an energy sparing mechanism. ===Human telomeres and cancer=== Human somatic cells lacking telomerase gradually lose telomeric sequences as a result of incomplete replication (Counter ''et al.'', 1992). As human telomeres grow shorter, eventually cells reach the limit of their replicative capacity and progress into senescence. Senescence involves p53 and pRb pathways and leads to the arrest of cell proliferation. It is thought that senescence plays an important role in suppression of emergence of cancer, although inheriting shorter telomeres probably does not protect against cancer (Eisenberg, 2011).<ref>{{cite journal |author=Eisenberg DTA |title=An evolutionary review of human telomere biology: The thrifty telomere hypothesis and notes on potential adaptive paternal effects. |journal=American Journal of Human Biology |year=2011 |doi=10.1002/ajhb.21127 |url=http://onlinelibrary.wiley.com/doi/10.1002/ajhb.21127/full}}</ref> With critically shortened telomeres, further cell proliferation can be achieved by inactivation of p53 and pRb pathways. Cells entering proliferation after inactivation of p53 and pRb pathways undergo crisis. Crisis is characterized by gross chromosomal rearrangements and genome instability, and almost all cells die. Rare cells emerge from crisis immortalized through telomere elongation by either activated telomerase or ALT (Colgina and Reddel, 1999; Reddel and Bryan, 2003). The first description of an ALT cell line demonstrated that the telomeres are highly heterogeneous in length and predicted a mechanism involving recombination (Murnane et al., 1994). Subsequent studies have confirmed a role for recombination in telomere maintenance by ALT (Dunham et al., 2000), however the exact mechanism of this pathway is yet to be determined. ALT cells produce abundant t-circles, possible products of intratelomeric recombination and t-loop resolution (Tomaska ''et al.'', 2000; 2009; Cesare and Griffith, 2004; Wang ''et al.'', 2004). Telomerase is a "ribonucleoprotein complex" composed of a protein component and an RNA primer sequence that acts to protect the terminal ends of chromosomes. The actions of telomerase are necessary because, during replication, DNA polymerase can synthesize DNA in only a 5' to 3' direction and can do so only by adding polynucleotides to an RNA primer that has already been placed at various points along the length of the DNA. These RNA strands must later be replaced with DNA. This replacement of the RNA primers is not a problem at origins of replication within the chromosome because DNA polymerase can use a previous stretch of DNA 5' to the RNA template as a template to backfill the sequence where the RNA primer was; at the terminal end of the chromosome, however, DNA polymerase cannot replace the RNA primer because there is no position 5' of the RNA primer where another primer can be placed, nor is there DNA upstream that can be used as a primer so that DNA polymerase can replace the RNA primer. Without telomeres at the end of DNA, this genetic sequence at the end of the chromosome would be deleted and the chromosome would grow shorter and shorter in subsequent replications. The telomere prevents this problem by employing a different mechanism to synthesize DNA at this point, thereby preserving the sequence at the terminal of the chromosome. This prevents chromosomal fraying and prevents the ends of the chromosome from being processed as a double-strand DNA break, which could lead to chromosome-to-chromosome telomere fusions. Telomeres are extended by telomerases, part of a protein subgroup of specialized [[reverse transcriptase]] enzymes known as <u>Te</u>lomerase <u>r</u>everse <u>t</u>ranscriptase(TERT) ('''TE'''lomerase '''R'''everse '''T'''ranscriptases) that are involved in synthesis of telomeres in humans and many other, but not all, organisms. However, because of DNA replication mechanisms, oxidative stress, and, because TERT expression is very low in many types of human cells, the telomeres of these cells shrink a little bit every time a cell divides, although, in other cellular compartments that require extensive cell division, such as [[stem cell]]s and certain [[white blood cell]]s, TERT is expressed at higher levels and telomere shortening is partially or fully prevented. [[Image:Parallel telomere quadruple.png|thumb|right|300px|Structure of parallel quadruplexes that can be formed by human telomeric DNA. Image created from [http://ndbserver.rutgers.edu/atlas/xray/structures/U/ud0017/ud0017.html NDB UD0017].]] In addition to its TERT protein component, telomerase also contains a piece of template RNA known as the TERC ('''TE'''lomerase '''R'''NA '''C'''omponent) or TR ('''T'''elomerase '''R'''NA). In [[human]]s, this TERC telomere sequence is a repeating string of TTAGGG, between 3 and 20 [[kilobase]]s in length. There are an additional 100-300 kilobases of telomere-associated repeats between the telomere and the rest of the chromosome. Telomere sequences vary from species to species, but, in general, one strand is rich in G with fewer Cs. These G-rich sequences can form four-stranded structures (G-quadruplexes), with sets of four bases held in plane and then stacked on top of each other with either a sodium or a potassium ion between the planar quadruplexes. If telomeres become too short, they have the potential to unfold from their presumed closed structure. It is thought that the cell detects this uncapping as DNA damage and then enters cellular senescence, growth arrest, or apoptosis, depending on the cell's genetic background (p53 status). Uncapped telomeres also result in chromosomal fusions. Since this damage cannot be repaired in normal somatic cells, the cell may even go into apoptosis. Many aging-related diseases are linked to shortened telomeres. Organs deteriorate as more and more of their cells die off or enter cellular senescence. At the very distal end of the telomere is a 300 bp single-stranded portion, which forms the T-Loop. This loop is analogous to a ''knot'', which stabilizes the telomere, preventing the telomere ends from being recognized as break points by the DNA repair machinery. Should non-homologous end joining occur at the telomeric ends, chromosomal fusion will result. The T-loop is held together by seven known proteins, the most notable ones being TRF1, TRF2, POT1, TIN1, and TIN2, collectively referred to as the shelterin complex. A study published in the May 3, 2005 issue of the American Heart Association journal ''Circulation'' found that weight gain and increased insulin resistance are correlated with greater telomere shortening over time. {| class="wikitable" |+ Some known telomere sequences |- ! Group ! Organism ! Telomeric repeat (5' to 3' toward the end) |- | [[Vertebrate]]s | [[Human]], [[mus musculus|mouse]], ''[[Xenopus laevis|Xenopus]]'' | TTAGGG |- | Filamentous [[fungus|fungi]] | ''[[Neurospora crassa]]'' | TTAGGG |- |rowspan="2"| [[Slime mould]]s | ''[[Physarum]]'', ''[[Didymium (slime mould)|Didymium]]'' | TTAGGG |- | ''[[Dictyostelid|Dictyostelium]]'' | AG(1-8) |- | [[Kinetoplastid]] protozoa | ''[[Trypanosoma]]'', ''[[Crithidia]]'' | TTAGGG |- |rowspan="3"| [[Ciliate]] protozoa | ''[[Tetrahymena]]'', ''[[Glaucoma (ciliate)|Glaucoma]]'' | TTGGGG |- | ''[[Paramecium]]'' | TTGGG(T/G) |- | ''[[Oxytricha]]'', ''[[Stylonychia]]'', ''[[Euplotes]]'' | TTTTGGGG |- | [[Apicomplexa]]n protozoa | ''[[Plasmodium]]'' | TTAGGG(T/C) |- | Higher [[plant]]s | ''[[Arabidopsis thaliana]]'' | TTTAGGG |- | [[Green alga]]e | ''[[Chlamydomonas]]'' | TTTTAGGG |- | [[Insect]]s | ''[[Bombyx mori]]'' | TTAGG |- | [[Roundworm]]s | ''[[Ascaris lumbricoides]]'' | TTAGGC |- | Fission [[yeast]]s | ''[[Schizosaccharomyces pombe]]'' | TTAC(A)(C)G(1-8) |- |rowspan="9"| Budding [[yeast]]s | ''[[Saccharomyces cerevisiae]]'' | TGTGGGTGTGGTG (from RNA template)<br /> or G(2-3)(TG)(1-6)T (consensus) |- | ''[[Saccharomyces castellii]]'' | TCTGGGTG |- | ''[[Candida glabrata]]'' | GGGGTCTGGGTGCTG |- | ''[[Candida albicans]]'' | GGTGTACGGATGTCTAACTTCTT |- | ''[[Candida tropicalis]]'' | GGTGTA[C/A]GGATGTCACGATCATT |- | ''[[Candida maltosa]]'' | GGTGTACGGATGCAGACTCGCTT |- | ''[[Candida guillermondii]]'' | GGTGTAC |- | ''[[Candida pseudotropicalis]]'' | GGTGTACGGATTTGATTAGTTATGT |- | ''[[Kluyveromyces lactis]]'' | GGTGTACGGATTTGATTAGGTATGT |} ===Mini and micro satellite=== Satellite DNA consists of very large arrays of tandemly repeating, non-coding DNA. Satellite DNA is the main component of functional centromeres, and form the main structural constituent of heterochromatin. The name "satellite DNA" refers to how repetitions of a short DNA sequence tend to produce a different frequency of the nucleotides adenine, cytosine, guanine and thymine, and thus have a different density from bulk DNA - such that they form a second or 'satellite' band when genomic DNA is separated on a density gradient. ====Types of satellite DNA==== Satellite DNA, together with [[minisatellite]] and [[Microsatellite (genetics)|microsatellite]] DNA, constitute the tandem repeats. Some types of satellite DNA in humans are: {| class="wikitable" |- ! Type ! Size of repeat unit (bp) | Location |- | α (alphoid DNA) | 171 | All chromosomes |- | β | 68 | Centromeres of chromosomes 1, 9, 13, 14, 15, 21, 22 and Y |- | Satellite 1 | 25-48 | Centromeres and other regions in heterochromatin of most chromosomes |- | Satellite 2 | 5 | Most chromosomes |- | Satellite 3 | 5 | Most chromosomes |} '''Minisatellite''' A '''minisatellite''' is a section of [[DNA]] that consists of a short series of bases 10–60 bp.These occur at more than 1,000 locations in the human genome. Some minisatellites contain a central (or "core") sequence of letters “GGGCAGGANG” (where N can be any base) or more generally a strand bias with purines (adenosine (A) and guanine (G)) on one strand and pyrimidines (cytosine (C) and thymine (T)) on the other. <!--Use the mnemonic "pure As Gold" and you will recall that the purines are Adenosine (A) and Guanine (G). Use the mnemonic "'CUT'" the Pie" and recall from the C-U-T that pyrimidines are Cytosine (C), Uracil (U)(RNA only for Uracil), and Thymidine (T).-->It has been proposed that this sequence per se encourages chromosomes to swap DNA. In alternative models, it is the presence of a neighbouring cis-acting meiotic double-strand break hotspot which is the primary cause of minisatellite repeat copy number variations. Somatic changes are suggested to result from replication difficulties (which might include replication slippage, among other phenomena). When such events occur, mistakes are made, thus causing minisatellites at over 1000 locations in a person's genome to have slightly different numbers of repeats, thereby making each individual unique. The most highly mutable minisatellite locus described so far is CEB1 (D2S90) described by Vergnaud.<ref>Buard J, Vergnaud G Complex recombination events at the hypermutable minisatellite CEB1 (D2S90)EMBO J.(1994 )vol.13 p3203–10 </ref>Minisatellites have been associated with chromosome fragile sites and are proximal to a number of recurrent translocation breakpoints. Some human minisatellites (~1%) have been demonstrated to be hypermutable, with an average mutation rate in the germline higher that 0.5% up to over 20%, making them the most unstable region in the human genome known to date. While other genomes (mouse, rat and pig) contain minisatellite-like sequences, none was found to be hypermutable. Since all hypermutable minisatellites contain internal variants, they provide extremely informative systems for analyzing the complex turnover processes that occur at this class of tandem repeat. Minisatellite variant repeat mapping by PCR (MVR-PCR) has been extensively used to chart the interspersion patterns of variant repeats along the array, which provides details on the structure of the alleles before and after mutation. Studies have revealed distinct mutation processes operating in somatic and germline cells. Somatic instability detected in blood DNA shows simple and rare intra-allelic events two to three orders of magnitude lower than in sperm. In contrast, complex inter-allelic conversion-like events occur in the germline.[6] Additional analyses of DNA sequences flanking human minisatellites have also revealed an intense and highly localized meiotic crossover hotspot that is centered upstream of the unstable side of minisatellite arrays. Repeat turnover therefore appears to be controlled by recombinational activity in DNA that flanks the repeat array and results in a polarity of mutation. These findings have suggested that minisatellites most probably evolved as bystanders of localized meiotic recombination hotspots in the human genome. ''Application'' Since the fortuitous discovery of the first human minisatellite in 1980 by A.R. Wyman and R. White<ref>{{cite journal |author=Wyman AR, White R |title=A highly polymorphic locus in human DNA |journal=Proc. Natl. Acad. Sci. U.S.A. |volume=77 |issue=11 |pages=6754–8 |year=1980 |month=November |pmid=6935681 |pmc=350367 |doi=10.1073/pnas.77.11.6754 }}</ref> and especially the discovery that the extreme polymorphism of minisatellites made them superb for [[DNA fingerprinting]] by [[Alec Jeffreys]],<ref>{{cite journal |author=Jeffreys AJ |title=Genetic fingerprinting |journal=Nat. Med. |volume=11 |issue=10 |pages=1035–9 |year=2005 |month=October |pmid=16211029 |doi=10.1038/nm1005-1035 }}</ref> this class of repeats has been an intense focus of studies that have addressed the turnover mechanisms that provoke their instability. Due to their high level of polymorphism, minisatellites have been extensively used for DNA fingerprinting as well as for genetic markers in linkage analysis and population studies. Minisatellites have also been implicated as regulators of gene expression (e.g., at levels of transcription, alternative splicing, or imprint control) or as part of bona fide open reading frames. '''Microsatellites''' Microsatellites, also known as Simple Sequence Repeats (SSRs), or sometimes Short Tandem Repeats (STRs), are repeating sequences of 1-6 base pairs of DNA. Microsatellites are typically neutral and co-dominant. They are used as molecular markers in genetics, for kinship, population and other studies. They can also be used to study gene duplication or deletion. One common example of a microsatellite is a (CA)n repeat, where n is variable between alleles. These markers often present high levels of inter- and intra-specific polymorphism, particularly when tandem repeats number ten or greater. The repeated sequence is often simple, consisting of two, three or four nucleotides (di-, tri-, and tetranucleotide repeats respectively), and can be repeated 10 to 100 times. CA nucleotide repeats are very frequent in human and other genomes, and are present every few thousand base pairs. As there are often many alleles present at a microsatellite locus, genotypes within pedigrees are often fully informative, in that the progenitor of a particular allele can often be identified. In this way, microsatellites are ideal for determining paternity, population genetic studies and recombination mapping. It is also the only molecular marker to provide clues about which alleles are more closely related. Microsatellites owe their variability to an increased rate of mutation compared to other neutral regions of DNA. These high rates of mutation can be explained most frequently by slipped strand mispairing (slippage) during DNA replication on a single DNA strand. Mutation may also occur during recombination during meiosis.[4] Some errors in slippage are rectified by proofreading mechanisms within the nucleus, but some mutations can escape repair. The size of the repeat unit, the number of repeats and the presence of variant repeats are all factors, as well as the frequency of transcription in the area of the DNA repeat. Interruption of microsatellites, perhaps due to mutation, can result in reduced polymorphism. However, this same mechanism can occasionally lead to incorrect amplification of microsatellites; if slippage occurs early on during PCR, microsatellites of incorrect lengths can be amplified. ''Limitations'' Microsatellites have proved to be versatile molecular markers, particularly for population analysis, but they are not without limitations. Microsatellites developed for particular species can often be applied to closely related species, but the percentage of loci that successfully amplify may decrease with increasing [[genetic distance]]. Point mutation in the primer annealing sites in such species may lead to the occurrence of ‘[[null allele]]s’, where microsatellites fail to amplify in PCR assays.<ref name="Dakin">{{cite journal | author= Dakin, E.E. & Avise, J.C. | year=2004 | title=Microsatellite null alleles in parentage analysis | journal=Heredity |volume=93|pages=504 – 509 | doi=10.1038/sj.hdy.6800545 | pmid= 15292911 | last1= Dakin | first1= EE | last2= Avise | first2= JC | issue= 5}}</ref> Null alleles can be attributed to several phenomena. Sequence divergence in flanking regions can lead to poor primer annealing, especially at the 3’ section, where extension commences; preferential amplification of particular size alleles due to the competitive nature of PCR can lead to heterozygous individuals being scored for homozygosity (partial null). PCR failure may result when particular loci fail to amplify, whereas others amplify more efficiently and may appear homozygous on a gel assay, when they are in reality heterozygous in the genome. Null alleles complicate the interpretation of microsatellite allele frequencies and thus make estimates of relatedness faulty. Furthermore, [[stochastic]] effects of sampling that occurs during mating may change allele frequencies in a way that is very similar to the effect of null alleles; an excessive frequency of homozygotes causing deviations from Hardy-Weinberg equilibrium expectations. Since null alleles are a technical problem and sampling effects that occur during mating are a real biological property of a population, it is often very important to distinguish between them if excess homozygotes are observed. When using microsatellites to compare species, homologous loci may be easily amplified in related species, but the number of loci that amplify successfully during PCR may decrease with increased genetic distance between the species in question. Mutation in microsatellite alleles is biased in the sense that larger alleles contain more bases, and are therefore likely to be mistranslated in DNA replication. Smaller alleles also tend to increase in size, whereas larger alleles tend to decrease in size, as they may be subject to an upper size limit; this constraint has been determined but possible values have not yet been specified. If there is a large size difference between individual alleles, then there may be increased instability during recombination at meiosis. In tumour cells, where controls on replication may be damaged, microsatellites may be gained or lost at an especially high frequency during each round of mitosis. Hence a tumour cell line might show a different genetic fingerprint from that of the host tissue. ''Mechanisms for change'' The most common cause of length changes in short sequence repeats is replication slippage, caused by mismatches between DNA strands while being replicated during meiosis. Typically, slippage in each microsatellite occurs about once per 1,000 generations (Weber 1993). Slippage changes in repetitive DNA are orders of magnitude more common than point mutations in other parts of the genome. Most slippage results in a change of just one repeat unit, and slippage rates vary for different repeat unit sizes, and within different species. Short sequence repeats are distributed throughout the genome. Presumably, their most probable means of expression will vary, depending on their location. ''In proteins'' In mammals, 20% to 40% of proteins contain repeating sequences of amino acids caused by short sequence repeats. Most of the short sequence repeats within protein-coding portions of the genome have a repeating unit of three nucleotides, since that length will not cause frame-shift mutations (Sutherland 1995). Each trinucleotide repeating sequence is transcribed into a repeating series of the same amino acid. In yeasts, the most common repeated amino acids are glutamine, glutamic acid, asparagine, aspartic acid and serine. These repeating segments can affect the physical and chemical properties of proteins, with the potential for producing gradual and predictable changes in protein action. For example, length changes in tandemly repeating regions in the Runx2 gene lead to differences in facial length in domesticated dogs (''Canis familiaris''), with an association between longer sequence lengths and longer faces. This association also applies to a wider range of ''Carnivora'' species . Length changes in polyalanine tracts within the HoxA13 gene are linked to hand-foot-genital syndrome, a developmental disorder in humans . Length changes in other triplet repeats are linked to more than 40 neurological diseases in humans <ref>Pearson, C. E., et al. 2005. Repeat instability: mechanisms of dynamic mutations. Nat. Rev. Gen. 6:729-742.</ref>. Evolutionary changes from replication slippage also occur in simpler organisms. For example, microsatellite length changes are common within surface membrane proteins in yeast, providing rapid evolution in cell properties. Specifically, length changes in the FLO1 gene control the level of adhesion to substrates. Short sequence repeats also provide rapid evolutionary change to surface proteins in pathenogenic bacteria, perhaps so they can keep up with immunological changes in their hosts. This is known as the Red Queen hypothesis. Length changes in short sequence repeats in a fungus (''Neurospora crassa'') control the duration of its circadian clock cycles <ref>Michael, T. P., et al. 2008. Simple sequence repeats provide a substrate for phenotypic variation in the Neurospora crassa circadian clock. PLoS One 2:e795.</ref>. [[File:PLoSBiol3.5.Fig1bNucleus46Chromosomes.jpg|thumb|200px|left|The 23 human chromosome territories during [[prometaphase]] in [[fibroblast]] cells.<ref>[http://www.plosbiology.org/article/info:doi/10.1371/journal.pbio.0030157 Bolzer et al., (2005) Three-Dimensional Maps of All Chromosomes in Human Male Fibroblast Nuclei and Prometaphase Rosettes. PLoS Biol 3(5): e157 DOI: 10.1371/journal.pbio.0030157]</ref>]] ''Gene regulation'' Length changes of microsatellites within promoters and other cis-regulatory regions can also change gene expression quickly, between generations. The human genome contains many (>16,000) short sequence repeats in regulatory regions, which provide ‘tuning knobs’ on the expression of many genes (Rockman 2002). Length changes in bacterial SSRs can affect fimbriae formation in ''Haemophilus influenza'', by altering promoter spacing (Moxon 1994). Minisatellites are also linked to abundant variations in cis-regulatory control regions in the human genome . And microsatellites in control regions of the Vasopressin 1a receptor gene in voles influence their social behavior, and level of monogamy. ''Within introns'' Microsatellites within introns also influence phenotype, through means that are not currently understood. For example, a GAA triplet expansion in the first intron of the X25 gene appears to interfere with transcription, and causes Friedreich Ataxia (Bidichandani 1998). Tandem repeats in the first intron of the Asparagine synthetase gene are linked to acute lymphoblastic leukemia. A repeat polymorphism in the fourth intron of the NOS3 gene is linked to hypertension in a Tunisian population (Jemaa 2008). Reduced repeat lengths in the EGFR gene are linked with osteosarcomas. ''Within transposons'' Microsatellites are distributed throughout the genome . Almost 50% of the human genome is contained in various types of transposable elements (also called transposons, or ‘jumping genes’), and many of them contain repetitive DNA . It is probable that short sequence repeats in those locations are also involved in the regulation of gene expression <ref>Tomilin, N. V. 2008. Regulation of mammalian gene expression by retroelements and non-coding tandem repeats. BioEssays 30:338-348</ref>. == Number of chromosomes in various organisms == === Eukaryotes === These tables give the total number of chromosomes (including sex chromosomes) in a cell nucleus. For example, human cells are [[diploid]] and have 22 different types of [[autosome]], each present as two copies, and two [[sex chromosomes]]. This gives 46 chromosomes in total. Other organisms have more than two copies of their chromosomes, such as [[Common wheat|bread wheat]], which is ''hexaploid'' and has six copies of seven different chromosomes&nbsp;– 42 chromosomes in total. {| border="0" | STYLE="vertical-align: top"| {| class="wikitable" style="float:left; margin:1em 0 1em 1em" |+ Chromosome numbers in some plants |- ! Plant Species !! # |- | ''[[Arabidopsis thaliana]]'' (diploid)<ref>{{cite journal |author=Armstrong SJ, Jones GH |title=Meiotic cytology and chromosome behaviour in wild-type Arabidopsis thaliana |journal=J. Exp. Bot. |volume=54 |issue=380 |pages=1–10 |year=2003 |month=January |pmid=12456750 |url=http://jexbot.oxfordjournals.org/cgi/pmidlookup?view=long&pmid=12456750 |doi=10.1093/jxb/54.380.1}}</ref> || 10 |- | [[Rye]] (diploid)<ref>{{cite journal |author=Gill BS, Kimber G |title=The Giemsa C-banded karyotype of rye |journal=Proc. Natl. Acad. Sci. U.S.A. |volume=71 |issue=4 |pages=1247–9 |year=1974 |month=April |pmid=4133848 |pmc=388202 |doi=10.1073/pnas.71.4.1247}}</ref> || 14 |- | [[Maize]] (diploid or palaeotetraploid)<ref>{{cite journal |author=Kato A, Lamb JC, Birchler JA |title=Chromosome painting using repetitive DNA sequences as probes for somatic chromosome identification in maize |journal=Proc. Natl. Acad. Sci. U.S.A. |volume=101 |issue=37 |pages=13554–9 |year=2004 |month=September |pmid=15342909 |pmc=518793 |doi=10.1073/pnas.0403659101 |url=http://www.pnas.org/cgi/pmidlookup?view=long&pmid=15342909}}</ref> || 20 |- | [[Einkorn wheat]] (diploid)<ref name=Dubcovsky>{{cite journal |author=Dubcovsky J, Luo MC, Zhong GY, ''et al.'' |title=Genetic map of diploid wheat, Triticum monococcum L., and its comparison with maps of Hordeum vulgare L |journal=Genetics |volume=143 |issue=2 |pages=983–99 |year=1996 |pmid=8725244 |pmc=1207354}}</ref> || 14 |- | [[Durum wheat]] (tetraploid)<ref name=Dubcovsky/> || 28 |- | [[Bread wheat]] (hexaploid)<ref name=Dubcovsky/> || 42 |- | Cultivated tobacco (tetraploid)<ref>{{cite journal |author=Kenton A, Parokonny AS, Gleba YY, Bennett MD |title=Characterization of the Nicotiana tabacum L. genome by molecular cytogenetics |journal=Mol. Gen. Genet. |volume=240 |issue=2 |pages=159–69 |year=1993 |month=August |pmid=8355650 |doi=10.1007/BF00277053}}</ref> || 48 |- | [[Ophioglossum|Adder's Tongue Fern]] (diploid)<ref>{{cite journal |author=Leitch IJ, Soltis DE, Soltis PS, Bennett MD |title=Evolution of DNA amounts across land plants (embryophyta) |journal=Ann. Bot. |volume=95 |issue=1 |pages=207–17 |year=2005 |pmid=15596468 |url=http://aob.oxfordjournals.org/cgi/content/full/95/1/207 | doi = 10.1093/aob/mci014}}</ref> || approx. 1,200|} |} | STYLE="vertical-align: top"| {| class="wikitable" style="float:left; margin:1em 0 1em 1em" |+ Chromosome numbers (2n) in some animals |- ! Species !! # !! Species !! # |- | [[Drosophila melanogaster|Common fruit fly]] || 8 | [[Guinea Pig]]<ref>{{cite journal |author=Umeko Semba, Yasuko Umeda, Yoko Shibuya, Hiroaki Okabe, Sumio Tanase and Tetsuro Yamamoto |title=Primary structures of guinea pig high- and low-molecular-weight kininogens | doi = 10.1016/j.intimp.2004.06.003|journal=International Immunopharmacology |volume=4 |issue=10-11 |pages=1391–1400 |year=2004 |url=http://www.sciencedirect.com/science/article/B6W7N-4CX6PRC-1/2/97487fdf611a04e3c88690da9e6d853b |pmid=15313436}}</ref>|| 64 |- | [[Guppy]] (''poecilia reticulata'')<ref>{{cite web |url=http://fancyguppy.webs.com/genetics.htm |title=The Genetics of the Popular Aquarium Pet - Guppy Fish |accessdate=2009-12-06}}</ref> || 46 | [[Garden snail]]<ref>{{cite journal |author=Vitturi R, Libertini A, Sineo L, ''et al.'' |title=Cytogenetics of the land snails Cantareus aspersus and C. mazzullii (Mollusca: Gastropoda: Pulmonata) |journal=Micron |volume=36 |issue=4 |pages=351–7 |year=2005 |pmid=15857774 |doi=10.1016/j.micron.2004.12.010}}</ref> || 54 |- | [[Earthworm]] (''Octodrilus complanatus'')<ref>{{cite journal |author=Vitturi R, Colomba MS, Pirrone AM, Mandrioli M |title=rDNA (18S-28S and 5S) colocalization and linkage between ribosomal genes and (TTAGGG)(n) telomeric sequence in the earthworm, Octodrilus complanatus (Annelida: Oligochaeta: Lumbricidae), revealed by single- and double-color FISH | doi = 10.1093/jhered/93.4.279|journal=J. Hered. |volume=93 |issue=4 |pages=279–82 |year=2002 |pmid=12407215 |url=http://jhered.oxfordjournals.org/cgi/content/full/93/4/279}}</ref> || 36 | [[Tibetan fox]] || 36 |- | [[Domestic cat]]<ref>{{cite journal |author=Nie W, Wang J, O'Brien PC, ''et al.'' |title=The genome phylogeny of domestic cat, red panda and five mustelid species revealed by comparative chromosome painting and G-banding |journal=Chromosome Res. |volume=10 |issue=3 |pages=209–22 |year=2002 |pmid=12067210 |doi=10.1023/A:1015292005631}}</ref> || 38 | [[Domestic pig]] || 38 |- | [[Laboratory mouse]]<ref name=Romanenko>{{Cite journal | doi = 10.1007/s00335-006-0081-z | pmid = 17143584 | issn = 0938-8990 | volume = 17 | issue = 12 | pages = 1183–1192 | last = Romanenko | first = Svetlana A | coauthors = Polina L Perelman, Natalya A Serdukova, Vladimir A Trifonov, Larisa S Biltueva, Jinhuan Wang, Tangliang Li, Wenhui Nie, Patricia C. M. O'Brien, Vitaly T. Volobouev, Roscoe Stanyon, Malcolm A. Ferguson-Smith, Fengtang Yang, Alexander S. Graphodatsky | title = Reciprocal chromosome painting between three laboratory rodent species | journal = Mammalian Genome: Official Journal of the International Mammalian Genome Society | accessdate = 2009-10-14 | date = 2006-12 | url = http://www.ncbi.nlm.nih.gov/pubmed/17143584 }}</ref><ref name=Painter>[http://www.esp.org/foundations/genetics/classical/holdings/Genetics/Genetics-1928-13-2-180.pdf A Comparison of the chromosomes of the rat and mouse with reference to the question of chromosome homology in mammals]</ref> || 40 | [[Laboratory rat]]<ref name=Painter/> || 42 |- | [[Rabbit]] (''Oryctolagus cuniculus'')<ref>{{Cite journal | doi = 10.1159/000069807 | issn = 1424-859X | volume = 98 | issue = 2-3 | pages = 199–205 | last = Hayes | first = H. | coauthors = C. Rogel-Gaillard, C. Zijlstra, N.A. de Haan, C. Urien, N. Bourgeaux, M. Bertaud, A.A. Bosma | title = Establishment of an R-banded rabbit karyotype nomenclature by FISH localization of 23 chromosome-specific genes on both G- and R-banded chromosomes | journal = Cytogenetic and Genome Research | accessdate = 2009-10-14 | year = 2002 | url = http://content.karger.com/produktedb/produkte.asp?typ=fulltext&file=CGR98199 | pmid = 12698004 }}</ref> || 44 | [[Syrian hamster]]<ref name=Romanenko/> || 44 |- | [[Hare]]s<ref>{{cite journal |author=T.J. Robinson, F. Yang, W.R. Harrison| title=Chromosome painting refines the history of genome evolution in hares and rabbits (order Lagomorpha) |journal=Cytogenic and Genetic Research |volume=96 |pages=223–227 |year=2002 |doi = 10.1159/000063034 |url=http://content.karger.com/ProdukteDB/produkte.asp?Aktion=ShowAbstract&ArtikelNr=63034&Ausgabe=228416&ProduktNr=224037 |pmid=12438803 |issue=1-4}}</ref><ref>{{cite web |url=http://wildlife1.wildlifeinformation.org/s/00Ref/BooksContents/b605.htm |title=Rabbits, Hares and Pikas. Status Survey and Conservation Action Plan |section= 4.W4 |pages= 61–94}}</ref>|| 48 | [[Human]]<ref name=Grouchy/> ||46 |- | [[Gorilla]]s<!--both species-->, [[Chimpanzee]]s<!--both species--><ref name=Grouchy>{{cite journal |author=De Grouchy J |title=Chromosome phylogenies of man, great apes, and Old World monkeys |journal=Genetica |volume=73 |issue=1-2 |pages=37–52 |year=1987 |pmid=3333352}}</ref> || 48 | [[Domestic sheep]] || 54 |- | [[Elephant]]s<ref>{{cite journal |author=Houck ML, Kumamoto AT, Gallagher DS, Benirschke K |title=Comparative cytogenetics of the African elephant (Loxodonta africana) and Asiatic elephant (Elephas maximus) |journal=Cytogenet. Cell Genet. |volume=93 |issue=3-4 |pages=249–52 |year=2001 |pmid=11528120 |doi=10.1159/000056992}}</ref> || 56<!-- taxon? --> | [[Cattle|Cow]] || 60 |- | [[Donkey]] || 62 | [[Horse]] || 64 |- | [[Dog]]<ref>{{cite journal |author=Wayne RK, Ostrander EA |title=Origin, genetic diversity, and genome structure of the domestic dog |journal=Bioessays |volume=21 |issue=3 |pages=247–57 |year=1999 |pmid=10333734 | doi = 10.1002/(SICI)1521-1878(199903)21:3<247::AID-BIES9>3.0.CO;2-Z}}</ref> || 78 | [[Kingfisher]]<ref>{{cite journal |author=Burt DW |title=Origin and evolution of avian microchromosomes |journal=Cytogenet. Genome Res. |volume=96 |issue=1-4 |pages=97–112 |year=2002 |pmid=12438785 |doi=10.1159/000063018}}</ref> || 132 |- | [[Goldfish]]<ref>{{cite journal |author=Ciudad J, Cid E, Velasco A, Lara JM, Aijón J, Orfao A |title=Flow cytometry measurement of the DNA contents of G0/G1 diploid cells from three different teleost fish species |journal=Cytometry |volume=48 |issue=1 |pages=20–5 |year=2002 |pmid=12116377 | doi = 10.1002/cyto.10100}}</ref> || 100-104 | [[Bombyx mori|Silkworm]]<ref>{{cite journal |author=Yasukochi Y, Ashakumary LA, Baba K, Yoshido A, Sahara K |title=A second-generation integrated map of the silkworm reveals synteny and conserved gene order between lepidopteran insects |journal=Genetics |volume=173 |issue=3 |pages=1319–28 |year=2006 |pmid=16547103 |doi=10.1534/genetics.106.055541 |pmc=1526672}}</ref> || 56 |} | STYLE="vertical-align: top"| {| class="wikitable" style="float:right; margin:1em 0 1em 1em" |+ Chromosome numbers in other organisms |- ! Species !! Large<br />Chromosomes !! Intermediate<br />Chromosomes !! [[Microchromosome]]s |- | ''[[Trypanosoma brucei]]'' || 11 || 6 || ~100 |- |[[Domestic Pigeon]] (''Columba livia domestics'')<ref>{{Cite journal | doi = 10.1266/jjg.44.163 | issn = 1880-5787 | volume = 44 | issue = 3 | pages = 163–170 | last = Itoh | first = Masahiro | coauthors = Tatsuro Ikeuchi, Hachiro Shimba, Michiko Mori, Motomichi Sasaki, Sajiro Makino | title = A COMPARATIVE KARYOTYPE STUDY IN FOURTEEN SPECIES OF BIRDS | journal = The Japanese journal of genetics | accessdate = 2009-10-14 | year = 1969 | url = http://www.journalarchive.jst.go.jp/english/jnlabstract_en.php?cdjournal=ggs1921&cdvol=44&noissue=3&startpage=163 }}</ref> || 18 || - || 59-63 |- | [[Chicken]]<ref>{{cite journal |author=Smith J, Burt DW |title=Parameters of the chicken genome (Gallus gallus) |journal=Anim. Genet. |volume=29 |issue=4 |pages=290–4 |year=1998 |pmid=9745667 |doi=10.1046/j.1365-2052.1998.00334.x}}</ref> || 8 || 2 sex chromosomes || 60 |} |} Normal members of a particular eukaryotic [[species]] all have the same number of nuclear chromosomes (see the table). Other eukaryotic chromosomes, i.e., mitochondrial and plasmid-like small chromosomes, are much more variable in number, and there may be thousands of copies per cell. Asexually reproducing species have one set of chromosomes, which are the same in all body cells. However, asexual species can be either haploid or diploid. sexual reproduction|Sexually reproducing species have somatic cells (body cells), which are [[ploidy#Diploid|diploid]] [2n] having two sets of chromosomes, one from the mother and one from the father. Gametes, reproductive cells, are [[ploidy#Haploid and monoploid|haploid]] [n]: They have one set of chromosomes. Gametes are produced by meiosis of a diploid germ line cell. During meiosis, the matching chromosomes of father and mother can exchange small parts of themselves (crossover), and thus create new chromosomes that are not inherited solely from either parent. When a male and a female gamete merge (fertilization), a new diploid organism is formed. Some animal and plant species are polyploid [Xn]: They have more than two sets of homologous chromosomes. Plants important in agriculture such as tobacco or wheat are often polyploid, compared to their ancestral species. Wheat has a haploid number of seven chromosomes, still seen in some cultivars as well as the wild progenitors. The more-common pasta and bread wheats are polyploid, having 28 (tetraploid) and 42 (hexaploid) chromosomes, compared to the 14 (diploid) chromosomes in the wild wheat.<ref>Sakamura, T. (1918), ''Kurze Mitteilung uber die Chromosomenzahlen und die Verwandtschaftsverhaltnisse der Triticum-Arten''. Bot. Mag., 32: 151-154.</ref> === Prokaryotes === Prokaryote species generally have one copy of each major chromosome, but most cells can easily survive with multiple copies.<ref>Charlebois R.L. (ed) 1999. ''Organization of the prokaryote genome''. ASM Press, Washington DC.</ref> For example, ''Buchnera'', a symbiont of aphids has multiple copies of its chromosome, ranging from 10–400 copies per cell.<ref>{{cite journal |author=Komaki K, Ishikawa H |title=Genomic copy number of intracellular bacterial symbionts of aphids varies in response to developmental stage and morph of their host |journal=Insect Biochem. Mol. Biol. |volume=30 |issue=3 |pages=253–8 |year=2000 |month=March |pmid=10732993 |doi=10.1016/S0965-1748(99)00125-3}}</ref> However, in some large bacteria, such as ''[[Epulopiscium fishelsoni]]'' up to 100,000 copies of the chromosome can be present.<ref>{{cite journal |author=Mendell JE, Clements KD, Choat JH, Angert ER |title=Extreme polyploidy in a large bacterium |journal=Proc. Natl. Acad. Sci. U.S.A. |volume=105 |issue=18 |pages=6730–4 |year=2008 |month=May |pmid=18445653 |doi=10.1073/pnas.0707522105 |url=http://www.pnas.org/cgi/pmidlookup?view=long&pmid=18445653 |pmc=2373351}}</ref> Plasmids and plasmid-like small chromosomes are, as in eukaryotes, very variable in copy number. The number of plasmids in the cell is almost entirely determined by the rate of division of the plasmid&nbsp;– fast division causes high copy number, and vice versa. ==chromosome anomaly, abnormality or aberration== When the chromosome's structure is altered. This can take several forms: ''Deletions:'' A portion of the chromosome is missing or deleted. Known disorders in humans include Wolf-Hirschhorn syndrome, which is caused by partial deletion of the short arm of chromosome 4; and Jacobsen syndrome, also called the terminal 11q deletion disorder. ''Duplications:'' A portion of the chromosome is duplicated, resulting in extra genetic material. Known human disorders include Charcot-Marie-Tooth disease type 1A which may be caused by duplication of the gene encoding peripheral myelin protein 22 (PMP22) on chromosome 17. ''Translocations:'' When a portion of one chromosome is transferred to another chromosome. There are two main types of translocations. In a reciprocal translocation, segments from two different chromosomes have been exchanged. In a Robertsonian translocation, an entire chromosome has attached to another at the Centromere - in humans these only occur with chromosomes 13, 14, 15, 21 and 22. ''Inversions:'' A portion of the chromosome has broken off, turned upside down and reattached, therefore the genetic material is inverted. Rings: A portion of a chromosome has broken off and formed a circle or ring. This can happen with or without loss of genetic material. ''Isochromosome:'' Formed by the mirror image copy of a chromosome segment including the centromere. Chromosome instability syndromes are a group of disorders characterized by chromosomal instability and breakage. They often lead to an increased tendency to develop certain types of malignancies. Chromosomal aberrations are disruptions in the normal chromosomal content of a cell and are a major cause of genetic conditions in humans, such as Down syndrome. Some chromosome abnormalities do not cause disease in carriers, such as translocations, or chromosomal inversions, although they may lead to a higher chance of birthing a child with a chromosome disorder. Abnormal numbers of chromosomes or chromosome sets, aneuploidy, may be lethal or give rise to genetic disorders. Genetic counseling is offered for families that may carry a chromosome rearrangement. The gain or loss of DNA from chromosomes can lead to a variety of genetic disorders. Human examples include: '''Cri du chat''', which is caused by the deletion of part of the short arm of chromosome 5. "Cri du chat" means "cry of the cat" in French, and the condition was so-named because affected babies make high-pitched cries that sound like those of a cat. Affected individuals have wide-set eyes, a small head and jaw, moderate to severe mental health issues, and are very short. '''Down syndrome,''' usually is caused by an extra copy of chromosome 21 (trisomy 21). Characteristics include decreased muscle tone, stockier build, asymmetrical skull, slanting eyes and mild to moderate developmental disability.[49] '''Edwards syndrome,''' which is the second-most-common trisomy; Down syndrome is the most common. It is a trisomy of chromosome 18. Symptoms include motor retardation, developmental disability and numerous congenital anomalies causing serious health problems. Ninety percent die in infancy; however, those that live past their first birthday usually are quite healthy thereafter. They have a characteristic clenched hands and overlapping fingers. Idic15, abbreviation for Isodicentric 15 on chromosome 15; also called the following names due to various researches, but they all mean the same; IDIC(15), Inverted duplication 15, extra Marker, Inv dup 15, partial tetrasomy 15 '''Jacobsen syndrome''', also called the terminal 11q deletion disorder. This is a very rare disorder. Those affected have normal intelligence or mild developmental disability, with poor expressive language skills. Most have a bleeding disorder called Paris-Trousseau syndrome. '''Klinefelter's syndrome (XXY)'''. Men with Klinefelter syndrome are usually sterile, and tend to have longer arms and legs and to be taller than their peers. Boys with the syndrome are often shy and quiet, and have a higher incidence of speech delay and dyslexia. During puberty, without testosterone treatment, some of them may develop gynecomastia. '''Patau Syndrome''', also called D-Syndrome or trisomy-13. Symptoms are somewhat similar to those of trisomy-18, but they do not have the characteristic hand shape. Small supernumerary marker chromosome. This means there is an extra, abnormal chromosome. Features depend on the origin of the extra genetic material. Cat-eye syndrome and isodicentric chromosome 15 syndrome (or Idic15) are both caused by a supernumerary marker chromosome, as is Pallister-Killian syndrome. '''Triple-X syndrome (XXX)'''. XXX girls tend to be tall and thin. They have a higher incidence of dyslexia. Turner syndrome (X instead of XX or XY). In Turner syndrome, female sexual characteristics are present but underdeveloped. People with Turner syndrome often have a short stature, low hairline, abnormal eye features and bone development and a "caved-in" appearance to the chest. '''XYY syndrome'''. XYY boys are usually taller than their siblings. Like XXY boys and XXX girls, they are somewhat more likely to have learning difficulties. Wolf-Hirschhorn syndrome, which is caused by partial deletion of the short arm of chromosome 4. It is characterized by severe growth retardation and severe to profound mental health issues. ==Lampbrush chromosomes== [[Image:Polyten chromosome.jpg|thumb|Polytene chromosome]] Lampbrush chromosomes (first seen by Flemming in 1882) are a special form of chromosomes that are found in the growing oocytes (immature eggs) of most animals, except mammals. Lampbrush chromosomes of tailed and tailless amphibians, birds and insects are described best of all . Chromosomes transform into the lampbrush form during the diplotene stage of meiotic prophase I due to an active transcription of many genes. They are highly extended meiotic halve-bivalents, each consisting of 2 sister chromatids. Lampbrush chromosomes are clearly visible even in the light microscope, where they are seen to be organized into a series of chromomeres with large chromatin loops extended laterally. Amphibian and avian lampbrush chromosomes can be microsurgically isolated form oocyte nucleus (germinal vesicle) with either forceeps or needles.A given loop always contains the same DNA sequence, and it remains extended in the same manner as the oocytes grows. These chromosomes are producing large amounts of RNA for the oocyte, and most of the genes present in the DNA loops are being actively expressed. Each lateral loop contains one or several transcription units with polarized RNP-matrix coating the DNA axis of the loop. The majority of the DNA, however, is not in loops but remains highly condensed in the chromomeres on the axis, where genes are generally not expressed. It is thought that the interphase chromosomes of all eukaryotes are similarly arranged in loops. Although these loops are normally too small and fragile to be easily observed in a light microscope, other methods can be used to infer their presence. For example, it has become possible to assess the frequency with which two loci along an interphase chromosome are paired with each other, thus revealing candidates for the sites on chromatin that form the closely apposed bases of loop structures. These experiments and others suggest that the DNA in human chromosomes is organized into loops of different lengths. A typical loop might contain between 50,000 and 200,000 nucleotide pairs of DNA, although loops of a million nucleotide pairs have also been suggested.<ref>http://en.wikipedia.org/w/index.php?title=Lampbrush_chromosome&oldid=423150981</ref> Giant chromosomes in the lampbrush form are useful model for studying chromosome organization, genome function and gene expression during meiotic prophase, since they allow the individual transcription units to be visualized. Moreover lampbrush chromosomes are widely used for high-resolution mapping of DNA sequences and construction of detail cytological maps of individual chromosomes.<ref>http://en.wikipedia.org/w/index.php?title=Lampbrush_chromosome&oldid=423150981</ref> To increase cell volume, some specialized cells undergo repeated rounds of DNA replication without cell division (endomitosis), forming a giant polytene chromosome. Polytene chromosomes form when multiple rounds of replication produce many sister chromatids that remain synapsed together. In addition to increasing the volume of the cells' nuclei and causing cell expansion, polytene cells may also have a metabolic advantage as multiple copies of genes permits a high level of gene expression. In Drosophila melanogaster, for example, the chromosomes of the larval salivary glands undergo many rounds of endoreplication, to produce large amounts of glue before pupation.<ref>http://en.wikipedia.org/w/index.php?title=Lampbrush_chromosome&oldid=423150981</ref> ==Polytene chromosomes== Polytene chromosomes have characteristic light and dark banding patterns that can be used to identify chromosomal rearrangements and deletions. Dark banding frequently corresponds to inactive chromatin, whereas light banding is usually found at areas with higher transcriptional activity. The banding patterns of the polytene chromosomes of Drosophila melanogaster were sketched in 1935 by Calvin B. Bridges, in such detail that his maps are still widely used today. The banding patterns of the chromosomes are especially helpful in research, as they provide an excellent visualization of transcriptionally active chromatin and general chromatin structure. Chromosome puffs are diffused uncoiled regions of the polytene chromosome that are sites of RNA transcription. A Balbiani ring is a large chromosome puff. Polytene chromosomes were originally observed in the larval salivary glands of Chironomus midges by Balbiani in 1881, but the hereditary nature of these structures was not confirmed until they were studied in Drosophila melanogaster in the early 1930s by Emil Heitz and Hans Bauer. They are known to occur in secretory tissues of other dipteran insects such as the Malpighian tubules of Sciara and also in protists, plants, mammals, or in cells from other insects. Some of the largest polytene chromosomes described thus far occur in larval salivary gland cells of the Chironomid genus Axarus. Another form of chromosomal enlargement that provides for increased transcription is the lampbrush chromosome. Polytene chromosomes are also used to identify the species of Chironomid larvae that are notoriously difficult to identify. Each morphologically distinct group of larvae consists of a number of morphologically identical (sibling) species that can only be identified by rearing adult males or by cytogenetic analysis of the polytene chromosomes of the larvae. Karyotypes are used to confirm the presence of specific species and to study genetic diversity in species with a wide range.<ref>http://en.wikipedia.org/w/index.php?title=Polytene_chromosome&oldid=422375538</ref> ==B chromosomes== In addition to the normal karyotype, wild populations of many animal, plant, and fungi species contain B chromosomes (also known as supernumerary or accessory chromosomes). By definition, these chromosomes are not essential for the life of a species, and are lacking in some (usually most) of the individuals. Thus a population would consist of individuals with 0, 1, 2, 3 (etc) supernumeraries. Most B chromosomes are mainly or entirely heterochromatic, (and so would be largely non-coding) but some, such as the B chromosomes of maize, contain sizeable euchromatic segments. In general it seems unlikely that supernumeraries would persist in a species unless there was some positive adaptive advantage, which in a few cases has been identified. For instance, the British grasshopper Myrmeleotettix maculatus has two structural types of B chromosomes: metacentrics and submetacentrics. The supernumeraries, which have a satellite DNA, occur in warm, dry environments, and are scarce or absent in humid, cooler localities. In plants there is a tendency for B chromosomes to be present in the germ-line, but to be lost from other tissues such as root tips and leaves. There is evidence of deleterious effects of supernumeraries on pollen fertility, and favourable effects or associations with particular habitats are also known in a number of species. The evolutionary origin of supernumerary chromosomes is obscure, but presumably they must have been derived from heterochromatic segments of normal chromosomes in the remote past. In general "we may regard supernumeraries as a very special category of genetic polymorphism which, because of manifold types of accumulation mechanisms, does not obey the ordinary Mendelian laws of inheritance." B chromosomes may play a positive role on normal A chromosomes in some circumstances. The B chromosomes suppress homologous pairing which reduces multiple pairing between homologous chromosomes in allopolyploids. Bivalent pairing is ensured by a gene on chromosome 5 of the B genome Phlocus. The B chromosomes also have the following effects on A chromosomes: increases asymmetry chiasma distribution increases crossing over and recombination frequencies: increases variation cause increased unpaired chromosomes: infertility B chromosomes have tendency to accumulate in meiotic cell products resulting in an increase of B number over generations. However this effect is counterbalanced for selection against infertility. B chromosomes are not to be confused with marker chromosomes or additional copies of normal chromosomes as they occur in Trisomies.<ref>http://en.wikipedia.org/w/index.php?title=B_chromosome&oldid=424347426</ref><ref>Camacho, J.P.M. (2004). "B Chromosomes in the Eukaryote Genome". Cytogenetics and Genome Research 106 (2-4). (Special issue)</ref> ===Supernumerary chromosomes in fungi=== Chromosome polymorphisms are very common among fungi. Different isolates of the same species often have a different chromosome number, with some of these additional chromosomes being unnecessary for normal growth in culture. The extra chromosomes are known as conditionally dispensable, or supernumerary, because they are dispensable for certain situations, but may confer a selective advantage under different environments. Supernumerary chromosomes do not carry genes that are necessary for basic fungal growth, but may have some functional significance. For example, it has been discovered that the supernumerary chromosome of the pea pathogen Haematonectria haematococca carries genes that are important to the disease-causing capacity of the fungus. This supernumerary DNA was found to code for a group of enzymes that metabolize toxins, known as phytoalexins, that are secreted by the plant's immune system. It is possible that these supernumerary elements originated in horizontal gene transfer events because sequence analysis often indicates that they have a different evolutionary history from essential chromosomal DNA.<ref>http://en.wikipedia.org/w/index.php?title=B_chromosome&oldid=424347426</ref> ==References== {{reflist|2}} {{BookCat}} 6zo5m1x3lhq6hqqkqnl41w7y9z0xtv7 Principles of Biochemistry/Nucleic acid III: Sythesis of nucleotides 0 250516 4672094 4300045 2026-09-24T09:10:17Z R. Henrik Nilsson 3395618 refrences > references 4672094 wikitext text/x-wiki ==Purines Synthesis== Purines are biologically synthesized as nucleotides (bases attached to ribose 5-phosphate). A key regulatory step is the production of ribose-5-phospho-α-D-ribosyl 1-pyrophosphate (PRPP) by PRPP synthetase, which is activated by inorganic phosphate and inactivated by purine ribonucleotides. It is not the committed step to purine synthesis because PRPP is also used in pyrimidine synthesis and salvage pathways. The first committed step is the reaction of PRPP, glutamine and water to 5'-phosphoribosylamine, glutamine, and pyrophosphate - catalyzed by pyrophosphate amidotransferase, which is activated by PRPP and inhibited by AMP, GMP and IMP. Both adenine and guanine are derived from the nucleotide inosine monophosphate (IMP), which is synthesised on a pre-existing ribose-phosphate through a complex pathway using atoms from the amino acids glycine, glutamine, and aspartic acid, as well as formate ions transferred from the coenzyme tetrahydrofolate<ref>http://en.wikipedia.org/w/index.php?title=Purine_metabolism&oldid=423783946</ref>. ===GMP=== * IMP dehydrogenase converts IMP into XMP * GMP synthase converts XMP into GMP In enzymology, a GMP synthase (glutamine-hydrolysing) (EC 6.3.5.2) is an enzyme that catalyzes the chemical reaction :ATP + xanthosine 5'-phosphate + <small>L</small>-glutamine + H<sub>2</sub>O <math>\rightleftharpoons</math> AMP + diphosphate + GMP + <small>L</small>-glutamate The 4 substrates of this enzyme are ATP, xanthosine 5'-phosphate, L-glutamine, and H2O, whereas its 4 products are AMP, diphosphate, GMP, and L-glutamate. This enzyme belongs to the family of ligases, specifically those forming carbon-nitrogen bonds carbon-nitrogen ligases with glutamine as amido-N-donor. The systematic name of this enzyme class is xanthosine-5'-phosphate:L-glutamine amido-ligase (AMP-forming). Other names in common use include GMP synthetase (glutamine-hydrolysing), guanylate synthetase (glutamine-hydrolyzing), guanosine monophosphate synthetase (glutamine-hydrolyzing), xanthosine 5'-phosphate amidotransferase, and guanosine 5'-monophosphate synthetase. This enzyme participates in purine metabolism and glutamate metabolism. At least one compound, Psicofuranin is known to inhibit this enzyme<ref>http://en.wikipedia.org/w/index.php?title=GMP_synthase&oldid=420670515</ref><ref>Tesmer JJ, Klem TJ, Deras ML, Davisson VJ, Smith JL (January 1996). "The crystal structure of GMP synthetase reveals a novel catalytic triad and is a structural paradigm for two enzyme families". Nat. Struct. Biol. 3 (1): 74–86. </ref>. * GMP reductase converts GMP back into IMP ===AMP=== * adenylosuccinate synthase converts IMP to adenylosuccinate * adenylosuccinate lyase converts adenylosuccinate into AMP * AMP deaminase converts AMP back into IMP '''Phosphoribosyl pyrophosphate''' (PRPP) is a pentosephosphate. It is formed from ribose 5-phosphate by the enzyme ribose-phosphate diphosphokinase. It plays a role in transferring phospho-ribose groups in several reactions: {| class="wikitable" ! Enzyme !! Reactant !! Product |- | adenine phosphoribosyltransferase || adenine || AMP |- | hypoxanthine-guanine phosphoribosyltransferase || guanine || GMP |- | hypoxanthine-guanine phosphoribosyltransferase || hypoxanthine || IMP |- | orotate phosphoribosyltransferase || orotate || OMP |- | uracil phosphoribosyltransferase || uracil || UMP |} In ''de novo'' generation of purines, the enzyme amidophosphoribosyltransferase acts upon PRPP to create phosphoribosylamine. Six enzymes take part in IMP synthesis. Three of them are multifunctional: GART (reactions 2, 3, and 5) PAICS (reactions 6, and 7) ATIC (reactions 9, and 10) Trifunctional purine biosynthetic protein adenosine-3 is an enzyme that in humans is encoded by the gene ''GART'' . This protein is a trifunctional polypeptide. It has phosphoribosylglycinamide formyltransferase (EC 6.3.4.13), phosphoribosylglycinamide synthetase (EC 6.3.3.1), phosphoribosylaminoimidazole synthetase (EC 2.1.2.2) activity which is required for de novo purine biosynthesis. Phosphoribosylaminoimidazole carboxylase (or AIR carboxylase) is an enzyme involved in nucleotide synthesis. It catalyzes the conversion of 5'-phosphoribosyl-5-aminoimidazole ("AIR") into 5-phosphoribosyl-4-carboxy-5-aminoimidazole ("CAIR"). Bifunctional purine biosynthesis protein PURH is a protein that in humans is encoded by the ATIC gene. ATIC encodes an enzyme which generates inosine monophosphate from aminoimidazole carboxamide ribonucleotide. It has two functions: EC 2.1.2.3 - 5-aminoimidazole-4-carboxamide ribonucleotide formyltransferase EC 3.5.4.10 - IMP cyclohydrolase ==Inosinate synthesis== {| class="wikitable" style="margin: 1em auto 1em auto" | '''The biosynthetic origins of purine ring atoms'''<BR><BR>N1 arises from the amine group of Asp<BR>C2 and C8 originate from formate<BR>N3 and N9 are contributed by the amide group of Gln<BR>C4, C5 and N7 are derived from Gly <BR>C6 comes from HCO<sub>3</sub><sup>-</sup> (CO<sub>2</sub>) |} [[Image:Nucleotides syn2.png|thumb|centre|600px|<div style="border-width: 0px; border-bottom: 1px solid black; text-align: left;">'''The synthesis of UMP'''.</div>The color scheme is as follows: <span style="font-weight: bold;"><span style="color: blue;">enzymes</span>, <span style="color: rgb(219,155,36);">coenzymes</span>, <span style="color: rgb(151,149,45);">substrate names</span>, <span style="color: rgb(128,0,0);">inorganic molecules</span> </span>]] The inosinate synthesis is complex, beginning with a 5-phosphoribosyl-1-pyrophosphate (PRPP). In the first step, an amino group given by glutamine is attached at carbon 1 of PRPP. The resulting molecule is 5-phosphoribosylamine, which is highly unstable, with a half-life of 30 seconds at physiologic pH. 5-Phosphoribosylamine gains an amino acid (glycine), becoming glycinamide ribonucleotide (GAR). Then, N10-formyltetrahydrofolate (THF) transfers a formyl group to glycinamide ribonucleotide to form formyl glycinamide ribonucleotide (FGAR)<ref>http://en.wikipedia.org/w/index.php?title=Inosinic_acid&oldid=423592099</ref>. Using an ATP molecule, ammonia is added to the compound to become formylglycinamidine ribonucleotide. Another ATP molecule causes an intermolecular reaction that produces an imidazole ring (5-aminoimidazole ribonucleotide). The next step of the pathway is adding bicarbonate to make carboxyaminoimidazole ribonucleotide by using ATP (it only happens in fungi and bacteria; high eukaryotes simply add CO2 to form the ribonucleotide). Then, the imidazole’s carboxylate group phosphatises and adds aspartate. As we have just seen, a six-step process links glycine, formate, bicarbonate, glutamine, and aspartate to lead to an intermediate that contains almost all the required atoms to synthesize a purine ring. This intermediate removes fumarate, and a second formyl group from THF is added. The compound gets cycled and forms inosinate after a sort of intermolecular reactions. Inosinate is the first intermediate in this synthesis pathway to have a whole purine ring. Enzymes taking part in IMP synthesis constitute a multienzyme complex in the cell. Evidences demonstrate that there are multifunctional enzymes, and some of them catalyze non-sequential steps in the pathway<ref>http://en.wikipedia.org/w/index.php?title=Inosinic_acid&oldid=423592099</ref>. ==Laboratory synthesis of purine== === History === The name 'purine' (''purum uricum'') was coined by the German chemist Emil Fischer in 1884. He synthesized it for the first time in 1899.<ref>Fischer, E. ''Berichte der Deutschen Chemischen Gesellschaft'' '''1899''', ''32'', 2550.</ref> The starting material for the reaction sequence was uric acid ('''8'''), which had been isolated from kidney stones by Scheele in 1776.<ref>Scheele, V. Q. Examen Chemicum Calculi Urinari, ''Opuscula'', '''1776''', ''2'', 73.</ref> Uric acid (8) was reacted with PCl<sub>5</sub> to give 2,6,8-trichloropurine ('''10'''), which was converted with HI and PH<sub>4</sub>I to give 2,6-diiodopurine ('''11'''). The product was reduced to purine ('''1''') using zinc-dust. [[Image:FischerPurineSynthesis.gif]] In addition to in vivo synthesis of purines in purine metabolism, purine can also be created artificially. Purine ('''1''') is obtained in good yield when formamide is heated in an open vessel at 170 <sup>o</sup>C for 28 hours.<ref name="Yamada">{{cite journal|journal=Chemical & Pharmaceutical Bulletin|year=1972|volume=20|pages=623|title=A One-step Synthesis of Purine Ring from Formamide|url=http://www.journalarchive.jst.go.jp/english/jnlabstract_en.php?cdjournal=cpb1958&cdvol=20&noissue=3&startpage=623|author=Yamada, H.; Okamoto, T.}}</ref> [[Image:Purinesynthesis.gif]] This remarkable reaction and others like it have been discussed in the context of the origin of life.<ref name="Saladino">{{cite journal|author=Saladino ''et al.''|title=About a Formamide-Based Origin of Informational Polymers: Syntheses of Nucleobases and Favourable Thermodynamic Niches for Early Polymers |journal=Origins of Life and Evolution of Biospheres|volume=36|issue=5-6|year=2006|pmid=17136429|pages=523–531|doi=10.1007/s11084-006-9053-2|last2=Crestini|first2=Claudia|last3=Ciciriello|first3=Fabiana|last4=Costanzo|first4=Giovanna|last5=Mauro|first5=Ernesto}}</ref> Procedure:<ref name="Yamada" /> Formamide (45 grams) was heated in an open vessel with a condenser for 28 hours in an oil bath at 170-190 <sup>o</sup>C. After removing excess formamide (32.1 grams) by vacuum distillation, the residue was refluxed with methanol. The methanol solvent was filtered, the solvent removed from the filtrate by vacuum distillation, and almost pure purine obtained; yield 4.93 grams (71% yield from formamide consumed). Crystallization from acetone afforded purine as colorless crystals; melting point 218 <sup>o</sup>C. Oro, Orgel and co-workers have shown that four molecules of HCN tetramerize to form diaminomaleodinitrile ('''12'''), which can be converted into almost all natural-occurring purines.<ref>Sanchez, R. A.; Ferris, J. P.; Orgel, L. E. ''Journal of Molecular Biology'', '''1967''', ''30'', 223.</ref><ref>Ferris, J. P.; Orgel, L. E. ''Journal of the American Chemical Society'', '''1966''', ''88'', 1074.</ref><ref>Ferris, J. P.; Kuder, J. E.; Catalano, O. W. ''Science'', '''1969''', ''166'', 765.</ref><ref>Oro, J.; Kamat, J. S. ''Nature'', '''1961''', ''190'', 442.</ref><ref>Houben-Weyl, Vol . E5, p. 1547</ref> [[Image:Basicpurines.png]] The '''Traube purine synthesis''' (1900) is a classic reaction (named after Wilhelm Traube) between an amine-substituted pyrimidine and formic acid.<ref>''Organic Syntheses Based on Name Reactions'', Alfred Hassner, C. Stumer {{ISBN|008043259X}} 2002</ref> [[Image:TraubePurineSynthesis.svg|Traube purine synthesis]] ==''De novo'' biosynthesis of pyrimidine == Unlike purines, pyrimidines are assembled before being attached to 5-phosphoribosyl-1-pyrophosphate (PRPP). [[Image:Nucleotides_syn2.png|thumb|center|400px|<div style="border-width: 0px; border-bottom: 1px solid black; text-align: left;">'''The synthesis of UMP'''.</div>The color scheme is as follows: <span style="font-weight: bold;"><span style="color: blue;">enzymes</span>, <span style="color: rgb(219,155,36);">coenzymes</span>, <span style="color: rgb(151,149,45);">substrate names</span>, <span style="color: rgb(128,0,0);">inorganic molecules</span> </span>]] {| class="wikitable" | '''Enzyme''' || '''Product''' || '''Description''' |- | carbamoyl phosphate synthetase II<ref>{{cite web | title = Entrez Gene: CAD carbamoyl-phosphate synthetase 2, aspartate transcarbamylase, and dihydroorotase| url = http://www.ncbi.nlm.nih.gov/sites/entrez?Db=gene&Cmd=ShowDetailView&TermToSearch=790| accessdate = }}</ref> || carbamoyl phosphate || This is the regulated step in the pyrimidine biosynthesis. |- | aspartic transcarbamolyase (aspartate carbamoyl transferase)<ref>{{cite web | title = Entrez Gene: CAD carbamoyl-phosphate synthetase 2, aspartate transcarbamylase, and dihydroorotase| url = http://www.ncbi.nlm.nih.gov/sites/entrez?Db=gene&Cmd=ShowDetailView&TermToSearch=790| accessdate = }}</ref> || carbamoyl aspartic acid || - |- | dihhydroorotase<ref>{{cite web | title = Entrez Gene: CAD carbamoyl-phosphate synthetase 2, aspartate transcarbamylase, and dihydroorotase| url = http://www.ncbi.nlm.nih.gov/sites/entrez?Db=gene&Cmd=ShowDetailView&TermToSearch=790| accessdate = }}</ref> || dihydroorotate || Dehydration |- | dihydroorotate dehydrogenase<ref>{{cite web | title = Entrez Gene: DHODH dihydroorotate dehydrogenase| url = http://www.ncbi.nlm.nih.gov/sites/entrez?Db=gene&Cmd=ShowDetailView&TermToSearch=1723| accessdate = }}</ref> (the only mitochondrial enzyme) || orotate || Dihydroorotate then enters the mitochondria where it is oxidised through removal of hydrogens. This is the only mitochondrial step in nucleotide rings biosynthesis. |- | orotate phosphoribosyltransferase<ref>{{cite web | title = Entrez Gene: UMPS uridine monophosphate synthetase| url = http://www.ncbi.nlm.nih.gov/sites/entrez?Db=gene&Cmd=ShowDetailView&TermToSearch=7372| accessdate = }}</ref> || OMP || PRPP is used. |- | OMP decarboxylase<ref>{{cite web | title = Entrez Gene: UMPS uridine monophosphate synthetase| url = http://www.ncbi.nlm.nih.gov/sites/entrez?Db=gene&Cmd=ShowDetailView&TermToSearch=7372| accessdate = }}</ref> || UMP || Decarboxylation |- | UCK2|uridine-cytidine kinase 2<ref>{{cite web | title = Entrez Gene: UCK2 uridine-cytidine kinase 2| url = http://www.ncbi.nlm.nih.gov/sites/entrez?Db=gene&Cmd=ShowDetailView&TermToSearch=7371| accessdate = }}</ref> || UDP || Phosphorylation. ATP is used. |- | nucleoside diphosphate kinase || uridine 5'-triphosphate(UTP) || Phosphorylation. ATP is used. |- | CTP synthase || cytidine 5'triphosphate(CTP) || Glutamine and ATP are used. |} The first three enzymes are all coded by the same gene in Metazoa (CAD). In Fungi, a similar protein exists but lacks the dihydroorotase function: another protein catalyzes the second step. In other organisms (Bacteria, Archaea and the other Eukaryota]]), the first three steps are done by three different enzymes. '''CTP synthase''' (or CTP synthetase) is an enzyme involved in pyrimidine biosynthesis. It intraconverts UTP and CTP. The source of the amine/amino group in CTP is glutamine. CTP synthase is activated by GTP, a purine. This acts to balance the relative amounts of purine and pyrimidine nucleotides. CTP synthase is inhibited by reversible by CTP and irreversible for example by the glutamine analogon DON. The following human genes encode proteins that possess CTP synthase activity: CTPS – CTP synthase 1 CTPS2 – CTP synthase 2 Pyrimidine synthesis inhibitors are used in active moderate to severe rheumatoid arthritis and psoriatic arthritis. Examples include Leflunomide and Teriflunomide. ===Chemical synthesis=== Pyrimidines can also be prepared within the laboratory by organic synthesis. One method is the classic Biginelli reaction. Many other methods rely on condensation of carbonyls with amines for instance the synthesis of 2-Thio-6-methyluracil from thiourea and ethyl acetoacetate <ref>Organic Syntheses, Coll. Vol. 4, p.638 (1963); Vol. 35, p.80 (1955) [http://www.orgsynth.org/orgsyn/pdfs/CV4P0638.pdf Link]</ref> or the synthesis of 4-methylpyrimidine with 4,4-dimethoxy-2-butanone and formamide.<ref>Organic Syntheses, Coll. Vol. 5, p.794 (1973); Vol. 43, p.77 (1963) [http://www.orgsynth.org/orgsyn/pdfs/CV5P0794.pdf Link]</ref><ref>http://en.wikipedia.org/w/index.php?title=Pyrimidine_metabolism&oldid=391209862</ref> A novel method is by reaction of certain amides with carbonitriles under electrophilic activation of the amide with 2-chloro-pyridine and trifluoromethanesulfonic anhydride <ref>''Single-Step Synthesis of Pyrimidine Derivatives'' Mohammad Movassaghi and Matthew D. Hill J. Am. Chem. Soc.; '''2006'''; 128(44) pp 14254 - 14255; (Communication)</ref>: :[[Image:PyrimidineSynthAmideCarbonitrile.png|400px|Pyrimidine Synthesis Movassaghi 2006]] ==Salvage pathway== A '''salvage pathway''' is a Metabolic pathway|pathway in which nucleotides (purine and pyrimidine) are synthesized from intermediates in the degradative pathway for nucleotides. Salvage pathways are used to recover bases and nucleosides that are formed during degradation of RNA and DNA. This is important in some organs because some tissues cannot undergo de novo synthesis. The salvaged bases and nucleosides can then be converted back into nucleotides<ref>http://en.wikipedia.org/w/index.php?title=Nucleotide_salvage&oldid=414293528</ref>. ==Substrates== The salvage pathway requires distinct substrates: ===Pyrimidines=== Uridine phosphorylase adds ribose-1-phospate to the free base uracil, forming uridine monophosphate. Uridine kinase then phosphorylates this nucleoside into its diphosphate and triphosphate forms. Deoxythymidine phosphorylase adds deoxyribose-1-phosphate to thymine, forming deoxythymidine monophosphate. Thymidine kinase can then phosphorylate this compound to deoxythymidine diphosphate and triphosphate. '''Thymidine kinase''' Higher organisms have two isoenzymes, that are chemically very different, TK1 and TK2. The former was first found in fetal tissue, the second was found to be more abundant in adult tissue, and initially they were termed fetal and adult thymidine kinase. Soon it was shown that TK1 is present in the cytoplasm only in anticipation of cell division (cell cycle-dependent), whereas TK2 is located in mitochondria and is cell cycle-independent. The genes of the two types were localized in the mid-1970s. The gene for TK1 was cloned and sequenced. The corresponding protein has a molecular weight of about 25 kD. Normally, it occurs in tissue as a dimer. It can be activated by ATP. After activation, it has been converted to a tetramer. The recombinant TK1 cannot be activated and converted to a tetramer in this way, showing that the enzyme occurring in cells has been modified after synthesis. TK1 is synthesized by the cell during the S phase of cell division. After cell division is completed, TK1 is degraded intracellularly, so that it does not pass to body fluids after normal cell division. There is a feed-back regulation of the action of thymidine kinase in the cell: thymidine triphosphate (TTP), the product of the further phosphorylation of thymidine, acts as an inhibitor to thymidine kinase. This serves to maintain a balanced amount of TTP phosphate available for nucleic acid synthesis, not oversaturating the system. Genes for virus specific thymidine kinases have been identified in Herpes simplex virus, Varicella zoster virus and Epstein-Barr virus<ref>http://en.wikipedia.org/w/index.php?title=Thymidine_kinase&oldid=422438046</ref><ref>Wintersberger E (February 1997). "Regulation and biological function of thymidine kinase". Biochem. Soc. Trans. 25 (1): 303–8. </ref>. [[Image:2'-Desoxythymidin.svg|120px]] + ATP ---> [[Image:2'-Desoxythymidinmonophosphat.svg|200px]] + ADP Deoxythymidine reacts with ATP to give deoxythymidine monophosphate and ADP. ===Purines=== Phosphoribosyltransferases add activated ribose-5-phosphate (called phosphoribosyl pyrophosphate or PRPP) to bases, creating nucleotide monophosphates. There are two types of phosphoribosyltransferases: adenosine phosphoribosyltransferase (APRT) and hypoxanthine-guanine phosphoribosyltransferase (HGPRT). Lesch-Nyhan syndrome is associated with a deficiency of HGPRT. {| class="wikitable" | '''Nucleoside''' || '''Enzyme''' || '''Nucleotide''' |- | hypoxanthine || hypoxanthine/guanine phosphoribosyl transferase (HGPRT) || IMP |- | guanine || hypoxanthine/guanine phosphoribosyl transferase (HGPRT) || GMP |- | adenine || adenine phosphoribosyltransferase (APRT) || AMP |} ==References== {{reflist}} {{BookCat}} 8blpvcpiw4s3o5n75wp9249rt5rjkao Principles of Biochemistry/Cell and its Biochemistry 0 250599 4672101 4627451 2026-09-24T09:12:39Z R. Henrik Nilsson 3395618 refrences > references 4672101 wikitext text/x-wiki The ''history of biochemistry'' spans approximately 400 years. Although the term “biochemistry” seems to have been first used in 1882, it is generally accepted that the word "biochemistry" was first proposed in 1903 by ''Carl Neuberg'', a German chemist. Biochemistry is the study of chemical processes in living organisms. Biochemistry governs all living organisms and living processes. By controlling information flow through biochemical signalling and the flow of chemical energy through metabolism, biochemical processes give rise to the incredible complexity of life. Much of biochemistry deals with the structures and functions of cellular components such as proteins, carbohydrates, lipids, nucleic acids and other biomolecules although increasingly processes rather than individual molecules are the main focus. Over the last 40 years biochemistry has become so successful at explaining living processes that now almost all areas of the life sciences from botany to medicine are engaged in biochemical research. Today the main focus of pure biochemistry is in understanding how biological molecules give rise to the processes that occur within living cells which in turn relates greatly to the study and understanding of whole organisms. Among the vast number of different biomolecules, many are complex and large molecules (called polymers), which are composed of similar repeating subunits (called monomers). Each class of polymeric biomolecule has a different set of subunit types. For example, a protein is a polymer whose subunits are selected from a set of 20 or more amino acids. Biochemistry studies the chemical properties of important biological molecules, like proteins, and in particular the chemistry of enzyme-catalyzed reactions. The biochemistry of cell metabolism and the endocrine system has been extensively described. Other areas of biochemistry include the genetic code (DNA, RNA), protein synthesis, cell membrane transport, and signal transduction.<ref>[http://en.wikipedia.org/wiki/Biochemistry Biochemistry]</ref> ===Enzymes=== [[Image:Eduardbuchner.jpg|thumb|175px|right|Eduard Buchner]] As early as the late 18th century and early 19th century, the digestion of meat by stomach secretions<ref name="Reaumur1752">{{cite journal | last = de Réaumur | first = RAF | authorlink = René Antoine Ferchault de Réaumur | year = 1752 | title = Observations sur la digestion des oiseaux | journal = Histoire de l'academie royale des sciences | volume = 1752|pages = 266, 461}}</ref> and the conversion of starch to sugars by plant extracts and saliva were known. However, the mechanism by which this occurred had not been identified.<ref>[http://etext.lib.virginia.edu/toc/modeng/public/Wil4Sci.html Williams, H. S. (1904) A History of Science: in Five Volumes. Volume IV: Modern Development of the Chemical and Biological Sciences Harper and Brothers (New York)]</ref> In the 19th century, when studying the fermentation of sugar to alcohol by yeast, Louis Pasteur came to the conclusion that this fermentation was catalyzed by a vital force contained within the yeast cells called "ferments", which were thought to function only within living organisms. He wrote that "alcoholic fermentation is an act correlated with the life and organization of the yeast cells, not with the death or putrefaction of the cells."<ref>{{cite journal |author=Dubos J.|year= 1951|title= Louis Pasteur: Free Lance of Science, Gollancz. Quoted in Manchester K. L. (1995) Louis Pasteur (1822–1895)--chance and the prepared mind.|journal= Trends Biotechnol|volume=13|issue=12|pages=511–515|pmid= 8595136 |doi=10.1016/S0167-7799(00)89014-9}}</ref> In 1878 German physiologist Wilhelm Kühne (1837–1900) coined the term ''enzyme'', which comes from Greek "in leaven", to describe this process. The word ''enzyme'' was used later to refer to nonliving substances such as pepsin, and the word ''ferment'' used to refer to chemical activity produced by living organisms. In 1897 Eduard Buchner began to study the ability of yeast extracts to ferment sugar despite the absence of living yeast cells. In a series of experiments at the University of Berlin, he found that the sugar was fermented even when there were no living yeast cells in the mixture.<ref>[http://nobelprize.org/nobel_prizes/chemistry/laureates/1907/buchner-bio.html Nobel Laureate Biography of Eduard Buchner at http://nobelprize.org]</ref> He named the enzyme that brought about the fermentation of sucrose "zymase".<ref>[http://nobelprize.org/nobel_prizes/chemistry/laureates/1907/buchner-lecture.html Text of Eduard Buchner's 1907 Nobel lecture at http://nobelprize.org]</ref> In 1907 he received the Nobel Prize in Chemistry "for his biochemical research and his discovery of cell-free fermentation". Following Buchner's example; enzymes are usually named according to the reaction they carry out. Typically the suffix ''-ase'' is added to the name of the substrate (''e.g.'', lactase is the enzyme that cleaves lactose) or the type of reaction (''e.g.'', DNA polymerase forms DNA polymers). Having shown that enzymes could function outside a living cell, the next step was to determine their biochemical nature. Many early workers noted that enzymatic activity was associated with proteins, but several scientists (such as Nobel laureate Richard Willstätter) argued that proteins were merely carriers for the true enzymes and that proteins ''per se'' were incapable of catalysis. However, in 1926, James B. Sumner showed that the enzyme urease was a pure protein and crystallized it; Sumner did likewise for the enzyme catalase in 1937. The conclusion that pure proteins can be enzymes was definitively proved by Northrop and Stanley, who worked on the digestive enzymes pepsin (1930), trypsin and chymotrypsin. These three scientists were awarded the 1946 Nobel Prize in Chemistry.<ref>[http://nobelprize.org/nobel_prizes/chemistry/laureates/1946/ 1946 Nobel prize for Chemistry laureates at http://nobelprize.org]</ref> This discovery that enzymes could be crystallized eventually allowed their structures to be solved by x-ray crystallography. This was first done for lysozyme, an enzyme found in tears, saliva and egg whites that digests the coating of some bacteria; the structure was solved by a group led by David Chilton Phillips and published in 1965.<ref>{{cite journal |author=Blake CC, Koenig DF, Mair GA, North AC, Phillips DC, Sarma VR.|year= 1965|title= Structure of hen egg-white lysozyme. A three-dimensional Fourier synthesis at 2 Angstrom resolution. |journal= Nature |volume=22|issue=206|pages=757–761|pmid= 5891407|doi= 10.1038/206757a0}}</ref> This high-resolution structure of lysozyme marked the beginning of the field of structural biology and the effort to understand how enzymes work at an atomic level of detail.<ref>[http://en.wikipedia.org/wiki/History_of_biochemistry History of biochemistry]</ref> ===Metabolism=== [[Image:SantoriosMeal.jpg|thumb|right|150px|Santorio Santorio in his steelyard balance, from ''Ars de statica medecina'', first published 1614]] The term ''metabolism'' is derived from the Greek Metabolismos for "change", or "overthrow".<ref>{{cite web | title=Metabolism |publisher=The Online Etymology Dictionary | url=http://www.etymonline.com/index.php?term=metabolism |accessdate=20 February 2007}}</ref> The history of the scientific study of metabolism spans 400 years. The first controlled experiments in human metabolism were published by Santorio Santorio in 1614 in his book ''Ars de statica medecina''.<ref>{{cite journal |author=Eknoyan G |title=Santorio Sanctorius (1561-1636) - founding father of metabolic balance studies |journal=Am J Nephrol |volume=19 |issue=2 |pages=226–33 |year=1999 |pmid=10213823 |doi=10.1159/000013455}}</ref> This book describes how he weighed himself before and after eating, sleeping, working, sex, fasting, drinking, and excreting. He found that most of the food he took in was lost through what he called "insensible perspiration".<ref>[http://en.wikipedia.org/wiki/History_of_biochemistry History of biochemistry]</ref> ===20th century=== Since then, biochemistry has advanced, especially since the mid-20th century, with the development of new techniques such as chromatography, X-ray diffraction, NMR spectroscopy, radioisotopic labelling, electron microscopy and molecular dynamics simulations. These techniques allowed for the discovery and detailed analysis of many molecules and metabolic pathways of the cell, such as glycolysis and the Krebs cycle (citric acid cycle). One of the most prolific of these modern biochemists was Hans Krebs who made huge contributions to the study of metabolism.<ref>{{cite journal |author=Kornberg H |title=Krebs and his trinity of cycles |journal=Nat Rev Mol Cell Biol |volume=1 |issue=3 |pages=225–8 |year=2000 |pmid=11252898 |doi=10.1038/35043073}}</ref> He discovered the urea cycle and later, working with Hans Kornberg, the citric acid cycle and the glyoxylate cycle.<ref>Krebs, H. A. & Henseleit, K. (1932) "Untersuchungen über die Harnstoffbildung im tierkorper." ''Z. Physiol. Chem.'' 210, 33–66.</ref><ref>{{cite journal |author=Krebs H, Johnson W |title=Metabolism of ketonic acids in animal tissues |journal=Biochem J |volume=31 |issue=4 |pages=645–60 |date=1 April 1937|pmid=16746382 |pmc=1266984 }}</ref><ref name=Kornberg>{{cite journal |author=Kornberg H, Krebs H |title=Synthesis of cell constituents from C2-units by a modified tricarboxylic acid cycle |journal=Nature |volume=179 |issue=4568 |pages=988–91 |year=1957 |pmid=13430766 |doi=10.1038/179988a0}}</ref> In 1960, the biochemist Robert K. Crane revealed his discovery of the sodium-glucose cotransport as the mechanism for intestinal glucose absorption.<ref>Robert K. Crane, D. Miller and I. Bihler. “The restrictions on possible mechanisms of intestinal transport of sugars”. In: Membrane Transport and Metabolism. Proceedings of a Symposium held in Prague, 22–27 August 1960. Edited by A. Kleinzeller and A. Kotyk. Czech Academy of Sciences, Prague, 1961, pp. 439-449.</ref> This was the very first proposal of a coupling between the fluxes of an ion and a substrate that has been seen as sparking a revolution in biology.Today, the findings of biochemistry are used in many areas, from genetics to molecular biology and from agriculture to medicine.<ref>[http://en.wikipedia.org/wiki/History_of_biochemistry History of biochemistry]</ref> ==Bioenergetics== Bioenergetics is the part of biochemistry concerned with the energy involved in making and breaking of chemical bonds in the molecules found in biological organisms. Growth, development and metabolism are some of the central phenomena in the study of biological organisms. The role of energy is fundamental to such biological processes. The ability to harness energy from a variety of metabolic pathways is a property of all living organisms. Life is dependent on energy transformations; living organisms survive because of exchange of energy within and without. In a living organism, chemical bonds are broken and made as part of the exchange and transformation of energy. Energy is available for work (such as mechanical work) or for other processes (such as chemical synthesis and anabolic processes in growth), when weak bonds are broken and stronger bonds are made. The production of stronger bonds allows release of usable energy.<ref>[http://en.wikipedia.org/wiki/Bioenergetics Bioenergetics]</ref> Living organisms obtain energy from organic and inorganic materials. For example, lithotrophs can oxidize minerals such as nitrates or forms of sulfur, such as elemental sulfur, sulfites, and hydrogen sulfide to produce ATP. In photosynthesis, autotrophs can produce ATP using light energy. Heterotrophs must consume organic compounds. These are mostly carbohydrates, fats, and proteins. The amount of energy actually obtained by the organism is lower than the amount present in the food; there are losses in digestion, metabolism, and thermogenesis. The materials are generally combined with oxygen to release energy, although some can also be oxidized anaerobically by various organisms. The bonds holding the molecules of nutrients together and the bonds holding molecules of free oxygen together are all relatively weak compared with the chemical bonds holding carbon dioxide and water together. The utilization of these materials is a form of slow combustion. That is why the energy content of food can be estimated with a bomb calorimeter. The materials are oxidized slowly enough that the organisms do not actually produce fire. The oxidation releases energy because stronger bonds have been formed (corresponding to lower energy). This net energy may evolve as heat, or some of which may be used by the organism for other purposes, such as breaking other bonds to do chemistry. Living organisms produce ATP from energy sources via oxidative phosphorylation. The terminal phosphate bonds of ATP are relatively weak compared with the stronger bonds formed when ATP is broken down to adenosine monophosphate and phosphate, dissolved in water. Here it is the energy of hydration that results in energy release. This hydrolysis of ATP is used as a battery to store energy in cells, for intermediate metabolism. Utilization of chemical energy from such molecular bond rearrangement powers biological processes in every biological organism.<ref>[http://en.wikipedia.org/wiki/Bioenergetics Bioenergetics]</ref> ===Entropy<ref>http://en.wikipedia.org/wiki/Entropy</ref>=== The concept of entropy is defined by the second law of thermodynamics, which states that the entropy of a closed system always increases or remains constant. '''Entropy change''' When an ideal gas undergoes a change, its entropy may also change. For cases where the specific heat doesn't change and either volume, pressure or temperature is also constant, the change in entropy can be easily calculated.<ref>[http://www.grc.nasa.gov/WWW/k-12/Numbers/Math/Mathematical_Thinking/ideal_gases_under_constant.htm http://www.grc.nasa.gov/WWW/k-12/Numbers/Math/Mathematical_Thinking/ideal_gases_under_constant.htm]</ref> When specific heat and volume are constant, the change in entropy is given by: :<math>\Delta S = n C_v \ln \frac{T}{T_0}</math>. When specific heat and pressure are constant, the change in entropy is given by: :<math>\Delta S = n C_p \ln \frac{T}{T_0}</math>. When specific heat and temperature are constant, the change in entropy is given by: :<math>\Delta S = n R \ln \frac{V}{V_0}</math>. In these equations <math>C_v</math> is the specific heat at constant volume, <math>C_p</math> is the specific heat at constant pressure, <math>R</math> is the ideal gas constant, and <math>n</math> is the number of moles of gas. For some other transformations, not all of these properties (specific heat, volume, pressure or temperature) are constant. In these cases, for only 1&nbsp;mole of an ideal gas, the change in entropy can be given by<ref>[http://www.grc.nasa.gov/WWW/K-12/airplane/entropy.html http://www.grc.nasa.gov/WWW/K-12/airplane/entropy.html]</ref> either: :<math>\Delta S = C_v \ln \frac{T}{T_0} + R \ln \frac{V}{V_0}</math> or :<math>\Delta S = C_p \ln \frac{T}{T_0} - R \ln \frac{P}{P_0}</math>. ===Enthalpy<ref>http://en.wikipedia.org/wiki/Enthalpy</ref>=== Enthalpy is a measure of the total energy of a thermodynamic system. It includes the internal energy, which is the energy required to create a system, and the amount of energy required to make room for it by displacing its environment and establishing its volume and pressure. The enthalpy of a system is defined as: :<math>H = U + p V,\,</math> where :''H'' is the enthalpy of the system (in joules), :''U'' is the internal energy of the system (in joules), :''p'' is the pressure at the boundary of the system and its environment, (in pascals), and :''V'' is the volume of the system, (in cubic meters). Note that the ''U'' term is equivalent to the energy required to create the system, and that the ''pV'' term is equivalent to the energy which would be required to "make room" for the system if the pressure of the environment remained constant. The ''pV'' term may be understood by the following example of an isobaric process. Consider gas changing its volume (by, for example, a chemical reaction) in a cylinder, pushing a piston, maintaining constant pressure ''p''. The force is calculated from the area ''A'' of the piston and definition of pressure ''p'' = ''F''/''A'': the force is ''F'' = ''pA''. By definition, work ''W'' done is ''W'' = ''Fx'', where ''x'' is the distance traversed. Combining gives ''W'' = ''pAx'', and the product ''Ax'' is the volume traversed by the piston: ''Ax = V''. Thus, the work done by the gas is ''W'' = ''pV'', where ''p'' is a constant pressure and ''V'' the expansion of volume. Including this pV term means that during constant pressure expansion, any internal energy forfeited as work on the environment does not affect the value of enthalpy. The enthalpy change can be defined Δ''H'' = Δ''U'' + ''W'' = Δ''U'' + Δ(''pV''), where Δ''U'' is the thermal energy lost to expansion, and ''W'' the energy gained due to work done on the piston.<ref>http://en.wikipedia.org/wiki/Enthalpy</ref> ===Gibbs free energy === In thermodynamics, the Gibbs free energy (IUPAC recommended name: Gibbs energy or Gibbs function; also known as free enthalpy[1] to distinguish it from Helmholtz free energy) is a thermodynamic potential that measures the "useful" or process-initiating work obtainable from an isothermal, isobaric thermodynamic system. The Gibbs free energy, originally called available energy, was developed in the 1870s by the American mathematician Josiah Willard Gibbs. In 1873, Gibbs described this “available energy” as the greatest amount of mechanical work which can be obtained from a given quantity of a certain substance in a given initial state, without increasing its total volume or allowing heat to pass to or from external bodies, except such as at the close of the processes are left in their initial condition.<ref>[http://en.wikipedia.org/wiki/Gibbs_free_energy Gibbs free energy]</ref> ===Free energy of reactions=== To derive the Gibbs free energy equation for an isolated system, let ''S''<sub>tot</sub> be the total entropy of the isolated system, that is, a system that cannot exchange heat or mass with its surroundings. According to the second law of thermodynamics: :<math> \Delta S_{tot} \ge 0 \,</math> and if Δ''S''<sub>tot</sub> = 0 then the process is reversible. The heat transfer ''Q'' vanishes for an adiabatic system. Any adiabatic process that is also reversible is called an isentropic <math> \left( {Q\over T} = \Delta S = 0 \right) \,</math> process. Now consider systems, having internal entropy ''S''<sub>int</sub>. Such a system is thermally connected to its surroundings, which have entropy ''S''<sub>ext</sub>. The entropy form of the second law applies only to the closed system formed by both the system and its surroundings. Therefore a process is possible if :<math> \Delta S_{int} + \Delta S_{ext} \ge 0 \,</math>. If ''Q'' is heat transferred to the system from the surroundings, so −''Q'' is heat lost by the surroundings :so that <math>\Delta S_{ext} = - {Q \over T},</math> corresponds to entropy change of the surroundings. :We now have: :<math> \Delta S_{int} - {Q \over T} \ge 0 \,</math> :Multiply both sides by ''T'': :<math> T \Delta S_{int} - Q \ge 0 \,</math> ''Q'' is heat transferred ''to'' the system; if the process is now assumed to be isobaric, then ''Q''<sub>p</sub> = Δ''H'': :<math> T \Delta S_{int} - \Delta H \ge 0\, </math> Δ''H'' is the enthalpy change of reaction (for a chemical reaction at constant pressure). Then :<math> \Delta H - T \Delta S_{int} \le 0 \,</math> for a possible process. Let the change Δ''G'' in Gibbs free energy be defined as :<math> \Delta G = \Delta H - T \Delta S_{int} \,</math> ''(eq.1)'' Notice that it is not defined in terms of any external state functions, such as Δ''S''<sub>ext</sub> or Δ''S''<sub>tot</sub>. Then the second law becomes, which also tells us about the spontaneity of the reaction: :<math> \Delta G < 0 \,</math> '''favoured reaction''' (Spontaneous) :<math> \Delta G = 0 \,</math> Neither the forward nor the reverse reaction prevails (Equilibrium) :<math> \Delta G > 0 \,</math> '''disfavoured reaction''' (Nonspontaneous) Gibbs free energy ''G'' itself is defined as :<math> G = H - T S_{int} \,</math> ''(eq.2)'' but notice that to obtain equation (2) from equation (1) we must assume that ''T'' is constant. Thus, Gibbs free energy is most useful for thermochemical processes at constant temperature and pressure: both isothermal and isobaric. Such processes don't move on a ''P''-''V'' diagram, such as phase change of a pure substance, which takes place at the saturation pressure and temperature. Chemical reactions, however, do undergo changes in chemical potential, which is a state function. Thus, thermodynamic processes are not confined to the two dimensional ''P''-''V'' diagram. There is a third dimension for ''n'', the quantity of gas. For the study of explosive chemicals, the processes are not necessarily isothermal and isobaric. For these studies, Helmholtz free energy is used.<ref>[http://en.wikipedia.org/wiki/Gibbs_free_energy Gibbs free energy]</ref> If an isolated system (''Q'' = 0) is at constant pressure (''Q'' = Δ''H''), then :<math> \Delta H = 0 \,</math> Therefore the Gibbs free energy of an isolated system is: <!-- 3/3/2010 10:48 EST: Isolated, not closed; closed systems can exchange energy and therefore have non-zero enthalpy changes --> :<math> \Delta G = -T \Delta S \,</math> and if Δ''G'' ≤ 0 then this implies that Δ''S'' ≥ 0, back to where we started the derivation of Δ''G'' ===Useful identities=== :<math>\Delta G = \Delta H - T \Delta S \,</math> for constant temperature :<math>\Delta_r G^\circ = -R T \ln K \,</math> :<math>\Delta_r G = \Delta_r G^\circ + R T \ln Q_r \,</math> (see Chemical equilibrium). :<math>\Delta G = -nFE \,</math> :<math>\Delta G^\circ = -nFE^\circ \,</math> and rearranging gives :<math>nFE^\circ = RT \ln K \,</math> :<math>nFE = nFE^\circ - R T \ln Q_r \, \,</math> :<math>E = E^\circ - \frac{R T}{n F} \ln Q_r \, \,</math> which relates the electrical potential of a reaction to the equilibrium coefficient for that reaction (Nernst equation). where Δ''G'' = change in Gibbs free energy, Δ''H'' = change in enthalpy, ''T'' = absolute temperature, Δ''S'' = change in entropy, ''R'' = gas constant, ln = natural logarithm, Δ<sub>r</sub>''G'' = change of reaction in Gibbs free energy, Δ<sub>r</sub>''G°'' = standard change of reaction in Gibbs free energy, ''K'' = equilibrium constant, ''Qr'' = reaction quotient, ''n'' = number of electrons per mole product, ''F'' = Faraday constant (coulombs per mole), and ''E'' = electrode potential of the reaction. Moreover, we also have: :<math>K_{eq}=e^{- \frac{\Delta_r G^\circ}{RT}}</math> :<math>\Delta_r G^\circ = -RT(\ln K_{eq}) = -2.303RT(\log K_{eq})</math> which relates the equilibrium constant with Gibbs free energy.<ref>[http://en.wikipedia.org/wiki/Gibbs_free_energy Gibbs free energy]</ref> ==Cell The basic unit of life== The cell is the functional basic unit of life. Cell was discovered by '''Robert Hooke''' and is the functional unit of all known living organisms. It is the smallest unit of life that is classified as a living thing, and is often called the building block of life. Some organisms, such as most bacteria, are unicellular (consist of a single cell). Other organisms, such as humans, cats, dogs, and birds, are multicellular. Humans have about 100 trillion or 10 <sup>14</sup> cells; a typical cell size is 10 µm and a typical cell mass is 1 nanogram. '''The largest cells are about 135 µm in the anterior horn in the spinal cord while granule cells in the cerebellum, the smallest, can be some 4 µm''' and the longest cell can reach from the toe to the lower brain stem (Pseudounipolar cells). '''The largest known cells are unfertilised ostrich egg cells which weigh 3.3 pounds.''' In 1835, before the final cell theory was developed, Jan Evangelista Purkyně observed small "granules" while looking at the plant tissue through a microscope. The cell theory, first developed in 1839 by Matthias Jakob Schleiden and Theodor Schwann, states that all organisms are composed of one or more cells, that all cells come from preexisting cells, that vital functions of an organism occur within cells, and that all cells contain the hereditary information necessary for regulating cell functions and for transmitting information to the next generation of cells. '''The word cell comes from the Latin cellula, meaning, a small room.''' The descriptive term for the smallest living biological structure was coined by Robert Hooke in a book he published in 1865 when he compared the cork cells he saw through his microscope to the small rooms monks lived in.There are two types of cells: '''eukaryotic and prokaryotic'''. Prokaryotic cells are usually independent, while eukaryotic cells are often found in multicellular organisms.<ref>[http://en.wikipedia.org/wiki/Cell_(biology) Cell biology]</ref> {{quotation|'''Origin of life and Miller's experiment'''<ref>[http://en.wikipedia.org/wiki/Miller%E2%80%93Urey_experiment Miller Urey experiment]</ref> [[Image:Miller-Urey experiment-en.svg|thumb|350px|The experiment]] '''Earth's early atmosphere''' Some evidence suggests that Earth's original atmosphere might have contained fewer of the reducing molecules than was thought at the time of the Miller–Urey experiment. There is abundant evidence of major volcanic eruptions 4 billion years ago, which would have released carbon dioxide, nitrogen, hydrogen sulfide (H<sub>2</sub>S), and sulfur dioxide (SO<sub>2</sub>) into the atmosphere. Experiments using these gases in addition to the ones in the original Miller–Urey experiment have produced more diverse molecules. The experiment created a mixture that was racemic (containing both L and D enantiomers) and experiments since have shown that "in the lab the two versions are equally likely to appear."<ref name="NS">{{Cite news |date=2006-06-02 |title=Right-handed amino acids were left behind |periodical=New Scientist |publisher=Reed Business Information Ltd |issue=2554 |pages=18 |url=http://www.newscientist.com/channel/life/mg19025545.200-righthanded-amino-acids-were-left-behind.html |accessdate=2008-07-09}}</ref> However, in nature, L amino acids dominate; later experiments have confirmed disproportionate amounts of L or D oriented enantiomers are possible.<ref>{{cite journal |last=Kojo |first=Shosuke |coauthors=Hiromi Uchino, Mayu Yoshimura and Kyoko Tanaka |year=2004 |month=October |title=Racemic D,L-asparagine causes enantiomeric excess of other coexisting racemic D,L-amino acids during recrystallization: a hypothesis accounting for the origin of L-amino acids in the biosphere |journal=Chemical Communications |volume= |issue=19 |pages=2146–2147 |pmid=15467844 |accessdate=2008-07-09 |doi=10.1039/b409941a}}</ref> Originally it was thought that the primitive secondary atmosphere contained mostly ammonia and methane. However, it is likely that most of the atmospheric carbon was CO<sub>2</sub> with perhaps some CO and the nitrogen mostly N<sub>2</sub>. In practice gas mixtures containing CO, CO<sub>2</sub>, N<sub>2</sub>, etc. give much the same products as those containing CH<sub>4</sub> and NH<sub>3</sub> so long as there is no O<sub>2</sub>. The hydrogen atoms come mostly from water vapor. In fact, in order to generate aromatic amino acids under primitive earth conditions it is necessary to use less hydrogen-rich gaseous mixtures. Most of the natural amino acids, hydroxyacids, purines, pyrimidines, and sugars have been made in variants of the Miller experiment.<ref>{{cite web |url=http://www.science.siu.edu/microbiology/micr425/425Notes/14-OriginLife.html |title=MICR 425: PHYSIOLOGY & BIOCHEMISTRY of MICROORGANISMS: The Origin of Life |accessdate=2005-12-17 |publisher=SIUC / College of Science}}</ref> More recent results may question these conclusions. The University of Waterloo and University of Colorado conducted simulations in 2005 that indicated that the early atmosphere of Earth could have contained up to 40 percent hydrogen—implying a possibly much more hospitable environment for the formation of prebiotic organic molecules. The escape of hydrogen from Earth's atmosphere into space may have occurred at only one percent of the rate previously believed based on revised estimates of the upper atmosphere's temperature.<ref>{{cite web |url=http://newsrelease.uwaterloo.ca/news.php?id=4348 |accessdate=2005-12-17 |title=Early Earth atmosphere favorable to life: study |publisher=University of Waterloo}}</ref> One of the authors, Owen Toon notes: "In this new scenario, organics can be produced efficiently in the early atmosphere, leading us back to the organic-rich soup-in-the-ocean concept... I think this study makes the experiments by Miller and others relevant again." Outgassing calculations using a chondritic model for the early earth complement the Waterloo/Colorado results in re-establishing the importance of the Miller–Urey experiment.<ref>{{cite web |url=http://news-info.wustl.edu/news/page/normal/5513.html |accessdate=2005-12-17 |title=Calculations favor reducing atmosphere for early earth – Was Miller–Urey experiment correct? |first=Tony |last=Fitzpatrick |publisher=Washington University in St. Louis |year=2005}}</ref> Conditions similar to those of the Miller–Urey experiments are present in other regions of the solar system, often substituting ultraviolet light for lightning as the energy source for chemical reactions. The Murchison meteorite that fell near Murchison, Victoria, Australia in 1969 was found to contain over 90 different amino acids, nineteen of which are found in Earth life. Comets and other icy outer-solar-system bodies are thought to contain large amounts of complex carbon compounds (such as tholins) formed by these processes, darkening surfaces of these bodies.<ref>{{cite journal |author=Thompson WR, Murray BG, Khare BN, Sagan C |title=Coloration and darkening of methane clathrate and other ices by charged particle irradiation: applications to the outer solar system |journal=Journal of geophysical research |volume=92 |issue=A13 |pages=14933–47 |year=1987 |month=December |pmid=11542127 |doi=10.1029/JA092iA13p14933}}</ref> The early Earth was bombarded heavily by comets, possibly providing a large supply of complex organic molecules along with the water and other volatiles they contributed. This has been used to infer an origin of life outside of Earth: the panspermia hypothesis. The '''Miller and Urey experiment'''<ref>{{cite journal |author=Hill HG, Nuth JA |title=The catalytic potential of cosmic dust: implications for prebiotic chemistry in the solar nebula and other protoplanetary systems |journal=Astrobiology |volume=3 |issue=2 |pages=291–304 |year=2003 |pmid=14577878 |doi=10.1089/153110703769016389}}</ref> (or '''Urey–Miller experiment''')<ref>{{cite journal | title=The analysis of comet mass spectrometric data | author=Balm SP, Hare J.P., Kroto HW| journal=Space Science Reviews| year=1991| volume=56| pages=185–9 |doi=10.1007/BF00178408}}</ref> was an experiment that simulated hypothetical conditions thought at the time to be present on the early Earth, and tested for the occurrence of chemical origins of life. Specifically, the experiment tested Alexander Oparin's and J. B. S. Haldane's hypothesis that conditions on the primitive Earth favored chemical reactions that synthesized organic compounds from inorganic precursors. Considered to be the classic experiment on the origin of life, it was conducted in 1952<ref>{{cite journal | title = Stanley Miller's 70th Birthday | journal = Origins of Life and Evolution of the Biosphere | volume = 30 | pages = 107–12 | year = 2000 | publisher = Kluwer Academic Publishers | location = Netherlands | url = http://www.issol.org/miller/70thB-Day.pdf|format=PDF | doi = 10.1023/A:1006746205180 | last1 = Bada | first1 = Jeffrey L.}}</ref> and published in 1953 by Stanley Miller and Harold Urey at the University of Chicago.<ref>{{cite journal |last=Miller |first=Stanley L. |url=http://www.abenteuer-universum.de/pdf/miller_1953.pdf |format=PDF|title=Production of Amino Acids Under Possible Primitive Earth Conditions|journal=Science |year=1953 |month=May |volume=117 |pages=528 |doi=10.1126/science.117.3046.528 |pmid=13056598 |issue=3046}}</ref><ref>{{cite journal |last=Miller |first=Stanley L. |coauthors=Harold C. Urey |title=Organic Compound Synthesis on the Primitive Earth |journal=Science |year=1959 |month=July |volume=130 |pages=245 |doi=10.1126/science.130.3370.245 |pmid=13668555 |issue=3370}} Miller states that he made "A more complete analysis of the products" in the 1953 experiment, listing additional results.</ref><ref>{{cite journal |title=The 1953 Stanley L. Miller Experiment: Fifty Years of Prebiotic Organic Chemistry |author=A. Lazcano, J. L. Bada |journal=Origins of Life and Evolution of Biospheres |volume=33 |year=2004 |month=June |pages=235–242 |doi=10.1023/A:1024807125069 |pmid=14515862 |issue=3}}</ref> After Miller's death in 2007, scientists examining sealed vials preserved from the original experiments were able to show that there were actually well over 20 different amino acids produced in Miller's original experiments. That is considerably more than what Miller originally reported, and more than the 20 that naturally occur in life. Moreover, some evidence suggests that Earth's original atmosphere might have had a different composition than the gas used in the Miller–Urey experiment. There is abundant evidence of major volcanic eruptions 4 billion years ago, which would have released carbon dioxide, nitrogen, hydrogen sulfide (H<sub>2</sub>S), and sulfur dioxide (SO<sub>2</sub>) into the atmosphere. Experiments using these gases in addition to the ones in the original Miller–Urey experiment have produced more diverse molecules.<ref name="NS"/> '''Experiment''' The experiment used water (H<sub>2</sub>O), methane (CH<sub>4</sub>), ammonia (NH<sub>3</sub>), and hydrogen (H<sub>2</sub>). The chemicals were all sealed inside a sterile array of glass tubes and flasks connected in a loop, with one flask half-full of liquid water and another flask containing a pair of electrodes. The liquid water was heated to induce evaporation, sparks were fired between the electrodes to simulate lightning through the atmosphere and water vapor, and then the atmosphere was cooled again so that the water could condense and trickle back into the first flask in a continuous cycle. At the end of one week of continuous operation, Miller and Urey observed that as much as 10–15% of the carbon within the system was now in the form of organic compounds. Two percent of the carbon had formed amino acids that are used to make proteins in living cells, with glycine as the most abundant. Sugars, liquids, were also formed. Nucleic acids were not formed within the reaction. But the common 20 amino acids were formed, but in various concentrations. In an interview, Stanley Miller stated: "Just turning on the spark in a basic pre-biotic experiment will yield 11 out of 20 amino acids."<ref>{{cite web|url=http://www.accessexcellence.org/WN/NM/miller.php |title=EXOBIOLOGY: An Interview with Stanley L. Miller |publisher=Accessexcellence.org |date= |accessdate=2009-08-20}}</ref> As observed in all subsequent experiments, both left-handed (L) and right-handed (D) optical isomers were created in a racemic mixture. The original experiment remains today under the care of Miller and Urey's former student Professor Jeffrey Bada at the University of California, San Diego, Scripps Institution of Oceanography.<ref>{{cite news|url=http://www.nytimes.com/2010/05/18/science/18conv.html |title=A Conversation With Jeffrey L. Bada: A Marine Chemist Studies How Life Began |publisher=nytimes.com |date=2010-05-17 | first=Claudia | last=Dreifus}}</ref> One-step reactions among the mixture components can produce hydrogen cyanide (HCN), formaldehyde (CH<sub>2</sub>O),<ref>http://books.nap.edu/openbook.php?record_id=11860&page=85 Exploring Organic Environments in the Solar System (2007)</ref> and other active intermediate compounds (acetylene, cyanoacetylene, etc.): : CO<sub>2</sub> &rarr; CO + [O] (atomic oxygen) : CH<sub>4</sub> + 2[O] &rarr; CH<sub>2</sub>O + H<sub>2</sub>O : CO + NH<sub>3</sub> &rarr; HCN + H<sub>2</sub>O : CH<sub>4</sub> + NH<sub>3</sub> &rarr; HCN + 3H<sub>2</sub> (BMA process) The formaldehyde, ammonia, and HCN then react by Strecker synthesis to form amino acids and other biomolecules: : CH<sub>2</sub>O + HCN + NH<sub>3</sub> &rarr; NH<sub>2</sub>-CH<sub>2</sub>-CN + H<sub>2</sub>O : NH<sub>2</sub>-CH<sub>2</sub>-CN + 2H<sub>2</sub>O &rarr; NH<sub>3</sub> + NH<sub>2</sub>-CH<sub>2</sub>-COOH (glycine) Furthermore, water and formaldehyde can react via Butlerov's reaction to produce various sugars like ribose. '''Other experiments''' This experiment inspired many others. In 1961, Joan Oró found that the nucleotide base adenine could be made from hydrogen cyanide (HCN) and ammonia in a water solution. His experiment produced a large amount of adenine, which molecules were formed from 5 molecules of HCN.<ref>{{cite journal |author=Oró J, Kimball AP |title=Synthesis of purines under possible primitive earth conditions. I. Adenine from hydrogen cyanide |journal=Archives of biochemistry and biophysics |volume=94|pages=217–27 |year=1961 |month=August |pmid=13731263 |doi=10.1016/0003-9861(61)90033-9}}</ref> Also, many amino acids are formed from HCN and ammonia under these conditions.<ref>{{cite journal |author=Oró J, Kamat SS |title=Amino-acid synthesis from hydrogen cyanide under possible primitive earth conditions |journal=Nature |volume=190 |issue= |pages=442–3 |year=1961 |month=April |pmid=13731262 |doi=10.1038/190442a0}}</ref> Experiments conducted later showed that the other RNA and DNA nucleobases could be obtained through simulated prebiotic chemistry with a reducing atmosphere.<ref>{{cite book | title=Origins of Prebiological Systems and of Their Molecular Matrices| editor= Fox SW| author=Oró J| year=1967| pages=137| publisher=New York Academic Press}}</ref> There also had been similar electric discharge experiments related to the origin of life contemporaneous with Miller–Urey. An article in ''The New York Times'' (March 8, 1953:E9), titled "Looking Back Two Billion Years" describes the work of Wollman (William) M. MacNevin at The Ohio State University, before the Miller ''Science'' paper was published in May 1953. MacNevin was passing 100,000 volt sparks through methane and water vapor and produced "resinous solids" that were "too complex for analysis." The article describes other early earth experiments being done by MacNevin. It is not clear if he ever published any of these results in the primary scientific literature. K. A. Wilde submitted a paper to ''Science'' on December 15, 1952, before Miller submitted his paper to the same journal on February 14, 1953. Wilde's paper was published on July 10, 1953.<ref>{{cite journal |last=Wilde |first=Kenneth A. |authorlink= |coauthors=Bruno J. Zwolinski and Ransom B. Parlin |year=1953 |month=July |title=The Reaction Occurring in CO<sub>2</sub>, <sub>2</sub>O Mixtures in a High-Frequency Electric Arc |journal=Science |volume=118 |issue=3054 |pages=43–44 |id= |url=http://www.sciencemag.org/cgi/content/citation/118/3054/43-a |accessdate=2008-07-09 |doi=10.1126/science.118.3054.43-a |pmid=13076175}}</ref> Wilde used voltages up to only 600 V on a binary mixture of carbon dioxide (CO<sub>2</sub>) and water in a flow system. He observed only small amounts of carbon dioxide reduction to carbon monoxide, and no other significant reduction products or newly formed carbon compounds. Other researchers were studying UV-photolysis of water vapor with carbon monoxide. They have found that various alcohols, aldehydes and organic acids were synthesized in reaction mixture.<ref>[http://www.springerlink.com/content/tvx0013g77u51v37/ Synthesis of organic compounds from carbon monoxide and water by UV photolysis]</ref> More recent experiments by chemist Jeffrey Bada at Scripps Institution of Oceanography (in La Jolla, CA) were similar to those performed by Miller. However, Bada noted that in current models of early Earth conditions, carbon dioxide and nitrogen (N<sub>2</sub>) create nitrites, which destroy amino acids as fast as they form. However, the early Earth may have had significant amounts of iron and carbonate minerals able to neutralize the effects of the nitrites. When Bada performed the Miller-type experiment with the addition of iron and carbonate minerals, the products were rich in amino acids. This suggests the origin of significant amounts of amino acids may have occurred on Earth even with an atmosphere containing carbon dioxide and nitrogen.<ref>{{Cite news |last=Fox |first=Douglas |date=2007-03-28 |title=Primordial Soup's On: Scientists Repeat Evolution's Most Famous Experiment |periodical=Scientific American |series=History of Science |publisher=Scientific American Inc. |url=http://www.sciam.com/article.cfm?id=primordial-soup-urey-miller-evolution-experiment-repeated |accessdate=2008-07-09}}</ref>.}} ===Prokaryotes=== [[Image:Relative scale.svg|thumb|300px|right|The sizes of prokaryotes relative to other organisms and biomolecules]] Prokaryotes are single-cell organisms that do not have a nucleus, mitochondria, or any other membrane-bound organelles. In other words, neither their DNA nor any of their other sites of metabolic activity are collected together in a discrete membrane-enclosed area. Instead, everything is openly accessible within the cell, some of which is free-floating[3]. A distinction between prokaryotes and eukaryotes (meaning true kernel, also spelled "eucaryotes") is that eukaryotes do have "true" nuclei containing their DNA. Unlike prokaryotes, eukaryotic organisms may be unicellular, as in amoebae, or multicellular, as in plants and animals. The difference between the structure of prokaryotes and eukaryotes is so great that it is sometimes considered to be the most important distinction among groups of organisms. The cell structure of prokaryotes differs greatly from that of eukaryotes. The defining characteristic is the absence of a nucleus. Also the size of Ribosomes in prokaryotes is smaller than that in eukaryotes, which is now where respiration takes place. The genomes of prokaryotes are held within an irregular DNA/protein complex in the cytosol called the nucleoid, which lacks a nuclear envelope. <ref>[http://en.wikipedia.org/wiki/Prokaryote Prokaryote]</ref> In general, prokaryotes lack the following membrane-bound cell compartments: mitochondria and chloroplasts. Instead, processes such as oxidative phosphorylation and photosynthesis take place across the prokaryotic plasma membrane. However, prokaryotes do possess some internal structures, such as cytoskeletons, and the bacterial order Planctomycetes have a membrane around their nucleoid and contain other membrane-bound cellular structures. Both eukaryotes and prokaryotes contain large RNA/protein structures called ribosomes, which produce protein. Prokaryotes are usually much smaller than eukaryotic cells. Prokaryotes also differ from eukaryotes in that they contain only a single loop of stable chromosomal DNA stored in an area named the nucleoid, whereas eukaryote DNA is found on tightly bound and organized chromosomes. Although some eukaryotes have satellite DNA structures called plasmids, in general these are regarded as a prokaryote feature, and many important genes in prokaryotes are stored on plasmids. Prokaryotes have a larger surface-area-to-volume ratio giving them a higher metabolic rate, a higher growth rate, and, as a consequence, a shorter generation time compared to Eukaryotes. A criticism of this classification is that the word "prokaryote" is based on what these organisms are not (they are not eukaryotic), rather than what they are (either archaea or bacteria). In 1977, Carl Woese proposed dividing prokaryotes into the Bacteria and Archaea (originally Eubacteria and Archaebacteria) because of the major differences in the structure and genetics between the two groups of organisms. This arrangement of Eukaryota (also called "Eukarya"), Bacteria, and Archaea is called the three-domain system, replacing the traditional two-empire system.<ref>[http://en.wikipedia.org/wiki/Prokaryote Prokaryote]</ref> ===Eukaryotic cell=== [[Image:celltypes.svg|thumb|400px|The cells of eukaryotes (left) and prokaryotes (right)]] The origin of the eukaryotic cell was a milestone in the evolution of life, since they include all complex cells and almost all multi-cellular organisms. The timing of this series of events is hard to determine; Knoll (2006) suggests they developed approximately 1.6 – 2.1 billion years ago. Some acritarchs are known from at least 1,650 million years ago, and the possible alga Grypania has been found as far back as 2,100 million years ago. Fossils that are clearly related to modern groups start appearing around 1.2 billion years ago, in the form of a red alga, though recent work suggests the existence of fossilized filamentous algae in the Vindhya basin dating back to 1.6 to 1.7 billion years ago. Biomarkers suggest that at least stem eukaryotes arose even earlier. The presence of steranes in Australian shales indicates that eukaryotes were present 2.7 billion years ago.<ref>[http://en.wikipedia.org/wiki/Eukaryote Eukaryote]</ref> There are many different types of eukaryotic cells, though animals and plants are the most familiar eukaryotes, and thus provide an excellent starting point for understanding eukaryotic structure. Fungi and many protists have some substantial differences, however. ''Animal cell'' An animal cell is a form of eukaryotic cell that makes up many tissues in animals. The animal cell is distinct from other eukaryotes, most notably plant cells, as they lack cell walls and chloroplasts, and they have smaller vacuoles. Due to the lack of a rigid cell wall, animal cells can adopt a variety of shapes, and a phagocytic cell can even engulf other structures. There are many different cell types. For instance, there are approximately 210 distinct cell types in the adult human body.<ref>[http://en.wikipedia.org/wiki/Eukaryote Eukaryote]</ref> ''Plant cell'' Plant cells are quite different from the cells of the other eukaryotic organisms. Their distinctive features are: A large central vacuole (enclosed by a membrane, the tonoplast), which maintains the cell's turgor and controls movement of molecules between the cytosol and sap A primary cell wall containing cellulose, hemicellulose and pectin, deposited by the protoplast on the outside of the cell membrane; this contrasts with the cell walls of fungi, which contain chitin, and the cell envelopes of prokaryotes, in which peptidoglycans are the main structural molecules The plasmodesmata, linking pores in the cell wall that allow each plant cell to communicate with other adjacent cells; this is different from the functionally analogous system of gap junctions between animal cells. Plastids, especially chloroplasts that contain chlorophyll, the pigment that gives plants their green color and allows them to perform photosynthesis Higher plants, including conifers and flowering plants (Angiospermae) lack the flagellae and centrioles that are present in animal cells. ''Fungal cell'' Fungal cells are most similar to animal cells, with the following exceptions: A cell wall that contains chitin Less definition between cells; the hyphae of higher fungi have porous partitions called septa, which allow the passage of cytoplasm, organelles, and, sometimes, nuclei. Primitive fungi have few or no septa, so each organism is essentially a giant multinucleate supercell; these fungi are described as coenocytic. Only the most primitive fungi, chytrids, have flagella.<ref>[http://en.wikipedia.org/wiki/Eukaryote Eukaryote]</ref> ''Other eukaryotic cells'' Eukaryotes are a very diverse group, and their cell structures are equally diverse. Many have cell walls; many do not. Many have chloroplasts, derived from primary, secondary, or even tertiary endosymbiosis; and many do not. Some groups have unique structures, such as the cyanelles of the glaucophytes, the haptonema of the haptophytes, or the ejectisomes of the cryptomonads. Other structures, such as pseudopods, are found in various eukaryote groups in different forms, such as the lobose amoebozoans or the reticulose foraminiferans. {| class="toccolours" border="1" style="margin:auto; border:1px solid gray; border-collapse:collapse; clear:both;" |+'''Table 1: Comparison of features of Prokaryotic and Eukaryotic cells''' |- |&nbsp; !Prokaryotes !Eukaryotes |- !Typical organisms |Bacteria, archaea |Protists, Fungi, Plants, Animals |- !Typical size |~ 1–10 µm |~ 10–100 µm (sperm cells, apart from the tail, are smaller) |- !Type of nucleus |nucleoid region; no real nucleus |real nucleus surrounded by double membrane |- !DNA |circular (usually) |linear molecules (chromosomes) with histone proteins |- !RNA-/protein-synthesis |coupled in cytoplasm |RNA-synthesis inside the nucleus<br />protein synthesis in cytoplasm |- !Ribosomes |50S+30S |60S+40S |- !Cytoplasmatic structure |very few structures |highly structured by endomembranes and a cytoskeleton |- !Cell movement |flagella made of flagellin |flagella and cilia containing microtubules; lamellipodia and filopodia containing actin |- !Mitochondria |none |one to several thousand (though some lack mitochondria) |- !Chloroplasts |none |in algae and plants |- !Organization |usually single cells |single cells, colonies, higher multicellular organisms with specialized cells |- !Cell division |Binary fission (simple division) |Mitosis (fission or budding) <br />Meiosis |} ===Plant cell is different from animal cell=== [[Image:Animal cell structure en.svg|thumb|400px|right|Structure of a typical animal cell]] [[Image:Plant cell structure-en.svg|thumb|400px|Structure of a typical plant cell]] Plant cells are eukaryotic cells that differ in several key respects from the cells of other eukaryotic organisms. Their distinctive features include: A large central '''vacuole''', a water-filled volume enclosed by a membrane known as the '''tonoplast''' maintains the cell's turgor, controls movement of molecules between the cytosol and sap, stores useful material and digests waste proteins and organelles. A '''cell wall''' composed of cellulose and hemicellulose, pectin and in many cases lignin, are secreted by the '''protoplast''' on the outside of the cell membrane. This contrasts with the cell walls of fungi (which are made of chitin), and of bacteria, which are made of peptidoglycan. Specialised cell-cell communication pathways known as plasmodesmata, pores in the primary cell wall through which the plasmalemma and endoplasmic reticulum of adjacent cells are continuous. Plastids, the notables one being the '''chloroplasts''', which contain chlorophyll and the biochemical systems for light harvesting and photosynthesis, but also amyloplasts specialized for starch storage, elaioplasts specialized for fat storage, and chromoplasts specialized for synthesis and storage of pigments. As in mitochondria, which have a genome encoding 37 genes, plastids have their own genomes of about 100-120 unique genes and, it is presumed, arose as prokaryotic endosymbionts living in the cells of an early eukaryotic ancestor of the land plants and algae. Unlike animal cells, plant cells are stationary. Cell division by construction of a phragmoplast as a template for building a cell plate late in cytokinesis is characteristic of land plants and a few groups of algae, the notable one being the Charophytes and the Order Trentepohliales. The sperm of bryophytes have flagellae similar to those in animals, but higher plants, (including Gymnosperms and flowering plants) '''lack the flagellae and centrioles that are present in animal cells'''.<ref>[http://en.wikipedia.org/wiki/Plant_cell Plant Cell]</ref> {| class="toccolours" border="1" style="margin:auto; border:1px solid gray; border-collapse:collapse;" |+'''Table 2: Comparison of structures between animal and plant cells''' |- | !Typical animal cell !Typical plant cell |- style="vertical-align:top;" !Organelles | * Nucleus ** Nucleolus (within nucleus) * Rough endoplasmic reticulum (ER) * Smooth ER * Ribosomes * Cytoskeleton * Golgi apparatus * Cytoplasm * Mitochondria * Vesicles * Lysosomes * Centrosome ** Centrioles | * Nucleus ** Nucleolus (within nucleus) * Rough ER * Smooth ER * Ribosomes * Cytoskeleton * Golgi apparatus (dictiosomes) * Cytoplasm * Mitochondria * Plastids and its derivatives * Vacuole(s) * Cell wall |} === Origin of Eukaryotic organelles and endosymbiotic theory=== The endosymbiotic (from the Greek: endo- meaning inside and -symbiosis meaning cohabiting) theory was first articulated by the '''Russian botanist Konstantin Mereschkowski in 1905'''. Mereschkowski was familiar with work by botanist Andreas Schimper, who had observed in 1883 that the division of chloroplasts in green plants closely resembled that of free-living cyanobacteria, and who had himself tentatively proposed (in a footnote) that green plants had arisen from a symbiotic union of two organisms. Ivan Wallin extended the idea of an endosymbiotic origin to mitochondria in the 1920s.These theories were initially dismissed or ignored. More detailed electron microscopic comparisons between cyanobacteria and chloroplasts (for example studies by Hans Ris), combined with the discovery that plastids and mitochondria contain their own DNA (which by that stage was recognized to be the hereditary material of organisms) led to a resurrection of the idea in the 1960s. The endosymbiotic theory was advanced and substantiated with microbiological evidence by Lynn Margulis in a 1967 paper, The Origin of Mitosing Eukaryotic Cells.<ref>[http://en.wikipedia.org/wiki/Endosymbiotic_theory Endosymbiotic theory]</ref> In her 1981 work Symbiosis in Cell Evolution she argued that eukaryotic cells originated as communities of interacting entities, including endosymbiotic spirochaetes that developed into eukaryotic flagella and cilia. This last idea has not received much acceptance, because flagella lack DNA and do not show ultrastructural similarities to bacteria or archaea. According to Margulis and Dorion Sagan, "Life did not take over the globe by combat, but by networking" (i.e., by cooperation). The possibility that peroxisomes may have an endosymbiotic origin has also been considered, although they lack DNA. Christian de Duve proposed that they may have been the first endosymbionts, allowing cells to withstand growing amounts of free molecular oxygen in the Earth's atmosphere. However, it now appears that they may be formed de novo, contradicting the idea that they have a symbiotic origin. It is believed that over millennia these endosymbionts transferred some of their own DNA to the host cell's nucleus during the evolutionary transition from a symbiotic community to an instituted eukaryotic cell (called "serial endosymbiosis"). This hypothesis is thought to be possible because it is known today from scientific observation that transfer of DNA occurs between bacteria species, even if they are not closely related. Bacteria can take up DNA from their surroundings and have a limited ability to incorporate it into their own genome.<ref>[http://en.wikipedia.org/wiki/Endosymbiotic_theory Endosymbiotic theory]</ref> ====Eukaryotic organelles==== Eukaryotes are one of the structurally complex cell type, and by definition are in part organized by smaller interior compartments, that are themselves enclosed by lipid membranes that resemble the outermost cell membrane. The larger organelles, such as the nucleus and vacuoles, are easily visible with the light microscope. They were among the first biological discoveries made after the invention of the microscope.<ref>[http://en.wikipedia.org/wiki/Organelle Organelle]</ref> Not all eukaryotic cells have each of the organelles listed below. Exceptional organisms have cells which do not include some organelles that might otherwise be considered universal to eukaryotes (such as mitochondria).<ref>{{cite journal |author=Fahey RC, Newton GL, Arrack B, Overdank-Bogart T, Baley S |title=Entamoeba histolytica: a eukaryote without glutathione metabolism |journal=Science |volume=224 |issue=4644 |pages=70–72 |year=1984 |pmid=6322306 |doi=10.1126/science.6322306}}</ref> There are also occasional exceptions to the number of membranes surrounding organelles, listed in the tables below (e.g., some that are listed as double-membrane are sometimes found with single or triple membranes). In addition, the number of individual organelles of each type found in a given cell varies depending upon the function of that cell. {| class="wikitable" align="center" |+'''''Major eukaryotic organelles''''' !Organelle !Main function !Structure !Organisms !Notes |- |Chloroplast (plastid)||photosynthesis||double-membrane compartment||plants, protists <small>(rare kleptoplastic organisms)</small>||has some genes; theorized to be engulfed by the ancestral eukaryotic cell (endosymbiosis) |- |Endoplasmic reticulum||translation and folding of new proteins (rough endoplasmic reticulum), expression of lipids (smooth endoplasmic reticulum)||single-membrane compartment||all eukaryotes||rough endoplasmic reticulum is covered with ribosomes, has folds that are flat sacs; smooth endoplasmic reticulum has folds that are tubular |- |Golgi apparatus||sorting and modification of proteins||single-membrane compartment||all eukaryotes||cis-face (convex) nearest to rough endoplasmic reticulum; trans-face (concave) farthest from rough endoplasmic reticulum |- |Mitochondria||energy production (house), Mitochondria are self-replicating organelles that occur in various numbers, shapes, and sizes in the cytoplasm of all eukaryotic cells.||double-membrane compartment||most eukaryotes||has some DNA; theorized to be engulfed by an ancestral eukaryotic cell (endosymbiosis) |- |Vacuole||storage, helps maintain homeostasis||single-membrane compartment||eukaryotes|| |- |Nucleus||It houses the cell's chromosomes, and is the place where almost all DNA replication, RNA transcription take place||double-membrane compartment||all eukaryotes ||contains bulk of genome |- |} Mitochondria and chloroplasts, which have double-membranes and their own DNA, are believed to have originated from incompletely consumed or invading prokaryotic organisms, which were adopted as a part of the invaded cell. This idea is supported in the Endosymbiotic theory. {| class="wikitable" align="center" |+'''''Minor eukaryotic organelles and cell components''''' !Organelle/Macromolecule !Main function !Structure !Organisms |- |Acrosome||helps spermatoza fuse with ovum||single-membrane compartment||many animals |- |Autophagosome||vesicle which sequesters cytoplasmic material and organelles for degradation||double-membrane compartment||all eukaryotic cells |- |Centriole||anchor for Cytoskeleton, helps in cell division||Microtubule protein||animals |- |cilium||movement in or of external medium; "critical developmental signaling pathway".<ref name="badano2006">{{cite journal | last = Badano | first = Jose L. | authorlink = | coauthors = Norimasa Mitsuma, Phil L. Beales, Nicholas Katsanis | title = The Ciliopathies : An Emerging Class of Human Genetic Disorders | journal = Annual Review of Genomics and Human Genetics | volume = 7 | issue = | pages = 125–148 | publisher = | location = | month = September | year = 2006 | url = http://arjournals.annualreviews.org/doi/abs/10.1146/annurev.genom.7.080505.115610 | doi = 10.1146/annurev.genom.7.080505.115610 | id = | accessdate = 2008-06-15 | pmid = 16722803}}</ref> ||Microtubule protein||animals, protists, few plants |- |eEyespot apparatus||detects light, allowing phototaxis to take place|| ||green algae and other unicellular photosynthetic organisms such as Euglenids |- |Glycosome||carries out glycolysis||single-membrane compartment||Some protozoa, such as ''Trypanosomes''. |- |Glyoxysome||conversion of fat into sugars||single-membrane compartment||plants |- |Hydrogenosome||energy & hydrogen production||double-membrane compartment||a few unicellular eukaryotes |- |Lysosome||breakdown of large molecules (e.g., proteins + polysaccharides)||single-membrane compartment||most eukaryotes |- |Melanosome||pigment storage||single-membrane compartment||animals |- |Mitosome||not characterized||double-membrane compartment||a few unicellular eukaryotes |- |Myofibril||muscular contraction||bundled filaments||animals |- |Nucleolus||ribosome production||protein-DNA-RNA||most eukaryotes |- |Parenthesome||not characterized||not characterized||fungi |- |Peroxisome||breakdown of metabolic hydrogen peroxide||single-membrane compartment||all eukaryotes |- |Ribosome||translation of RNA into proteins||RNA-protein|| eukaryotes, prokaryotes |- |vesicle||material transport||single-membrane compartment||all eukaryotes |} [[Image:Carboxysomes EM.jpg|image|right|thumb|350px|(A) Electron micrograph of ''Halothiobacillus neapolitanus'' cells, arrows highlight carboxysomes. (B) Image of intact carboxysomes isolated from ''H. neapolitanus''. Scale bars are 100 nm.<ref>{{cite journal |pmid=17518518 |pmc=1872035 |doi=10.1371/journal.pbio.0050144 |year=2007 |month=Jun |author=Tsai Y, Sawaya MR, Cannon GC, Cai F, Williams EB, Heinhorst S, Kerfeld CA, Yeates TO |title=Structural analysis of CsoS1A and the protein shell of the Halothiobacillus neapolitanus carboxysome. |volume=5 |issue=6 |pages=e144 |journal=PLoS biology |url=http://biology.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pbio.0050144 |format=Free full text}}</ref>]] ====Prokaryotic organelles==== Prokaryotes are not as structurally complex as eukaryotes, and were once thought not to have any internal structures enclosed by lipid membranes. In the past, they were often viewed as having little internal organization; but, slowly, details are emerging about prokaryotic internal structures. An early false turn was the idea developed in the 1970s that bacteria might contain membrane folds termed mesosomes, but these were later shown to be artifacts produced by the chemicals used to prepare the cells for electron microscopy.<ref>{{cite journal |author=Ryter A |title=Contribution of new cryomethods to a better knowledge of bacterial anatomy |journal=Ann. Inst. Pasteur Microbiol. |volume=139 |issue=1 |pages=33–44 |year=1988 |pmid=3289587 |doi=10.1016/0769-2609(88)90095-6}}</ref> <ref>[http://en.wikipedia.org/wiki/Organelle Organelle]</ref> However, more recent research has revealed that at least some prokaryotes have microcompartments such as carboxysomes. These subcellular compartments are 100 - 200&nbsp;nm in diameter and are enclosed by a shell of proteins.<ref name="pref">{{cite journal |pmid=16081736 | doi = 10.1126/science.1113397 |year=2005 |month=August |author=Kerfeld CA, Sawaya MR, Tanaka S, Nguyen CV, Phillips M, Beeby M, Yeates TO |title=Protein structures forming the shell of primitive bacterial organelles. |volume=309 |issue=5736 |pages=936–8 |journal=Science}}</ref> Even more striking is the description of membrane-bound magnetosomes in bacteria,<ref>{{cite journal |author=Komeili A, Li Z, Newman DK, Jensen GJ |title=Magnetosomes are cell membrane invaginations organized by the actin-like protein MamK |journal=Science |volume=311 |issue=5758 |pages=242–5 |year=2006 |pmid=16373532 |doi=10.1126/science.1123231}}</ref><ref>{{cite journal |author=Scheffel A, Gruska M, Faivre D, Linaroudis A, Plitzko JM, Schüler D |title=An acidic protein aligns magnetosomes along a filamentous structure in magnetotactic bacteria |journal=Nature |volume=440 |issue=7080 |pages=110–4 |year=2006 |pmid=16299495 |doi=10.1038/nature04382}}</ref> as well as the nucleus-like structures of the ''Planctomycetes'' that are surrounded by lipid membranes.<ref>{{cite journal |author=Fuerst JA |title=Intracellular compartmentation in planctomycetes |journal=Annu. Rev. Microbiol. |volume=59 |issue= |pages=299–328 |year=2005 |pmid=15910279 |doi=10.1146/annurev.micro.59.030804.121258}}</ref> {| class="wikitable" align="center" |+'''''Prokaryotic organelles and cell components''''' !Organelle/Macromolecule !Main function !Structure !Organisms |- |Carboxysome||carbon fixation||protein-shell compartment||some bacteria |- |Chlorosome||photosynthesis||light harvesting complex||green sulfur bacteria |- |Flagellum||movement in external medium||protein filament||some prokaryotes and eukaryotes |- |Magnetosome||magnetic orientation||inorganic crystal, lipid membrane||magnetotactic bacteria |- |Nucleoid||DNA maintenance, transcription to RNA||DNA-protein||prokaryotes |- |Plasmid||DNA exchange||circular DNA||some bacteria |- |Ribosome||translation of RNA into proteins||RNA-protein|| eukaryotes, prokaryotes |- |Thylakoid||photosynthesis||photosystem proteins and pigments||mostly cyanobacteria |- |} ==''E.coli'' as Model organism== E. coli is frequently used as a model organism in microbiology studies. Cultivated strains (e.g. E. coli K12) are well-adapted to the laboratory environment, and, unlike wild type strains, have lost their ability to thrive in the intestine. Many lab strains lose their ability to form biofilms. These features protect wild type strains from antibodies and other chemical attacks, but require a large expenditure of energy and material resources. In 1946, Joshua Lederberg and Edward Tatum first described the phenomenon known as bacterial conjugation using E. coli as a model bacterium, and it remains the primary model to study conjugation.[citation needed] E. coli was an integral part of the first experiments to understand phage genetics, and early researchers, such as Seymour Benzer, used E. coli and phage T4 to understand the topography of gene structure. Prior to Benzer's research, it was not known whether the gene was a linear structure, or if it had a branching pattern. E. coli was one of the first organisms to have its genome sequenced; the complete genome of E. coli K12 was published by Science in 1997. The long-term evolution experiments using E. coli, begun by Richard Lenski in 1988, have allowed direct observation of major evolutionary shifts in the laboratory. In this experiment, one population of E. coli unexpectedly evolved the ability to aerobically metabolize citrate. This capacity is extremely rare in E. coli. As the inability to grow aerobically is normally used as a diagnostic criterion with which to differentiate E. coli from other, closely related bacteria such as Salmonella, this innovation may mark a speciation event observed in the lab. By combining nanotechnologies with landscape ecology complex habitat landscapes can be generated with details at the nanoscale. On such synthetic ecosystems evolutionary experiments with E. coli have been performed in order to study the spatial biophysics of adaptation in an island biogeography on-chip. Because of its long history of laboratory culture and ease of manipulation, E. coli also plays an important role in modern biological engineering and industrial microbiology. The work of Stanley Norman Cohen and Herbert Boyer in E. coli, using plasmids and restriction enzymes to create recombinant DNA, became a foundation of biotechnology. Considered a very versatile host for the production of heterologous proteins, researchers can introduce genes into the microbes using plasmids, allowing for the mass production of proteins in industrial fermentation processes. Genetic systems have also been developed which allow the production of recombinant proteins using E. coli. One of the first useful applications of recombinant DNA technology was the manipulation of E. coli to produce human insulin. Modified E. coli have been used in vaccine development, bioremediation, and production of immobilised enzymes. E. coli cannot, however, be used to produce some of the more large, complex proteins which contain multiple disulfide bonds and, in particular, unpaired thiols, or proteins that also require post-translational modification for activity. Studies are also being performed into programming E. coli to potentially solve complicated mathematics problems such as the Hamiltonian path problem. ==Yeast in biological research== [[Image:Yeast lifecycle.svg|thumb|right|250px|The yeast cell's life cycle: <br /> 1. Budding <br /> 2. Conjugation <br /> 3. Spore]] '''A model organism''' When researchers look for an organism to use in their studies, they look for several traits. Among these are size, generation time, accessibility, manipulation, genetics, conservation of mechanisms, and potential economic benefit. The yeast species S. pombe and S. cerevisiae are both well studied; these two species diverged approximately 300 to 600 million years before present, and are significant tools in the study of DNA damage and repair mechanisms. The alpha-factor of S. cerevisiae, has been compared to the liphophilic peptide created by the fungus ''Tremella mesenterica''. ''S. cerevisiae'' has developed as a model organism because it scores favorably on a number of these criteria. As a single celled organism ''S. cerevisiae'' is small with a short generation time (doubling time 1.25–2 hours at 30 °C (86 °F)) and can be easily cultured. These are all positive characteristics in that they allow for the swift production and maintenance of multiple specimen lines at low cost. ''S. cerevisiae'' can be transformed allowing for either the addition of new genes or deletion through homologous recombination. Furthermore, the ability to grow S. cerevisiae as a haploid simplifies the creation of gene knockouts strains. As a eukaryote, S. cerevisiae shares the complex internal cell structure of plants and animals without the high percentage of non-coding DNA that can confound research in higher eukaryotes. ''S. cerevisiae'' research is a strong economic driver, at least initially, as a result of its established use in industry.<ref>S[http://en.wikipedia.org/wiki/Saccharomyces_cerevisiae accharomyces cerevisiae]</ref> '''Genome sequencing''' ''S. cerevisiae'' was the first eukaryotic genome that was completely sequenced. The genome sequence was released in the public domain on April 24, 1996. Since then, regular updates have been maintained at the Saccharomyces Genome Database (SGD). This database is a highly annotated and cross-referenced database for yeast researchers. Another important S. cerevisiae database is maintained by the Munich Information Center for Protein Sequences (MIPS). The genome is composed of about 12,156,677 base pairs and 6,275 genes, compactly organized on 16 chromosomes. Only about 5,800 of these are believed to be true functional genes. Yeast is estimated to share about 23% of its genome with that of humans. The availability of the S. cerevisiae genome sequence and the complete set of deletion mutants has further enhanced the power of ''S. cerevisiae'' as a model for understanding the regulation of eukaryotic cells. A project underway to analyze the genetic interactions of all double deletion mutants through synthetic genetic array analysis will take this research one step further. Approaches that can be applied in many different fields of biological and medicinal science have been developed by yeast scientists. These include yeast two-hybrid for studying protein interactions and tetrad analysis. ==References== {{reflist|2}} {{bookcat}} hvh7c682wrggtma5zke4qnzu7mz3zcy High School Chemistry/Measurements in Chemistry 0 255983 4672063 2991487 2026-09-24T08:30:55Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672063 wikitext text/x-wiki {{TOC right}} ==Lesson Objectives== * Define qualitative and quantitative observations. * Distinguish between qualitative and quantitative observations. * Use quantitative observations in measurements. * State the different measurement systems used in chemistry. * State the different prefixes used in the metric system. * Do unit conversions. * Use scientific notation and significant figures. * Use basic calculations and dimensional analysis. * Use mathematical equations in chemistry. ==Qualitative and Quantitative Observations== One of the steps in the scientific method is observation. Observation involves recording data about the phenomenon we wish to investigate. There are two different types of observations which are called qualitative and quantitative. Qualitative observations are those involving words only while quantitative observations are those involving both words and numbers. Although all the observations we can make on a phenomenon are valuable, quantitative observations are more helpful than qualitative. Qualitative observations are somewhat more vague in nature because they involve comparative terms. A qualitative observation would be "The attendance clerk is a small woman". If the observer was 6 feet 4 inches tall, he/she might refer to a woman who is 5 feet 8 inches tall as "small". But if the observer reported this observation to a person who was 5 feet 2 inches tall, the listener would not acquire a good idea of the height of the attendance clerk because they would not think that a woman who is 5 feet 8 inches tall was small (Figure 2.1). [[File:Qualitative observations are relative.png|600px|thumb|center|'''Figure 2.1''': Qualitative observations are relative.]] The description "a small woman" could refer to any woman whose height was between 2 feet and 6 feet tall depending on who did the observing. Similarly, "a small car" could refer to anything from a compact car to a child's toy car. The word small is a comparative term. The same is true of words like tall, fast, slow, hot, and cold. These words do not have exact meanings. Quantitative observations on the other hand, have numbers and units associated with them and are, therefore, more exact (Table 2.1). Even if the number is only an estimate, it is more valuable than no number at all. {| class="wikitable" style="width:500px; margin:5px auto;" |+ Table 2.1: Qualitative and Quantitative Observations Comparisons ! scope="col" | Qualitative (words only) ! scope="col" | Quantitative (words and numbers) |- | The girl has very little money. || The girl has 85 cents. |- | The man was short. || The man was 5 feet 2 inches tall. |- | Use a small test tube. || Use a test tube less than 12 cm long. |- | It is a short walk to my house. || It is about 1 mile to my house. |} You can see that even if the number is an estimate, a quantitative observation contains more information because of the number associated with the observation. (Some people might not think that a walk of one mile was short even though the speaker in the above case did. If an actual measuring instrument is not available, the observer should always try to estimate a measurement so the observation will have a number associated with it. While estimated measurements may not be accurate, they are valuable because they establish an approximate size for observations. The observation, "The car is small", provides us with certain information. We know that the object is some kind of automobile (perhaps real, perhaps a toy) and we know that it is probably smaller than a limousine because almost no one would describe a limousine as “small”. Suppose instead, the observation had been, "The car is about 3 feet tall, 3 feet long, and 2 feet wide". While these estimated measurements cannot be considered to be accurate, we now know that we are not dealing with a compact automobile nor are we dealing with a toy car like Hot Wheels. With these estimated measurements, we know we are dealing with a car that is about the size of a tricycle. If we discover later that the car was actually 2 feet high instead of 3 feet high, it is not a problem because we knew the original observation was an estimate since it contained the word "about". Estimates are excellent observations if we do not have the ability to actually measure the object. Estimated measurements qualify as quantitative observations. Here is some information you may find helpful in making estimated observations. The distance from the top of your index finger to the first knuckle is about one inch. The entire index finger is about three inches long. Your foot is probably between eight and twelve inches long. Your height is probably between five and six feet. The distance from your wrist to your elbow is about one foot. A twenty-five cent coin is about one inch across and dollar bills are about 2.5 inches wide and about six inches long (Figure 2.2). [[File:Helpful hints when making estimates.png|frame|center|'''Figure 2.2''': Helpful hints when making estimates.]] In science, accurate quantitative observations are a great deal more useful than qualitative observations. When we speak about accurate quantitative measurements, we are essentially referring to measurements. Accurate measurements are vital to science. There are many measurement systems used in the world but only one that is used consistently in science. That system is called the International System of Units and is abbreviated as SI units. You are probably already familiar with part of the SI system because part of the SI system is called the Metric System. ==Mass and Its SI Unit== When you step on a bathroom scale, you are most likely thinking that about determining your ''weight'', right? You probably aren't wondering if you have gained mass. Is it okay then to use either term? Although we often use mass and weight interchangeably, each one has a specific definition and usage. The ''mass'' of an object does not change; whether the object is on the earth's equator, on top of Mt. Everest, or in outer space, the mass will always be the same. Because mass measures how much matter the object contains, it has to be a constant value. Weight, on the other hand, is a measure of the ''force'' with which an object is attracted to the earth or body upon which it is situated. Since the force of gravity is not the same at every point on the earth's surface, the weight of an object is not constant. For example, an object weighing 1.00000 lb in Panama weighs 1.00412 lb in Iceland. For large objects this difference may not be significant. However, since we will often be working with extremely tiny pieces of matter – atoms, molecules, etc. – we need to use mass and not weight. The basic unit of mass in the International System of Units (SI comes from the French name, ''Systeme Internationale'') is the gram. A gram is a relatively small measurement compared to, for instance, one pound. 454 grams equals one pound. While pounds are helpful in measuring the mass of a package that needs to be mailed, grams are much more useful in science. One gram is equal to 1, 000 milligrams or 0.001 kilogram; there are numerous intermediate measurements between each of these mass units as well as ones that are even larger and smaller that may be appropriate to the application at hand. These will be discussed in more detail in a later section. ==Length and its SI Unit== When the four minute mile was achieved on May 6, 1954 by Roger Bannister, it was an international sensation. Today, many runners have broken that record. Only a few countries measure length or distance using miles, feet, or inches. For instance, if you live in the US, you probably know your height in feet and inches, right? Or, if there is a mountain or even a hill near where you live, you probably know its height in feet. And when you discuss how far school is from your home, you probably try to figure out the distance in miles. However, most of the world measures distances in meters and kilometers; for shorter lengths, millimeters and centimeters will be used. For a student in Germany, she will state how many kilometers her school is from home, and the height of the mountain she is thinking of climbing will be given in meters (Figure 2.3). [[File:PlanicaJumpingHill.jpg|500px|center|thumb|'''Figure 2.3''': Using a laser to make a precise distance measurement.]] ==Volume: A Derived Unit== Volume is used to measure how much space an object takes up. It is a derived unit, meaning it is based on another basic SI unit—in this case, the meter (length) was used to measure the sides of a cube, designating a certain volume. This volume was determined to be a cubic meter, m<sup>3</sup>, which is used as the standard SI unit of volume. This is a very large unit, and it is not very useful for most measurements in chemistry. A more common unit is the liter (L), which is equal to 1/1000 of a cubic meter. Another commonly used volume measurement is the milliliter; 1000 mL = 1 L. One liter is the volume of the soda bottle that you might have recently purchased and have sitting in the refrigerator at home. You might also have a quart of milk in your refrigerator. Even though the size of the liter container and the milk carton may not appear to be the same, they are, in fact, almost exactly the same volume. A quart is just slightly smaller in volume than a liter (1 L = 1.057 quarts). It's only the packaging that is different! ==Measuring Temperature== In order to discuss temperature scales, let's briefly compare the concepts of ''heat'' and ''temperature''. Heat is a measurement of the total amount of kinetic energy while temperature describes the intensity of the heat, or what is often referred to as the average kinetic energy of the material. When we are measuring the temperature of an object we are measuring its average kinetic energy. For that, we use the Celsius and Kelvin scales. Scientists do not usually use the Fahrenheit scale. The size of a degree in kelvin (the unit is not capitalized) is the same as 1 degree Celsius. The difference is that the Kelvin scale begins with an absolute zero, the temperature at which all motion stops. To convert between the two scales you can use: K = °C + 273. Therefore, on the Kelvin scale, water freezes at 273 K and boils at 373 K. You might want to make note of the following: while most mathematical calculations in chemistry require you to convert Celsius temperatures into kelvin, when you are given a ''difference in temperature'', ΔT , you do ''not'' need to convert it to kelvin! A difference in temperature is the same whether it is in Celsius or kelvin. ==Lesson Summary== * The International System unit for mass if the gram. * The International System unit for length is the meter. * The unit for volume is derived from a cube that is 1.00 meter on each side; therefore the volume unit is cubic meters. A more common unit is the liter which is <math>\tfrac{1}{1000}</math> of a cubic meter. * The SI uses both degrees Celsius (°C) and absolute temperature in kelvin (K) for temperature units. K = °C + 273. ==Review Questions== # What are the basic units of measurement in the metric system for length and mass? # What unit is used to measure volume? How is this unit related to the measurement of length? # Explain the difference between weight and mass. # Give both the Celsius and kelvin values for the boiling and freezing points of water. # How do you convert from Celsius to kelvin? How does one degree Celsius compare with one kelvin? # If someone told you that a swimming pool's temperature was 275 K, would it be safe for you to go for a swim? # Determine which metric measurement you would use for each of the following: #: (a) The distance to the moon. #: (b) The mass of a doughnut. #: (c) The volume of a drinking glass. #: (d) The length of your little finger. ==Vocabulary== ; International System of Units, SI : The SI system of units is the modern form of the metric system and is generally a system devised around the convenience of multiples of 10. ; Kelvin temperature scale : The kelvin is unit of increment of temperature and is one of the seven SI basic units. The Kelvin scale is thermodynamic absolute temperature scale where absolute zero is the absence of all thermal zero. At K = 0, there is no molecular motion. The kelvin is not referred to as a "degree", it is written simply as K, not °K. {{chapnav|Chemistry - A Physical Science|Using Measurements}} {{CK-12 Chemistry}} m6eusoi0sggddi6ov5zs27qcwbsuznw Structural Biochemistry/Nucleic Acid/RNA/Small RNA 0 262120 4672076 4106203 2026-09-24T08:48:24Z R. Henrik Nilsson 3395618 amplication > amplification 4672076 wikitext text/x-wiki [[Image:SiRNAvitro.gif|thumb|300px|right|RNA interference in cultured cells.]] '''Small RNA''' is a classification of RNA which includes small-interferring RNA (siRNA), micro RNA (miRNA), and piwi-interacting RNA (piRNA). These small RNA play important roles in biological and diseases processes. == siRNA & micro RNA == '''small-interferring RNA''' ('''siRNA''') is a class of RNA molecules that are around 20-25 nucleotides in length. They are mostly involved with the RNA interference (RNAi) pathway in order to interfere with the expression of a specific gene. siRNA is a type of double stranded RNA that was found target mRNA cleavage sites and were designed to target transcript silencing through transfection of the siRNA into mammalian cells. This allowed for the development of RNAi-based applications such as a new class of therapeutics. '''micro RNA''' ('''miRNA''') is a class of RNA molecules that are found in eukaryotic cells. They are generally 20-25 nucleotides in length and are also involved in translation repression and gene silencing. They were similar to siRNA and was found to negatively regulate expression of target transcripts. [[Image:Microrna secondary structure.png|thumb|right|The stem-loop of a pre-microRNA.]] These two types of RNA were established as guides in governing silencing of target transcripts. This also raised questions of how these small RNAs were produced and it was found that immunoprecipitates in ''Drosophilia'' S2 cells processed the dsRNA (double stranded RNA) into the siRNA in vitro. miRNA was found to be derived from a conserved stem-loop precursor. This suggests that a dicing step could be required for miRNA biogenesis. The stem-loop forms part of a several hundred nucleotide long miRNA precursor which is then transcribes into miRNA. The existence of this precursor was found in ''Drosophia'' pupae. In analyzing small RNA pathways in ''Drosophia'', it was found that isolated ''dicer-1'' and ''dicer-2'' mutatnts were responsible for the biogeniss of miRNA and siRNA, respectively. Dicer-1 processed pre-miRNA independent of ATP while Dicer-2 processed dsRNA as ATP dependent. However, in mammalian cells, only one dicer generates both miRNA and siRNA. siRNA effected silencing as they program RNAi effectors (such as RISC) to target mRNA. RISC is a magnesium dependent endoribonuclease that is affected by miRNA and siRNA to target mRNA cleavage activity. miRNA has a controversial effector mechanism. This disparity is because there is a lack of a comparable well defined biochemical readout for miRNA induced RISC activity while there is a clear one from siRNA. ==Making RISC== '''RISC: the effector complex for small RNAs''' It is known that small RNAs aid in the regulation of gene expression. However, small RNAs cannot function individually to catalyze reactions. Instead, they come together and form RNA-induced silencing complexes (RISCs) in order to help with silencing genes and locating RISC targets. In this sense, the assembly of RISC is crucial for the small RNAs to do their job. <ref name="Making RISC"> Kawamata, Tomoko and Tomari, Yukihide. "Making RISC", '[Trends in Biochemical Sciences]', July 2010: 368-375. Retrieved on 21 November 2012.</ref> '''Argonaute: the core component of RISC''' The Argonaute (Ago) family of proteins is a main component of RISC that is essential to RISC’s function of target recognition and silencing. The Ago family can be divided into the Ago subfamily and Piwi subfamily. These Ago proteins, each with their own characteristics, are in charge of the functions of the small RNAs that they are paired with. SiRNAs and micro RNAs bind to Ago proteins while piRNAs bind to Piwi proteins. In mammals, the four proteins from the Ago subfamily (AGO1, AGO2, AGO3, AGO4) hinder translation in their target mRNAs, with AGO2 having the unique ability within its subfamily to induce RNA interference. In flies, AGO2 also triggers RNA interference in siRNA while AGO1 focuses on miRNA. What is different in flies compared to the case with mammals is that both AGO1 and AGO2 in flies can target cleavage and cause RNA interference. <ref name="Making RISC"></ref> '''Two steps in RISC assembly: RISC loading and unwinding''' There are two steps involved in RISC assembly. The first step is called RISC-loading, and this is when small RNA duplexes are incorporated into Ago proteins. Prior to this step, the double-stranded siRNAs and miRNAs are converted by RNase III enzymes (Drosha and Dicer) into small RNA duplexes: siRNA duplexes and miRNA-miRNA* duplexes. In the second step, the double-stranded small RNA duplexes are separated into two strands inside the Ago protein. Of the two strands, the strand with a less stable 5’ end is kept, serving as the ‘guide strand’. The other strand, called the ‘passenger strand’, is thrown out in order to produce a functional RISC. This strand selection in which one strand is preferred over the other is referred to as the ‘asymmetric rule’. <ref name="Making RISC"></ref> == Genome Encoded Small RNA == The Human Genome Project observed a relatively small number of protein-coding genes relative to genome size. It is believed that only five percent of the genome encodes proteins. miRNA, siRNA, and piRNA are part of the noncoding genome. miRNA is believed to exist in hundreds of species and are identified through forward genetics by miRNA mutant isolation, bioinformation predictions based on the stem-loop, and direct cloning of small RNA. It is unclear how pre-miRNA is converted and there are studies to indicate that pri-miRNA and pre-miRNA occur separately in the nucleus and cytoplasm. dsRNA is a feature of pri-miRNA and aids in the processing into pre-miRNA. Dicer and Drosha are part of the factors required for the small RNA maturation. They are believed to function with dsRNA binding proteins which aid in the miRNA production. Endo-siRNA play important roles in regulating genome functions in diverse species. They cleave target mRNA so that RNA-dependent RNA polymerases use the cleaved mRNA as templates to prime synthesis of secondary siRNAs. These are then loaded onto non-slicing agos to contribute to target silencing. This corresponds to the spreading of RNAi in mRNA and linked to silencing of worms. piRNA are small RNA that also aid in the interference but focus on repetition. piRNA in mammalians are mapped uniquely in the genome and cluster to a small number of around 10 to 83 kb. Findings of the amplification of piRNA led to a ping-pong model in which it switches between Ago3 and Aubergine to create new piRN through each successive round. Different Piwi proteins conduct piRNA functions both cooperatively and independent of one another. piRNA play an important role in germ line development and the maintenance of genomic integrity. They are also involved in silencing but this is still unknown how. However, studies suggest that they regulate DNA methylation. <ref>Liu, Qinghua; Paroo, Zain; [http://www.annualreviews.org/doi/abs/10.1146/annurev.biochem.052208.151733 Biochemical Principles of Small RNA Pathways] Annu. Rev. Biochem. 79 (2010): 295-319.</ref> =References= <references/> Image from Wikipedia Commons {{BookCat}} {{stub}} pj6d6xq3k7dhznespdcb2hv607icf15 Nursing Study Guide/Care of Immuno-Lymphatic Needs 0 276863 4672067 4098691 2026-09-24T08:35:06Z R. Henrik Nilsson 3395618 Farenheit > Fahrenheit 4672067 wikitext text/x-wiki [[File:Fotothek df roe-neg 0006271 022 Krankenschwester mit Neugeborenem auf der Säugli.jpg|thumb|Nurse using reverse barrier to prevent contaminating infant with face mask]] ===Temperature assessment=== See [http://en.wikibooks.org/wiki/Human_Physiology/Homeostasis#Thermoregulation| thermoregulation explained] Temperature may be taken by following route *tympanic - most common method where device available. *oral - most common in developing countries. *rectal - rarely used. one centigrade higher than oral reflects the same core temperature. *axillary - note always one centigrade lower than oral temperature. *spectroscopic - common for neonatal nurses only. Factors influencing temperature include *Maturity - the elderly have a lower metabolic rate and lower body temperature. *Gender - females tend to have lower body temperature and monthly cyclic variation. The client record should include a chart for graphical representation of the temperature and other vital signs, intake and output, and weight. Special attention must be given to the entry blocks indicating hospital day, postoperative day, date, and hour blocks. Also note the units (eg. Fahrenheit or Celsius) according to the space allowed on the chart. A row on a chart marked one degree and divided into five has 0.2 degree gradients. '''Normal range for temperature is 36.5 to 37.5 centigrades.''' *Check your agency for charting rules. eg. Always use black biro. A solid dot for temperature and an open dot for pulse. These symbols are placed between the columns and rows of dots and joined by a straight line (temperature symbol to temperature symbol, etc.). *If the route of determining temperature is other than oral, it should be indicated by (R) for rectal and (A) for axillary. *The number of respirations are written in digits in the space for "Respiration Record." *Vital signs measurement can be grouped to avoid disturbing client. *Frequency. Generally four hourly temperature will indicate previously unforeseen problems in medical clients. Temperature is generally noted hourly at most frequent, with the exception of blood transfusion when a rise can indicate early intolerance of the transfused fluid. Psychiatric clients have their temperature routinely monitored once per week on admission and monthly in chronic settings. *Note whether thermoregulation support is under way - Air Warmer, Blood heater, Ice Pack, Cryotherapy. ====Barrier versus Reverse Barrier==== Clients with highly contagious diseases need barriers to prevent contamination of other clients and nurses. The usual meaning of ''BARRIER NURSING'' is to isolate an infectious condition. On the other hand, the barriers can be placed to protect the weaker defenses in a client who is immuno-compromised, this is referred to as '''reverse barrier''' nursing. A nurse who wears a face mask to protect an infant is using a reverse barrier. ===Infection Control=== Nurses should follow the precautions specified by each employer appropriate for the facility and condition. Conditions are usually classified according to the means of transmission, such as droplet, blood-borne or contact. Nursing measures will include *Hand hygiene (eg. between clients as the bare minimum) *warning system, such as a coloured card fixed to the client's door which stipulates the measures required to prevent cross-contamination. *Personal protective equipment such as mask, gown, gloves *Having separate linen disposal and garbage disposal *separate meal trays or disposable food packaging *negative pressure rooms, where air from the hospital corridor may circulate into the room before air conditioning ventilates the air safely outside the building. *requesting the room be cleaned appropriately *using a '''surgical conscience''' and being honest about all and any possible contamination, even where this has consequences such as consuming time and physical resources. ====Sterile versus clean==== Nursing specialists who work in operating theatres and similar areas use sterile equipment, but they themselves can never be effectively sterile. One needs to clarify levels of disinfection, from clean, disinfected to sterile and work with a knowledge of what is appropriate for a given task, role or piece of equipment. ====Client teaching==== Health education may help to raise awareness of issues impacting lymphatic wellness. Nurses can help to combat illness at the bedside by providing target populations (eg clients and their families) with information about diseases, risks and preventative techniques. *Handwashing *Signs of illness suggesting a contagious condition *Use condoms to prevent sexually transmitted disease *Encourage clients to use the entire course of medication in collaboration with other health professionals to prevent the development of resistant strains of microbes *Food safety following a cold chain and handling regulations *Refer to a scientific evidence base to support vaccination *Be aware of common events and advise clients on managing inflammatory conditions and excessive Immunoglobulin E through avoidance of allergens and supplementary anti-histamines in collaboration with other health professions (eg. pharmacist) ====Lymphatic drainage==== Early after an injury, a certain degree of swelling is inevitable. Histamine and bradykinins released by mast cells in damaged tissue make the capillaries leaky in the affected area. From 48 hours after an injury, nurses with massage training may help to alleviate swelling and augment immune function with massage toward the heart. Lymphatic vessels contribute fluid to the intravascular space. Nurses need to be aware that massage in overdose is capable of rhabdomyolisis (muscle catabolism) and skin trauma. Massage alone should not be used to treat underlying edema. {{BookCat}} 323w8hukihgpmm84fcgfmye238jmk2o The Computer Revolution/Hardware/Uninterruptible Power Supply 0 282316 4672092 4227862 2026-09-24T09:09:49Z R. Henrik Nilsson 3395618 refrences > references 4672092 wikitext text/x-wiki [[File:Apc ups rs500 04.jpg|thumb|upright|A UPS]] Uninterruptible Power Supply, or "UPS", is a power supply that contains a built in battery. A built in battery allows for a power supply to continue working even when the electricity is cut off. For example; if you were to charge your computer and the electricity went out, the back up power would kick in and continue to charge the computer. The length of the UPS power depends on the type and number of devices connected, the power capacity, and the age of the battery. Most UPS batteries only last 3–5 years before they need to be replaced. UPS are usually used for short periods of time to keep systems up during a power outage, etc… UPS can also prevent potentially damaging power surges to electronics. UPS are extremely important to hospitals and other establishments that have computers and devices that are crucial to many people.<ref>Understanding Computers Today and Tomorrow 13th Edition</ref> ==References== {{Reflist}} {{BookCat}} tu1bxxnh20rcivhue5rsw6w56vtipp0 Structural Biochemistry/Nucleic Acid/RNA/Short RNAs Sequencing 0 282897 4672053 2467588 2026-09-24T08:17:14Z R. Henrik Nilsson 3395618 degress > degrees 4672053 wikitext text/x-wiki == Introduction == The '''short RNAs''' includes different classes of molecules like small nuclear RNA, micro RNA, and transfer RNA and etc. Many functional RNAs are less characterized as short RNA because short RNAs are found at the promoter and 3' termini of gene sequeces <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . It also involves in paramutation, is a reciprocal action between two alleles at locus, inducing an intermolecular change in the other allele. The short RNAs can be studied in research field for describing and analyzing the stratigies and process to develop short RNA species with '''single-molecule sequencing (SMS)''' and its efficiency in many laboratory research. The Short RNA is derived from the final product of functional precursor RNA species in the cell. One of the examples of the short RNA species in the cell can be found in gene splicing in DNA sequence and 3' end RNA processing for synthesizing grown-long mRNAs <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . However, many classes related to functional RNAs that are not in protein coding are most likely from precursors which are longer than grown up long mRNAs. To fractionate RNA into species some methods are being used to study the various functions of the short RNAs. For example, Dr. Philipp Kapranov, and his researchers uses the method of Helicos single-molecule sequence to study the details of short RNAs in the cell <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref>. ==RNA Isolation for short RNA== To proceed the isolation of RNA, sRNA gets purified from total RNA (cultured cells) with mirVana miRNA Isolation Kit and miRNeasy Mini Kit, which also is known as Qiagen. The RNA Kit is used for large amount of sRNAs (from cultured cell) preparation <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . Through this method of RNA/DNA kit, sRNA of specific fractions gets purified with Elution and Electrophoresis method of ''TBE-Urea polyacrylamide gel''. ''Electrophoresis'' is action of spreadout particles in fuild due to spartially uniform electric field throughout the cell structures. ==Difficulties of Analysing short RNAs== Studying of the short RNAs is very challenging among scientists and researchers. There are some difficult problems that challenges researchers who are studying about short RNAs: 1) Specific Isolation of sRNA must be successful with desired length range. 2) There's lack of interest about sRNAs with molecular handles ike 3' PolyA Tail of the mRNAs which is used for converting itself into cDNAs. 3) sRNA is sometimes too short for efficient and successful conversion into cDNA with hexamers. 4) Some specific sRNAs have modification at gene sequence of their 5' and 3' ends that interrupt the reading with ssubsequent molecular manipulation; therefore, often few sRNAs cannot be detected by some methods that a lot researchers are using. 5) Some classes of sRNAs have firm 2' structures that blocks itself from being detected by enzymatic methods which are often conducted by researchers under nondenaturing condition. 6) Certain sRNAs such as miRNAs have short lengths that are not capable of being used for efficient mapping to complex genomes; thus, discovering sRNAs and its specific functions are very challenging for researchers to study and conduct experiments related to sRNAs. 7) Many methods depend on using ligation process and PCR amplication that can misrepresent the composition and quantification of the RNA species in the cell structures. Moreover, 8) Fraction of sRNA can be dominated with very highly presence of RNA classes like snRNA, rRNA, and sno RNAs (These will require a lot of complexity for completing characterization of the sRNA population in the cell. The most challenging part of studying sRNAs happens to deal with the physical structure in the cell: short length of sRNA makes researchers difficult to conduct an experiement <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . == Isolation of sRNA Fraction== Using diverse methods, sRNA fraction can be detected and isolated with using either miRNeasy, or DNA/RNA Kit (Qiagen) <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . If wanted, sRNA Isolation can be conducted in specific size range by using TBE-Urea denaturing polyacrylamide gel electrophoresis as another substitutive method for both researchers and scientists who are studying for sRNAs. One of the method of studying sRNAs deals with Tailing of RNAs with 3' PolyC: RNA is mixed with water in PCR amplication tube and it is used with protocol; then, sRNA gets incubated for 2 minutes at 85 degrees Celsius in a PCR Machine and put into ice 2 minutes at least. After its incubation, reagents are added to the solution with E. coli Poly A polymerase buffer and mixed. SRNA gets extracted twice with addition of phenol or chloroform or isoamly for few seconds; then, purification with addition of 100% EtOH (Ethanol) for half an hour with minus 80 degrees Celcius. Centrifuge at 4 degrees of Celcius and leave it for 30 minutes. Then, washed with 70% EtOH and finally resuspend with water <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . ==Preparation of cDNA Sequence== The '''cDNA''' can be sequence from the 3' end with poly-A Polymerase in the method of terminal transferase (TdT) and be blocked at the other 3' end <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref>.thus, the cDNA can be bind to the oligo-dT present at the surface of the cell. This method is common for protocol and for poly A protocol. Some amounts of cDNA are analyzed under experiement with use of regular NanoDrop if the expected concentration of cDNA is at certain range between 5-10 ng. Tailing part of cDNA is followed: 1) cRNA is prepared to be tailed in water and depending on its volume, its time spending in the Incubation varies and amount of buffer can be differed. After Incubation, certain micro-measured amount of TdT buffer is added into the cDNA soltuion; The cDNA gets incubated again in the PCR Amplication machine at 37 degrees of Celcius for an hour. Incubated cDNA sample gets heat up to 95 degrees of Celcius for 5 minutes. Later, TdT Buffer is added and incubation is repeated to get final sequence of cDNA and measure the concentraion of tailed cDNA in the sample. <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> ==Reference== {{BookCat}} 1. http://www.ncbi.nlm.nih.gov/pubmed/22144202<br />{{BookCat}} 2. http://en.wikipedia.org/wiki/Electrophoresis<br /> 7l616zhbc67q4cfuxmrg2vx4rp9vigx 4672059 4672053 2026-09-24T08:27:47Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672059 wikitext text/x-wiki == Introduction == The '''short RNAs''' includes different classes of molecules like small nuclear RNA, micro RNA, and transfer RNA and etc. Many functional RNAs are less characterized as short RNA because short RNAs are found at the promoter and 3' termini of gene sequeces <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . It also involves in paramutation, is a reciprocal action between two alleles at locus, inducing an intermolecular change in the other allele. The short RNAs can be studied in research field for describing and analyzing the stratigies and process to develop short RNA species with '''single-molecule sequencing (SMS)''' and its efficiency in many laboratory research. The Short RNA is derived from the final product of functional precursor RNA species in the cell. One of the examples of the short RNA species in the cell can be found in gene splicing in DNA sequence and 3' end RNA processing for synthesizing grown-long mRNAs <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . However, many classes related to functional RNAs that are not in protein coding are most likely from precursors which are longer than grown up long mRNAs. To fractionate RNA into species some methods are being used to study the various functions of the short RNAs. For example, Dr. Philipp Kapranov, and his researchers uses the method of Helicos single-molecule sequence to study the details of short RNAs in the cell <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref>. ==RNA Isolation for short RNA== To proceed the isolation of RNA, sRNA gets purified from total RNA (cultured cells) with mirVana miRNA Isolation Kit and miRNeasy Mini Kit, which also is known as Qiagen. The RNA Kit is used for large amount of sRNAs (from cultured cell) preparation <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . Through this method of RNA/DNA kit, sRNA of specific fractions gets purified with Elution and Electrophoresis method of ''TBE-Urea polyacrylamide gel''. ''Electrophoresis'' is action of spreadout particles in fluid due to partially uniform electric field throughout the cell structures. ==Difficulties of Analysing short RNAs== Studying of the short RNAs is very challenging among scientists and researchers. There are some difficult problems that challenges researchers who are studying about short RNAs: 1) Specific Isolation of sRNA must be successful with desired length range. 2) There's lack of interest about sRNAs with molecular handles ike 3' PolyA Tail of the mRNAs which is used for converting itself into cDNAs. 3) sRNA is sometimes too short for efficient and successful conversion into cDNA with hexamers. 4) Some specific sRNAs have modification at gene sequence of their 5' and 3' ends that interrupt the reading with ssubsequent molecular manipulation; therefore, often few sRNAs cannot be detected by some methods that a lot researchers are using. 5) Some classes of sRNAs have firm 2' structures that blocks itself from being detected by enzymatic methods which are often conducted by researchers under nondenaturing condition. 6) Certain sRNAs such as miRNAs have short lengths that are not capable of being used for efficient mapping to complex genomes; thus, discovering sRNAs and its specific functions are very challenging for researchers to study and conduct experiments related to sRNAs. 7) Many methods depend on using ligation process and PCR amplification that can misrepresent the composition and quantification of the RNA species in the cell structures. Moreover, 8) Fraction of sRNA can be dominated with very highly presence of RNA classes like snRNA, rRNA, and sno RNAs (These will require a lot of complexity for completing characterization of the sRNA population in the cell. The most challenging part of studying sRNAs happens to deal with the physical structure in the cell: short length of sRNA makes researchers difficult to conduct an experiment <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . == Isolation of sRNA Fraction== Using diverse methods, sRNA fraction can be detected and isolated with using either miRNeasy, or DNA/RNA Kit (Qiagen) <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . If wanted, sRNA Isolation can be conducted in specific size range by using TBE-Urea denaturing polyacrylamide gel electrophoresis as another substitutive method for both researchers and scientists who are studying for sRNAs. One of the method of studying sRNAs deals with Tailing of RNAs with 3' PolyC: RNA is mixed with water in PCR amplification tube and it is used with protocol; then, sRNA gets incubated for 2 minutes at 85 degrees Celsius in a PCR Machine and put into ice 2 minutes at least. After its incubation, reagents are added to the solution with E. coli Poly A polymerase buffer and mixed. SRNA gets extracted twice with addition of phenol or chloroform or isoamly for few seconds; then, purification with addition of 100% EtOH (Ethanol) for half an hour with minus 80 degrees Celsius. Centrifuge at 4 degrees of Celsius and leave it for 30 minutes. Then, washed with 70% EtOH and finally resuspend with water <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> . ==Preparation of cDNA Sequence== The '''cDNA''' can be sequence from the 3' end with poly-A Polymerase in the method of terminal transferase (TdT) and be blocked at the other 3' end <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref>.thus, the cDNA can be bind to the oligo-dT present at the surface of the cell. This method is common for protocol and for poly A protocol. Some amounts of cDNA are analyzed under experiment with use of regular NanoDrop if the expected concentration of cDNA is at certain range between 5-10 ng. Tailing part of cDNA is followed: 1) cRNA is prepared to be tailed in water and depending on its volume, its time spending in the Incubation varies and amount of buffer can be differed. After Incubation, certain micro-measured amount of TdT buffer is added into the cDNA solution; The cDNA gets incubated again in the PCR amplification machine at 37 degrees of Celsius for an hour. Incubated cDNA sample gets heat up to 95 degrees of Celsius for 5 minutes. Later, TdT Buffer is added and incubation is repeated to get final sequence of cDNA and measure the concentration of tailed cDNA in the sample. <ref>{{cite book | last = Kapranov| first = Philip | authorlink = | coauthors = Ozsolak Fatih and Milos Patrice M.| title = Profiling of short RNAs using Helicos single-molecule sequencing| publisher = Helicos Biosciences & Methods Mol Biol | date = 2012| location = Cambridge, MA | url = | doi = | id = }}</ref> ==Reference== {{BookCat}} 1. http://www.ncbi.nlm.nih.gov/pubmed/22144202<br />{{BookCat}} 2. http://en.wikipedia.org/wiki/Electrophoresis<br /> 8txwmzvmgy48s54yqrxb2gbj5htuxhc Aros/Platforms/Arm Raspberry Pi support 0 286123 4671955 4671932 2026-09-23T12:12:55Z Jeff1138 301139 4671955 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 5vdcs1o53wazxzesvylre1i95d9rg4y 4671957 4671955 2026-09-23T12:20:23Z Jeff1138 301139 4671957 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} i1f1gycjdprwt8nv7pistnzxy8dtkyz 4671958 4671957 2026-09-23T12:22:42Z Jeff1138 301139 4671958 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} b3owxzp10qb54xel3ibyz8ilvuh967q 4671959 4671958 2026-09-23T12:34:12Z Jeff1138 301139 4671959 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Rememeber Aros Arm uses FAT32 and Aros can detect issues with this format very accutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 53k29v3hrjtchxlx7uwuo0zfaa28cpj 4671960 4671959 2026-09-23T12:34:50Z Jeff1138 301139 4671960 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Rememeber Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 11h19uf7sly8agoooo5sbe4mednaesn 4671961 4671960 2026-09-23T12:35:52Z Jeff1138 301139 4671961 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} pu5nt7rjzef2x38pwyncs4x7i0unrrz 4671964 4671961 2026-09-23T13:00:33Z Jeff1138 301139 4671964 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} iaydw0bhurbu0umyvuz6ftgdlr3l1sn 4671976 4671964 2026-09-23T14:30:41Z Jeff1138 301139 4671976 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} c58sdjz2lu0qj2wr8vp8gzpbp0og21g 4671977 4671976 2026-09-23T14:38:15Z Jeff1138 301139 4671977 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3 *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} o9fb9oj7viko24rro3xhj8c4tga7bnr 4671988 4671977 2026-09-23T18:03:55Z Jeff1138 301139 4671988 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} iuc57gggfkc2kwjuathr9s7eebfmzxl 4671996 4671988 2026-09-23T18:59:21Z Jeff1138 301139 4671996 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] Mailbox != vcgencmd vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate (significantly simpler) RPC. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} jmquj0adk0j3mjg9l2mtr1k1kxw0cq1 4671998 4671996 2026-09-23T19:08:23Z Jeff1138 301139 4671998 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate (significantly simpler) RPC. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} hlfcjic2l0v6dvaovmnp22y86p4847v 4671999 4671998 2026-09-23T19:18:45Z Jeff1138 301139 4671999 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge between the CPU and the GPU so they can talk to each other. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow Linux drivers to talk to vcos. Raspberry Pi develop vcos and the VCHI interface based on demand for certain features and bug fixes, in concert with Broadcom Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 5gdyrz684nuwxn38oy57r4l1qysrw44 4672000 4671999 2026-09-23T19:20:36Z Jeff1138 301139 4672000 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow Linux drivers to talk to vcos. Raspberry Pi develop vcos and the VCHI interface based on demand for certain features and bug fixes, in concert with Broadcom Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} hqti8t5m27kkv7asxvgyzz2uhl6appe 4672046 4672000 2026-09-24T06:00:14Z Jeff1138 301139 4672046 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 1x5h9elcophfy8stvgbevb0jrdpend5 4672048 4672046 2026-09-24T08:01:38Z Jeff1138 301139 4672048 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell date 24-Dec-2026 12:00:00 etc It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 0bwuiaq30bro54ou8xn4wq4mh1v5mwt 4672073 4672048 2026-09-24T08:40:30Z Jeff1138 301139 4672073 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell e.g. date 24-Dec-2026 23:59:00 It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 0afuo54duaf0qvqai6lxc7hi6oeh4kq 4672074 4672073 2026-09-24T08:40:57Z Jeff1138 301139 4672074 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell e.g. date 24-Dec-2026 23:59:59 It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 3bma8f00ym2dhkxl0isw542uovfetfn 4672081 4672074 2026-09-24T08:55:59Z Jeff1138 301139 4672081 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell e.g. date 24-Dec-2026 23:59:59 It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 38cmqhxua2jo4lorkk1jrdlf57x0nva 4672103 4672081 2026-09-24T09:17:22Z Jeff1138 301139 4672103 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. [http://acid3.acidtests.org/ Acid3 test] You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell e.g. date 24-Dec-2026 23:59:59 It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} 007bjqdizd12r3zvrpemjuh8i9jnh3t 4672104 4672103 2026-09-24T09:20:52Z Jeff1138 301139 4672104 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. [http://acid3.acidtests.org/ Acid3 test focus on Document Object Model (DOM), JavaScript (ECMAScript), and portable network graphics (PNG)] You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell e.g. date 24-Dec-2026 23:59:59 It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} bqqc6wbwub3pln9ssow3guf7bj6eym1 4672105 4672104 2026-09-24T09:26:37Z Jeff1138 301139 4672105 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. [https://Html5test.com Html5test] gives 189 out of 555. [https://wpt.fyi/ Web Platform Tests] [http://wpt.live/html/semantics/forms/the-input-element/checkbox.html Input element Live]. These are the controversial [https://www.webstandards.org/files/acid2/test.html Acid2], [http://acid3.acidtests.org/ Acid3 test] focus on Document Object Model (DOM), JavaScript (ECMAScript), and portable network graphics (PNG). [https://robertnyman.com/javascript/javascript-1.6.html JS 1.6], [http://www.robertnyman.com/javascript/javascript-1.7.html JS 1.7], [http://www.robertnyman.com/javascript/javascript-1.8.html JS 1.8], You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell e.g. date 24-Dec-2026 23:59:59 It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} i4uy8vt985dmuo3m9zp5vmfd8bxkbzf 4672107 4672105 2026-09-24T09:42:04Z Jeff1138 301139 4672107 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen, hold down the left click mouse and drag the screen down a little and it will appear again. [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. Html5test gives 189 out of 555. You may have to delete the cache (in same drawer/folder) to fully retest big updates. For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell e.g. date 24-Dec-2026 23:59:59 It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} qe43lldxk9dviz5cfhh9mliphn3inmv 4672108 4672107 2026-09-24T09:49:59Z Jeff1138 301139 4672108 wikitext text/x-wiki {{ArosNav}} [[#Native]] [[#Hosted]] [[#Build]] [[#Hardware]] [[#References]] [[#Future]] ==Introduction== [[File:Scalos00.png|thumb|Scalos on Aros Pi3b]] Aros aims to cover Pi 3 to 5 1Gb+ RAM ideally as you may have to switch to 256Mb gfx mode depending on the application running Options to boot from using a good power source to prevent the yellow lightning symbol. *With Pi3b+ the max you can get is 5.1V 2.5A with micro usb. *With Pi4 5.1V 3A with usb-c *With Pi5 5.1V 5A, the amps went ever upwards, even to 5.1V 9A with usb-c Pi500+ keyboard wedge - Pi400 RPI-400 keyboard wedge - resolution changing and audio from micro hdmi0 (near 40pin) and micro hdmi1 (near usb-c psu) - Fn F10 0x5e power on and off works or held down for over 7 seconds auto shutdown - keyboard ok - wifi and lan ethernet testing - * Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 (Rev1.0) or D0 (rev1.1) * Pi 4 - Quad A72 64bit ARMv8 with VideoCore 6 * Pi 3 - Quad A53 [https://www.raspberrypi.com/documentation/computers/processors.html 64 bit] ARMv8 with VideoCore 4 with heatsink/fan on 3b to prevent cpu 82C+ throttling * Pi 2 - Quad 32bit ARMv6 with VideoCore 4 - mostly not 64bit compatible * Pi Model B+ 32bit ARMv6 with VideoCore 4 - not 64bit compatible * Pi Model A and B 32bit ARMv6 with VideoCore 4 - not 64bit compatible ===Native=== * 2013-03 Kalamatee starts work * 2015-04 Work continues with mschulz on the kernel and Kalamatee (NicJA) on gpio and usb * 2018 [https://www.patreon.com/posts/i-owe-you-some-20956961 mschulz resume adding BE big endian support], [https://www.patreon.com/michal_schulz/posts Big endian on Pi] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bsek latest commits for pi 3b, 4 and 5 64bit] * 2026 [https://github.com/aros-development-team/AROS/commits?author=metaneutrons latest commits for Pi5] * 2026 [https://github.com/aros-development-team/AROS/commits?author=bitplane latest commits for ARM] '''Download''' [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 builds] [https://sourceforge.net/projects/aros/files/ Alternative site and nightly2] both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd and copied to fat32 8GB+ microSD card (there will be folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi 64bit build works well on a single core LE little endian. Multicore [https://github.com/aros-development-team/AROS/commit/1df0747c2bda3523a43029725a709b1f377d84ec may follow]. Any issues booting could be down to the SD card so please use another SD to see if it is resolved. Remember Aros Arm uses FAT32 and Aros can detect issues with this format very acutely. Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 Aros Raspberry pi 3 64bit thread] and on the [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix] Boots with '''USB3''' port based sata3 ssd on Pi400 but untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager) and Pi5 Pi 3 B+ is pre-configured for USB sata3 boot - untested Pi 3 B may need [https://www.youtube.com/watch?v=ubnwvxF3Klc PiOS to set OTP to boot from usb - do so at your own risk] - if OTP set to usb, boot works but slower than SD card Speed write wise (top faster) <pre> *NVME Pi5 untested >1000MB/sec or faster if matched correctly *Sata3 ssd 500MB/sec *SD V90 90MB/sec 4K maybe 8K *SD V60 60MB/sec 1080p *SD U3 V30 30MB/sec 720p *SD C10 U1 V10 A1 A2 10MB/sec minimum should be used now *SD C06 6MB/sec *SD C04 4MB/sec </pre> As a homage to the past, Aros shows a reduced number of icons but this can be changed by left mouse click in the window and then right click down to Window -> View -> All files Windows can be manipulated by the top (moving) and the bottom right corner (resizing) only. Zune like MUI gui interface, has a unique quirk in that after changing a setting in a text box, you may sometimes need to press Enter/Return before clicking OK, Save, etc Double left mouse click on most picture (Developer/Debug/Tests/Datatypes), audio and video files are supported, via datatypes, by the multiview application. Esc escape key usually closes open windows even the desktop In Prefs/Appearance some decorative theming elements need work. There is a few Mason icons in /Prefs/Presets/Icons/Mason/ and the ever present default Gorilla - Icon exchange in works For more intensive graphics applications, you may need to edit config.txt in the root folder and change 128M to 256M to adjust more memory to graphics usage If your cursor should '''appear''' to vanish, fear not it is still there. Please head to the top of the screen i.e. the title bar, hold down the left click mouse and drag the screen down a little and the cursor will appear again. Then you can drag the screen up again. Like most amiga like OSs the audio and networking need to be setup manually Audio AHI prefs - Mode settings tab - needs both Music unit and Unit 0 set to RPiHDMI:16 bit stereo++ or RPiPWM:16 bit stereo++ at 44100Hz. Press '''Save or Use''' button after each choice For wireless, please use the Wifi prefs and already selected device bwfm.device. Press Scan and double right click on the router and enter password. You may need to setup after every reboot. Another thing to try, press cancel and go to Network Prefs, Wireless Networks tab and highlight the router line and hit the remove button and press the cancel button. Retry with Wifi prefs again. Sometimes Disconnect and try Connect. For lan ethernet port, please use Network prefs and the following hardware is *lan9514 Pi3b Pi2 no support at the moment *lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s) *bcmgenet Pi4 Pi400 choose for Device bcmgenet.device (network prefs still forgets random information when rebooted) Summary *3b ethernet not supported, usb ethernet not working but wifi prefs setup works *3b+ wifi working but ethernet untested *4 untested *400 wifi and ethernet untested *5 *500 *500+ [http://archives.arosworld.org/index.php?function=browse&cat=network/browser amelinium web browser (JS 1.6 ES9 ECMASCript 2018)] is available with an [https://eab.abime.net/showthread.php?t=122494&page=51 eab thread] reminiscent of [https://github.com/zapek/Voyager Voyager] and to a lesser extent [https://github.com/amigazen/aweb3/ Aweb JavaScript 1.5 (ECMAScript 3)] as javascript websites can be slow to load and nothing from youtube, facebook, reddit etc. Press Cancel at screenmode selector or -wb argument to get windowed version. You could use the Shift + Del shortcut or mouse wheel should work to delete all text at once. To view wikibooks set Agent to Android (telefon) or iPhone setting in menus. Html5test gives 189 out of 555. You may have to delete the cache (in same drawer/folder) to fully retest big updates. There is normally no Bluetooth support for most amiga like OSs but Aros has one [https://github.com/aros-development-team/AROS/commit/6942cbfbf66426d21963a7fcd8aba6aff611a9e0 work in progress] [https://forums.raspberrypi.com/viewtopic.php?t=338466 firmware] *Bluetooth 4.1 BCM43430A1.hcd Pi3B, Pi3A, Zero 2W *Bluetooth 4.2 BCM4345C0.hcd Pi3B+, Pi4 *Bluetooth 5.0 BCM4345C5.hcd Pi4B rev, CM4 and maybe Pi5 and CM5 *bthid keyboard mouse support *btserial serial *btpan short range wireless connecting devices Only the Pi5 has a RTC real time clock, the other Pis will need to use Extras:Networking/utils/ntpsync/ time.cloudflare.com pool.ntp.org or Cloudflare 162.159.200.1, 162.159.200.123, 2606:4700:f1::1, 2606:4700:f1::123 or [https://archives.arosworld.org/index.php?function=browse&cat=network PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use in a shell e.g. date 24-Dec-2026 23:59:59 It helps to have all usb devices already plugged in before power on to detect at the moment. Even then some usb devices will freeze the mouse cursor and the only resolution is to remove the offending usb device and reinsert. Sometimes, the reinsert leads to the mouse cursor vanishing, it is still there and responds to left mouse clicks, top of the screen and pull down the screen. USB classes support from Prefs/Trident is still work in process *usbaudio working on usb3 port (blue) on pi4, 400 but not working (no rt isochronous) on usb2otg (white or black) for pi3b, zero 2w *[https://aminet.net/package/mus/midi/camd camdusbmidi] detects midi devices without a preferences file (Prefs/Env-Archive/sys/midi.prefs) as [https://www.youtube.com/watch?v=RBxHkwy4Nrw auto setup now] possibly with [https://github.com/metaneutrons/mt32-pi metaneutrons mt32-pi] [https://github.com/rtzor/mt32-pi mt32-pi fork] [https://github.com/ahmadexp/mt32-pi fork] [https://github.com/gmcn42/mt32-pi-control control of] [https://github.com/dwhinham/mt32-pi mt32-pi pi3+], [https://homspace.nl/samplerbox/ SamplerBox] or [] as well as need developer gcc tools to look at 64bit ports of [https://archives.arosworld.org/?function=showfile&file=driver/audio/usbmidi.i386-aros.lha usbmidi], [https://aminet.net/package/mus/midi/CAMD_Toolkit CAMD_Toolkit], [https://aminet.net/package/mus/midi/camdtools camdtools], [https://github.com/cnvogelg/amiditools amiditools], [https://github.com/timoinutilis/midi-sequencer-amigaos horny src], [https://aminet.net/package/mus/midi/horny-base horny-base], [http://bnp.hansfaust.de/index.html BnP], [], Regarding 680x0 emulation, there are several options that could be considered *[https://github.com/aros-development-team/AROS/blob/6722a0ae9e03fe5d26e32703360bd2059e0864cc/rom/m68kemu/README.md?plain=1#L424 m68kemu.library] for some Amiga productivity where the cpu is emulated and the system calls are redirected to Aros ones *[https://github.com/BlitterStudio/amiberry amiberry] (winuae) for everything else like games *[https://github.com/jonx/AROS/tree/aarch64-darwin-graft/arch/all-darwin/libs/emu68k emu68k] *[https://scriptedamigaemulator.net/ Scripted Amiga] with [https://github.com/naTmeg/ScriptedAmigaEmulator ScriptedAmigaEmulator] or older [https://github.com/gbraad-amiga/ScriptedAmigaEmulator2 ScriptedAmigaEmulator2] [https://pinout.xyz/ GPIO 40 pins] [https://learn.sparkfun.com/tutorials/raspberry-gpio/gpio-pinout pinout] Some exceptions: *Physical pins 27, 28 (GPIO0, 1) are an internal I2C bus and should not be used *The other I2C on pins 3, 5 (GPIO 2, 3) can be used generally, but be aware they have permanent pull-up resistors to 3.3V *For MIDI use USB but there are dedicated UART pins 8, 10 (GPIO 14, 15). With a HAT it's more awkward -- you need to know which pins are used by the HAT and avoid them. Hopefully this will be documented. Remember all GPIOs are 3.3V (not 5V tolerant), floating/noisy inputs can cause odd behavior, and that shorting the power supplies can cause instant death of the Pi. In the shell GPIO PIN/A/N,SET/N,GET/S,MODE/K,PULL/K Controls and queries hardware GPIO pins via gpio.resource which is stored in the rom or Devs/ '''please test''' *PIN -- (Required) Target GPIO pin number (e.g. 12). *SET -- Set pin output value to 0 (LOW) or 1 (HIGH). *GET -- Read and print current digital input level (0 or 1). *MODE -- Configure pin mode: IN (Input), OUT (Output), ALT (Alternate). *PULL -- Configure pull resistor: NONE, UP, DOWN. EXAMPLES <pre> GPIO 12 MODE OUT GPIO 12 SET 1 GPIO 12 GET GPIO 13 PULL UP </pre> [https://gpiozero.readthedocs.io/en/stable/installing.html Current] [https://gpiozero.readthedocs.io/en/v1.2.0/api_boards.html old support for gpiozero is unknown at present] [https://energenie4u.co.uk/res/pdfs/ENER314%20UM.pdf and associated 433MHz equipment] [ USA X10 security and lights via USB] [ OpenHab with Shelly Smart Plug connected over Wi-Fi, controlled by MQTT or HTTP] Printing only with Postscript but [https://github.com/bohunamiga/MintPRINT one] of [https://github.com/boingball/MintPRINT two] [https://github.com/Andiweli/AmiAirPrint/tree/main AirPrint] IPP has been attempted with [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2061&pid=13954#post_13954 discussion] The vcgencmd can be used to inspect and dump the current system configuration. vcgencmd runs on top of VCHIQ as an RPC. The mailbox interface is an alternate but much simpler RPC. VCHIQ is a bridge (queue) between the CPU and the GPU so they can communicate with the firmware. Loads of [https://github.com/6by9/rpi3-gpiovirtbuf/blob/master/rpi3-gpiovirtbuf.c mailbox] which uses the GPIO control calls. [https://github.com/raspberrypi/firmware/wiki/Mailboxes may also be of interest] A fair number of vcgencmd examples (search for vc_vchi_gencmd_init). [https://www.raspberrypi.org/forums/viewtopic.php?t=229203#p1406112 sends the relevant vcgencmd commands] to update the scaling kernel, but the [https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/gencmd/gencmd.c command] is just a text string. Parsing and execution of the instructions is performed by the VideoCore firmware. The Raspberry Pi runs two separate operating systems: Linux/Aros on the ARM, and a threedx RTOS called vcos running on the Videocore 4 VPU: vcos is commonly called "the firmware". Vcos is tasked with performing certain system services, for example running the display and audio outputs. The VCHI driver provides an interface to allow drivers to talk to vcos. Youtube [], [], [https://www.youtube.com/watch?v=X4fmWAIv7FE Aros native on Pi3b], [], [], [https://www.youtube.com/watch?v=TSxlYb1eQWU Installed on Pi3b+], [], [], [https://www.youtube.com/watch?v=NFF1H3jCoz8 testing Aros native on Pi400], [], [], [https://www.youtube.com/watch?v=nIVx7mh1E1Q&pp=ygUHYXJvcyBwadIHCQkTDAGHKiGM7w%3D%3D Aros on Thumb 2 based 32bit-ish ARM STM32H743 board], [https://www.youtube.com/watch?v=zQM4CD64xDE&t=612s&pp=ugUEEgJlbg%3D%3D Performance under Linux] but on Aros... {| class="wikitable sortable" width="90%" ! width="10%" |Pi ! width="10%" |Single Core 2D ! width="10%" |Single Core 3D ! width="10%" |Single Core 3D ! width="10%" |SMP 2D ! width="10%" |SMP 3D ! width="10%" |SMP 3D ! width="35%" |Comments |- | <!--Pi-->Pi3 | <!--Single Core 2D--> | <!--Single Core 3D--> | <!--Single Core 3D--> | <!--SMP 2D--> | <!--SMP 3D--> | <!--SMP 3D--> | <!--Comments--> |- |} For the Pi1 Pi2 Pi2B the status of AROS native ARMv6 for 32bit RasPi was OK. System booting, USB working (although with some issues but plans to fix them). 32bit native [http://www.aros.org/nightly1.html ARMv6 32bit nightlys] raspi-armhf-system raspi-armhf-contrib unbz2'd to fat32 microSD ===Hosted=== AArch64 CPU backend for AROS, a Cocoa/Metal display, clipboard / host-volume / CoreAudio / BSD-sockets bridges, GPU 2D via gpufx.library, a 68k→AArch64 JIT (run68k), and a full Rust std port. On [https://www.jkn.me/blog/macaros-aros-on-apple-silicon/ latest Apple Silicon] [https://github.com/jonx/Macaros early buggy alpha version of hosted Aros .dmg on MacOS12+]. Please use [https://github.com/jonx/Macaros/issues MACAros github] for issues, features etc and possibly [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2030&pid=13910#post_13910 here] [http://www.aros.org/snapshots1.html old linux and android hosted 32bit] ==== Hosted ==== =====64bit===== [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80&pid=13667#post_13667 Ubuntu Linux PC hosted Pi compiler build] [https://github.com/BlitterStudio/aros-compiler-docker Docker based cross compiler for various Aros systems], =====32bit===== Ubuntu VM approach to compiling [http://lallafa.de/blog/2013/06/building-aros-hosted-for-raspbian/ Linux hosted AROS June 04, 2013] ../AROS/configure --target=linux-armhf --enable-includes=/usr/arm-linux-gnueabihf/include --x-includes=/usr/arm-linux-gnueabihf/include --x-libraries=/usr/arm-linux-gnueabihf/lib arm-elf- is symbol-linked to arm-linux-gnueabi- (arm-linux-gnueabi- is more correct in this case, because it's going to be compiling the ARM AROSBootstrap for ARM Linux) *armel - many of the "android" machines require since the entire OS is made for soft float VFP. *armfp - Efika MX target, Raspberry PI, EfikaMX, Pandora and virtually everything (VFP) Keep in mind it's possible to start hardfp AROS hosted on softfp system, though, as long as no calls between AROS and host require floating point parameters. NOTE: hardfloat objects *cannot* be linked with softfloat objects - they have a different ABI. Just keep in mind the arm nightly build machine is quite complex beast. It needs the x86_64 host compiler to compile AROS tools. The arm version is built every night using gcc-4.6.2 crosscompiler (built together with AROS) and successfully builds armel and armhf linux hosted targets. *needs an AROS code compiler for ARM target *as well as unix compiler for ARM linux host (would be best to have both softfp and armhf, we have softfp only now) with full set of libraries and includes. with—disable-crosstools $AROS_CC is always a wrapper around $KERNEL_CC ? If so, this is wrong for some ports. This can break Darwin, Windows and Android port. Yes, Android port will build. And even work. But it's not good because the port will not be ABI-compatible with other ARM ports. Android's ABI is different from GNUEABI. For example: <pre> enum test {foo, bar}; enum test testvar; </pre> sizeof(testvar) will be equal to sizeof(int) in GNUEABI (Linux and AROS) and sizeof(short) on Android. This affects linking objects from static linklibs, for example. Previously everything worked because $AROS_CC was a wrapper on top of $HOST_CC. And a real crosscompiler was used on non-ELF hosts. Android is the same. $KERNEL_CC is incompatible with AROS. compiler=kernel is appropriate _ONLY FOR CODE WHICH RUNS ON HOST OS_ (or barebone hardware, if we talk about native). This includes bootstraps, their linklibs, and host-side dynamic libraries (Windows makes extensive use of them because of architectural considerations. No single AROS object should be compiled with this setting. $KERNEL_CC is really compatible with AROS *ONLY IN LINUX-HOSTED* and no more. On other systems (Darwin, Windows, Android) this is not true any more, and compiler=kernel is never going to work. If you want to compile your AROS module against host OS includes, append the following to USER_INCLUDES (or USER_CFLAGS, this is effectively the same): -isystem $(GENINCDIR) $(KERNEL_INCLUDES) $(KERNEL_INCLUDES) expands to: -isystem <your_os_includes> -isystem <host_OS_gcc_private_includes> -nostdinc This makes AROS compiler adhering to host OS APIs. If you want some preprocessor symbols based on what your host OS actually is, add something like -DHOST_OS_$(AROS_HOST_ARCH). Why is there $(GENINCDIR) at all? Because host OS has its own libc includes, which would conflict with AROS ones. And the host OS libc is not binary-compatible with AROS one. Why doesn't Windows-hosted port use $(KERNEL_INCLUDES) ? Because WinAPI includes conflict with AROS ones in fundamental typedefs, like WORD, BYTE and BOOL. It's almost impossible to deal with this in any other way than rewriting WinAPI definitions using AROS types. Building under centos 6.3 (i386) currently, and AROS creates the toolchain itself. haven't yet committed the necessary changes but "./configure --target=raspi-armhf" is enough to start, then "make arosboot-raspi" will generate arosraspi.img (containing the bootstrap, kernel.resource, and exec.library) as well as arosraspi.rom (containing all the other essentials components such as dos, graphics etc). It will also copy over a config.txt file to make the raspi bootstrap code load the correct kernel, and a cmdline.txt that enables exec debug output. *armel = typically Debian 6, Ubuntu Maverick, Android, *armhf = typically Debian 7, Debian 8, Ubuntu Precise, Cross-compiling Ubuntu ARM softfp <pre> sudo sh echo 'foreign-architecture armel' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armel] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armel.list apt-get update apt-get install gcc-arm-linux-gnueabi libx11-dev:armel libsdl-dev:armel </pre> <pre> ./configure --target=linux-arm --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabi/include </pre> Cross-compiling Ubuntu ARM hard-float <pre> sudo sh echo 'foreign-architecture armhf' >>/etc/dpkg/dpkg.cfg.d/multiarch echo 'deb [arch=armhf] http://ports.ubuntu.com/ precise main universe' >/etc/apt/sources.list.d/armhf.list apt-get update apt-get install gcc-arm-linux-gnueabihf libx11-dev:armhf libsdl-dev:armhf </pre> <pre> ./configure --target=linux-armhf --x-includes=/usr/include \ --enable-includes=/usr/arm-linux-gnueabihf/include </pre> Now, the AROS build is configured properly and all you need to do is: make ==Build== ===64bit=== ===32bit=== # download/checkout the source someplace, e.g. /build/AROS-Src/ # make a directory to store external sources AROS downloads, e.g. /build/Ports # make a build directory, e.g. /build/aros-raspi-armhf # cd into the build dir, configure, and then run make -: <pre> >cd /build/aros-raspi-armhf >/build/AROS-Src/configure --target=raspberrypi-armhf --with-serial-debug --enable-ccache --with-portssources=/build/Ports >make >make arosboot-raspi </pre> then copy the files from /build/aros-raspi-armhf/bin/raspi-armhf/AROS/ onto an sdcard, and download/copy the Raspi firmware files onto it. You should then be able to boot the sdcard on your RasPi. The current W.I.P tree to svn. it can be built as follows .. <pre> ./configure --target=raspi-armhf make arosboot-raspi </pre> That will generate arosraspi.img, arosraspi.rom and config.txt in bin/raspi-arm/AROS - so either copy just those files to a fat formatted SD card (with the firmware files on), or copy the whole contents of the AROS folder. NB - if you have a Linux/other install, backup the existing config.txt first arosraspi.img contains the bootstrap (which has very basic mailbox code, framebuffer/gpio init, and console "emulation" via code pinched from our libbootconsole), kernel.resource, and exec.library arosraspi.rom contains all the other components needed to boot AROS. The config.txt file will tell the RasPI bootstrap to load the arosraspi kernel and ramdisk (rom). the bootstrap has minimal mailbox code, planning on adding either a resource or library that driver/app code will use to access it (likewise for GPIO) Help building AROS hosted on Linux ARM Was looking a way to use more my Handheld ARM based called Pyra (Dragonbox Pyra) an ARM (Omap5 cpu with 4GB ram) linux based machine (Debian Buster v10 with kernel 5.6.19 adapted) and have a try to compile the latest Aros sources by Deadwood directly on this device. Compilation stops after build libpopupmenu.a and trying to build libatomic have this error: <pre> Configuring build in bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic configure: WARNING: unrecognized options: --disable-nls, --without-x checking for --enable-version-specific-runtime-libs... no checking for --enable-generated-files-in-srcdir... no checking build system type... arm-unknown-linux-gnu checking host system type... arm-unknown-aros checking target system type... arm-unknown-aros checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for arm-aros-strip... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking for arm-aros-gcc... /media/farox/pyra2/arosbuilds/toolchain-core-armhf/arm-aros-gcc checking whether the C compiler works... no configure: error: in /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic': configure: error: C compiler cannot create executables See config.log' for more details make[2]: *** [mmakefile:4489: /media/farox/pyra2/arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic/.configured] Error 77 [MMAKE] make --no-print-directory TOP=/media/farox/pyra2/arosbuilds/toolchain-core-armhf-build SRCDIR=/media/farox/pyra2/arosbuilds/AROS CURDIR=tools/crosstools/gnu TARGET=tools-crosstools-gcc-libatomic-configure -s --file=mmakefile tools-crosstools-gcc-libatomic-configure failed: 512 [MMAKE] Error: Error while running make in tools/crosstools/gnu: No such file or directory make[1]: *** [Makefile:361: linklibs-libatomic] Error 10 make: *** [Makefile:183: crosstools] Error 2 </pre> looking at config.log on arosbuilds/toolchain-core-armhf-build/bin/linux-arm/gen/host/tools/crosstools/gnu/gcc/arm-aros/libatomic found that arosbuilds/toolchain-core-armhf/arm-aros-ld: cannot find -laeabi so do make linklibs-aeabi-arm-quick and the missing lib was built. now the next stop is at fatal error: bits/libc-header-start.h: No such file or directory and fatal error: sys/cdefs.h: No such file or directory in many places so after checking that have this missing include files i have noted that my include path is a bit different, standard searching path is /usr/arm-linux-gnueabihf but in my system is /usr/include/arm-linux-gnueabihf so if i add my path to some mmakefiles compilation goes on....but is a better way to add this path to avoid every mmakefiles to be changed? fixed with adding -I/usr/include/arm-linux-gnueabihf to where is missing on mmakefiles like USER_INCLUDES := -isystem $(GENINCDIR) -I/usr/include/arm-linux-gnueabihf $(KERNEL_INCLUDES) P.s. I have changed many mmakefiles and have at least compiled (after many hours) the toolchain doing make every time in arosbuilds/toolchain-core-armhf-build (also have to disable making tests under cplusplus but don't remember the directory ...) but ask an help to have an automated way to correctly build without modify mmakefiles. Last time built armhf target was around 2 years ago. At that point built is via cross-compilation from linux (ubuntu 22.04) using linux armhf crosscompiler (this can explain the path differences you are experiencing) as well as using AROS gcc cross-compiler in version 6.5.0 (build with option 21) in rebuild.sh). Since then AROS GCC has been updated to 10.5.0 and don't believe anyone tried to build the armhf target again. My suggestion would be to downgrade GCC to 6.5.0 (via editing AROS/config/gcc_def file) and try to first build using cross-compilation from x86_64 linux. Once that works, you will have a "template" to compare to native compilation under arm linux. Thanks for your suggestion...but think the toolchain with GCC 10.5.0 is compilable if i found a way to pass the path of my system to the script that build (option 21 on rebuild). The other only changes are (but don't know where to modify...) is to add the build of libaeabi and disable the building of some tests under cplusplus that use exceptions and is not supported under ARM. try to crosscompile with my Linux amd64 PC. For paths look into core-linux-armhf/bin/linux-armhf/gen/config/target.cfg. A number of build-wide variable is set there containing paths to local build system. These variables and the target.cfg file are generated by AROS ./configure script. Thanks compilation now go forward...changed target.cfg under "toolchain-core-armhf-build/bin/linux-arm/gen/config" and do make on "toolchain-core-armhf-build" dir. Need to find where to enable build libaeabi.a so can build the entire toolchain with option 21 of rebuild.sh Found something that looks like libeabi in AROS/arm-all/arm-aeabi/mmakefile.src. Try adding a third line there: #MM- linklibs-armhd : libklibs-aeabi-arm Don't remember needing this library. Possibly the 6.5.0 GCC somehow does this while 10.5.0 is missing this. Try adding this line (and the variant "linklibs-armhf" instead of hd) but it did not solve the automatic building of the missing lib. I must do "linklibs-aeabi-arm-quick". Anyway after have build the aeabi lib i succefully built the toolchain (after many hours...). Smile To test I restarted from selecting option 21 (on rebuild.sh) but after many hours i get the same error of the kernel includes not found...maybe i need to modify the configure script for my case. With the toolchain built i try to build the core-linux-armhf (DEBUG) (option 22) but after a while it stopped with "cannot find -laeabi " so i made it built manually...and now i can continue compiling...i'll let you know if all goes ok. == Hardware == ===64bit=== ====BCM2712==== With the Pi5 Broadcom VideoCore 7 vc7 is an integrated GPU with 12 cores and up to 800 MHz clock. VideoCore VII is capable of OpenGL ES 3.1 and Vulkan 1.2. The driver support for the Raspberry Pi continues to build upon the [https://lore.kernel.org/dri-devel/20230928114532.167854-1-itoral@igalia.com/ open-source V3D driver] stack within [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450 Mesa] hopefully be merged for Mesa 23.3. x265 HEVC accelerated untested, x264/h264 and VP9 cpu only. *Raspberry Pi M.2 HAT+ Expansion Board *Geekworm X1001 PCIe to M.2 Key-M NVMe *Geekworm X1003 PCIe to M.2 HAT NVMe SSD PIP Board for Raspberry Pi 5 *Pineboards Pi Hut HatDrive! M.2 HAT 2024/V4 *Hat+ Gen2 Gen3 Nvme *GeeekPi 52Pi N04 for Raspberry Pi 5 NVME M.2 * *2024 RPI AI HAT - Hailo 20TOPs no LLMs *2026 RPI AI HAT+ 2 - Hailo 40TOPs slightly better? [https://www.raspberrypi.com/documentation/accessories/camera.html Cameras for Pi] *Raspberry Pi camera module, the V3 with Sony IMX708 back-illuminated CMOS 12 Megapixel sensor *Raspberry Pi Camera Module V2 – 8MP Sony IMX219 Sensor *Raspberry Pi camera Rev 1.3, 5MP 1080P OV5647 image/video module, 2592 x 1944 pixels ====BCM2711==== With the Pi4 an ARM a72 cpu is about x3 times the size of an a53 in the Pi3 the 2711b line used more power when idle, compared to the 2711c *2018 Raspberry Pi PoE HAT Power Over Ethernet Hat - design issues *2020 Raspberry Pi PoE+ HAT Power Over Ethernet Hat Pi3b+ Pi4 only - better design *Waveshare PoE HAT (B) with cooling fan for Raspberry Pi 3B+/4B 802.3af PoE *[https://github.com/axizo-pi/V3DLib vc6 V3D 4.2] is derived from [https://docs.broadcom.com/doc/12358545 vc4], but it is significantly different The QPU pipeline stays mostly the same, you still have an add ALU and a multiply ALU and it can issue two ALU OPs per cycle. There is still 4 SIMD lanes, interleaved over 4 cycles. The instruction encoding for the QPUs is different, but the core instructions are the same. Instructions for packed 8 bit int math has been dropped, along with most of the pack modes. Instructions for packed 16bit float math has been added (2 floats at in a single operation) With vc5/vc6, you write two packed 16f value to the tilebuffer (or four writes of 32f, if you are using the rgba32f framebuffer). And there is a handy vfpack operation which allows you to pack two f32s into a single 32bit value in a single instruction. You can vfpack directly into the tile buffer register. the multiply ALU can now fadd, so you can issue two fadds per instruction. the add ALU has gained a bunch of new instructions the A and B register files have been merged. You still only get an A read and a B read per instruction, but they read from one big register file (which means the underlying memory block has gone from two sets of "one read port, one write port" to one "two read ports, one write port" block) The theoretical max FLOPs per QPU remains the same at two per cycle, other than the bump from 400mhz to 500mhx but it looks like a lot of effort has been put putting those theoretical FLOPs to better use. *vc4 could run one or two threads per QPU. When you ran in two thread mode, the available register file halfed to 32 registers. *vc5 added a four thread per QPU mode, with 16 registers per thread. *vc6 doubled the size of the register file. You could now use all 64 threads in two thread mode and 32 registers in for thread mode. Single thread mode was removed, you always have at least two threads. With the threading improvements, the QPUs should spent much less time idle waiting NOPs for memory requests. Most of the design changes have gone to improving the fixed function hardware around the QPUs. A fixed function blend unit has been added, which should reduce load on the QPUs when doing alpha blending. hope software blending is still possible The tile buffer can now store upto 4 render targets (up to 128bits per pixel, so if you are using 4 32bit render targets, you can't have a depth buffer) A MMU, allowing a much simpler/faster kernel driver. Many more texture formats, framebuffer formats. h264/x264 as Pi3 All the features needed for opengl es 3.0 H.265 / HEVC decoder is a HEVCv2 Main 4:4:4 10 design supporting bitstreams up to profile 5.1 HEVC hardware decode supports 4kp60, 10-bit. Audio output is pretty much unchanged, but the HDMI audio channels now support 8x192kHz bitrates Each ALU typically have 2 floating point operators, and as you pointed out in a earlier post videocore 6 is no exception, with both a multiply and additive floating point operator. Thus theoretical GFLOPs are calculated with both operators in mind. That is what the 2 in my formula represents, and is common across any modern programmable shader, whether you calculate Nvidia, AMD, Intel, Boardcom or any other company's GPUs. Total ALUs * 2 * GHz clock = GFLOPs, In the case of Raspberry Pi 3, it's 24 ALUs * 2 operators * 0.4GHz = 19.2GFLOPs If the Videocore 6 does indeed only have 16 ALUs (16 * 2 * 0.5GHz), you'd have only 16GFLOPs but they are better utilised Possible maximum performance <pre> VideoCore IV @ 250MHz: 250 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 24 Gflop/s VideoCore IV @ 300MHz: 300 [MHz] x 3 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 28.8 Gflop/s VideoCore VI @ 500MHz: 500 [MHz] x 2 [slice] x 4 [qpu/slice] x 4 [processor] x 2 [op/clock] = 32 Gflop/s </pre> Faster LPDDR4 memory. ====BCM2837==== With the Pi3 * Broadcom BCM43438 chip provides 2.4&nbsp;GHz 802.11n wireless LAN, Bluetooth Low Energy, and Bluetooth 4.1 Classic radio support, 3B+ [https://github.com/aros-development-team/AROS/commit/afa5bc0bb17d5dd06bcfdbac00853a3799ca8d76 LAN7515] The overclock ability has diminished with each chip version as the energy usage has increased. BCM2837 is one of the warmest yet and benefits from active fan cooling if all four cpu cores are in use for a short while. Video playback is not affected due to the custom support in the GPU. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur. Dual VDP and scalable QPU in VC4 and x264/h264 accelerated untested only and VP9 on cpu or neon help ARMv8-A has [https://developer.arm.com/documentation/102412/0100/Privilege-and-Exception-levels privilege levels] where userspace typically runs at ‘EL0’, the kernel at ‘EL1’ or ‘EL2’ and the firmware at the highest level ‘EL3’. ===32bit=== === Core Kernel === ====BCM2708(family)==== which includes the [http://elinux.org/RPi_Hardware BCM2835] (ARM1176JZF-S 700&nbsp;MHz CPU + VideoCore IV GPU + up to 1GB RAM) *Framebuffer (fb) using mailbox *IRQ scheduler, etc *Arasan based SD Card controller *Synopsis DesignWare USB 2.0 OTG controller [http://networkdirection.net/index.php?option=com_content&view=article&id=106:rasperry-pi-usb-controller&catid=45:raspberry-pi&Itemid=54 Unofficial DOCS pdf], [dwc_otg.c FreeBSD], [], [https://www.riscosopen.org/viewer/view/mixed/RiscOS/Sources/HWSupport/USB/Controllers/DWCDriver/ RiscOS USB Driver], [https://www.riscosopen.org/forum/forums/5/topics/878 RiscOS USB Discussion], [https://www.riscosopen.org/forum/forums/11/topics/1893 Other USB RiscOS], [http://plan9.bell-labs.com/plan9/index.html Plan9 Miller's usb] http://plan9.bell-labs.com/sources/contrib/miller/, [https://github.com/Chadderz121/csud CSUD driver], *[http://www.smsc.com/media/Downloads_Public/Data_Sheets/9512.pdf SMSC 9512] USB LAN/Hub chip *CMOS RAM *VCHIQ port which sends messages to the GPU e.g. for mouse, keyboard, audio on HDMI, etc *Audio Driver *Serial Peripheral Interface Bus (SPI) *[http://www.susa.net/wordpress/2012/06/raspberry-pi-pcf8563-real-time-clock-rtc/ I2C registers] *I2S *Universal Asynchronous Receiver Transmitter (UART) *[http://elinux.org/RPi_BCM2835_GPIOs GPIOs] and [http://www.adafruit.com/blog/2012/08/17/broadcom-bcm2835-peripheral-memory-map-and-gpio-alternate-use-chart-piday-raspberrypi-raspberry_pi/ Alternative view of GPIO] BCM2836 * For Pi B+, PI 2 and Pi 3 SMSC LAN9514 chip adding 10/100 Ethernet connectivity and four USB channels to the board *[http://www.andrewscheller.co.uk/rpi_pcb_modules.html PCB], [http://elinux.org/RPi_Low-level_peripherals Low level features], Implemented so far... # Modify the configure system so that it correctly builds for the arm hardware float raspi target. # Implemented the bootstrap to load the aros modules and prepare the arm to jump into them. Reworked the x86 console support so that parts can be stolen for raspi to use since t has no basic functionality to output to the display. # Implemented a kernel.resource to prepare the raspi for running aros and provide the low level api calls to expose available resources and allow exec, etc function. # Implemented serial debug support # Implemented the exec (and kernel) functionality required to make multitasking work (and interrupts, exceptions, syscalls, etc) # Implemented a timer.device to utilise the hardware timers. # Implemented a very basic gfx driver to expose the hardware's framebuffer. # Implemented an SD-Card driver for AROS which presently only supports the raspi's chipset but can easily be modified to support all sd-card hardware and media. # Fixed the fat filesystem support in AROS so that it can boot on RasPi's normal SD-Card setup. The "rom" image files needed use a different filename than the default linux, etc images so can be easily installed without harming the existing files - you only need to change the loaded images in the config file to get aros to boot. # Updated the build scripts to automatically download the necessary raspi firmware files and wrap it all up so that you can simply extract the archive to a fat formatted sdcard and boot it on the raspi without having to get anything else. # fix everything in contrib and ports to build for raspi (needs proper testing/fixes but allows every component to actually compile at least, including owb) + numerous other fixes to get things working on arm/raspi .. Improvements... # Implement a USB chipset driver "OR" finish the existing one [https://github.com/aros-development-team/AROS/commit/c07d13c724f944674be5db54fc6a71ee72a01809 usb otg] - the current code is mostly a skeleton that should initialise the chipset and then needs relevant code to support the different transfer types. It also has the "virtual" hub code in place to represent the raspi's USB port (from poseidons p.o.v) # Implement a driver for the USB NIC (a few weeks - depends on USB above) # Write an [https://github.com/aros-development-team/AROS/commit/d55d0f74d20b769bbb8c8d386e5c1d7a9154f05a audio driver] (a few weeks - independent of USB) and [https://github.com/aros-development-team/AROS/commit/e93a4c245f27a87c9c4c1d39206694b39059998a HDMI] # fix syscall bug in the current raspi kernel code # Graphics depend on having a decent "bcmdma.resource" implemented as to use the cpu's dma engine. The sd card driver needs to use it for transfers to/from the controller - and the gfx system needs to use it for "blitting". # [https://github.com/aros-development-team/AROS/commit/4019d84e4975d4dad987a12d57fe108f5ac048e6 Improve the gfx driver], [ vc4gfx HIDD] add [http://dri.freedesktop.org/wiki/VC4/ Gallium3D support] # [https://github.com/aros-development-team/AROS/commit/b13905b3e8e45b089f520b44692c81affddd066f Improve] the [https://github.com/aros-development-team/AROS/commit/3a876755c070f5c73c4f53c7f4d35b4f923088b9 sdcard] device driver - which is also pretty basic but should work with most cards, rework it to also support pci, etc. sd card interfaces on x86 # The current code using very rudimentary access to the gpio interface - so that should be implemented as some resource for other components to access, as-well as the i2c interface exposed over the gpio interface. that should have a hidd class implemented which uses the gpio resource to communicate. Boot up typical for most other OSs before the open sourcing of many binary blobs from 2017 onwards On power-up, the rpi [http://www.open.com.au/mikem/bcm2835/ BCM 2835] [https://github.com/hermanhermitage/videocoreiv VideoCore4] GPU, not the ARM CPU, is in control, and the SD card slot is the only peripheral device with power. The firmware burned into the BCM2835's VideoCoreIV GPU PROM requires a DOS-style partition table; a FAT-formatted first partition; and the freely redistributable but closed sourced Broadcom files “bootcode.bin” and “start.elf” in that partition. The boot sequence carries out several pre-boot tasks *On powering of the rpi, the GPU reads and executes bootcode.bin, which then loads start.elf *The GPU loads the “start.elf” file, eventually, into the L2 cache and then executes it *configures the memory split for the CPU and GPU *reads and parses “config.txt” from the same partition on the SD card and applies the settings (like a PC’s BIOS settings) *loads the “kernel.img” file, again from the same partition *activates the CPU to begin executing the loaded kernel image The CPU/GPU memory split is hard-coded into start.elf, so Broadcom provides three start.elf images, to give 32M, 64M, or 128M to the GPU for multimedia performance, and the remainder to the CPU. RPi uses [https://github.com/raspberrypi/firmware some closed source loaders] and at some point it loads a binary blob named "kernel.img" at 0x8000, at that point there would be a rudimentary Aros alive. If one wants to use the SD-card then there would have to be a driver for the interface and a fat filesystem handler (SD-card has to be formatted to fat filesystem) Boot code and kernel are now linked together and made into that binary blob, just for starters. Raspberry Pi uses [http://kernelnomicon.org/?p=133 u-boot] and [http://kernelnomicon.org/?p=138 UBoot] as bootloader, there's already some code in the Efika MX port for that. UBoot is a native bootloader and not just for the raspberry pi, it loads after start.elf. You can find Efika MX port from arch implementations, some hacking is needed for the mmakefile.src'es as iit dates back to before the Aros crosstool era or else you get some weird errors while building. You also need to code the bootstrap and serial handling. At the moment it seems that a fastest route for the native build would be to make one binary blob without using the package system. Raspberry's memory layout is pretty simple and if the implemented u-boot doesn't support loading other modules <pre> ? - alias for 'help' mtest - simple RAM test autoscr - run script from memory base - print or set address offset bbm - BBM sub-system bdinfo - print Board Info structure boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootm - boot application image from memory bootp - boot image via network using BootP/TFTP protocol cmp - memory compare coninfo - print console devices and information cp - memory copy crc32 - checksum calculation echo - echo args to console fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) go - start application at address 'addr' help - print online help iminfo - print header information for application image itest - return true/false on integer compare jade - loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loady - load binary file over serial line (ymodem mode) loop - infinite loop on address range md - memory display mm - memory modify (auto-incrementing) mtest - simple RAM test mw - memory write (fill) nfs - boot image via network using NFS protocol nm - memory modify (constant address) pci - list and access PCI Configuration Space ping - send ICMP ECHO_REQUEST to network host printenv - print environment variables rarpboot - boot image via network using RARP/TFTP protocol reset - Perform RESET of the CPU run - run commands in an environment variable saveenv - save environment variables to persistent storage saves - save S-Record file over serial line setenv - set environment variables sleep - delay execution for some time tftpboot - boot image via network using TFTP protocol USB - USB sub-system usbboot - boot from USB device version - print monitor version </pre> And there is one more thing about modular ports. In order to actually implement this, your bootstrapping environment should provide the ability to load several files. On PC this is provided by GRUB2. on CHRP you can read filesystem via OpenFirmware, and Sam's Parthenope relies on modified u-boot. If your bootstrap allows to load only a single file, then you stuck with monolithic kickstart. By the way... u-boot allows not only to boot up a single uImage or zImage, it also allows to write client programs AFAIK. With this approach, you actually can write modular bootstrap for ARM AROS using unmodified u-boot. Most used [http://www.compulab.co.il/workspace/mediawiki/index.php5/U-Boot_quick_reference uboot options] are fatls usb 0:1, the reason behind INTB_KERNEL is to allow use of the standard Exec function AddIntServer() to add interrupt handlers for hardware drivers etc. AmigaOS never used it for abstract hardware drivers. AmigaOS routed only raw hardware IRQs there. Their assignment was hardcoded. As well as number of them. Actually on AmigaOS every bus has its own interrupt subsystem. For example PCI bus. PCI interrupts on Amiga are routed to a single exec interrupt. 1:1 relationship between CPU and hardware interrupts is present only on PC. IMHO we miss things like AddInterrupt/RemInterrupt methods on our PCI subsystem's device class. PCI bus class should map these methods to whatever is appropriate. This is how it is done on AmigaOS and friends. When these are implemented, raw kernel.resource API will be needed only for several PC-specific drivers with hardwired resources. Exec IRQs are real IRQs only on Amiga hardware. On other machines they can be emulated where appropriate (VBlank is a good example). kernel.resource is meant to be different, its IRQs are hardware-agnostic, they are plain "Hardware IRQ number X, whatever this means". They are low-level actually, and meaningful only in the context of a particular system. Was that not the transition from irq.hidd to kernel.resource? No. A long time ago there was another hacky bit named INTB_TIMERTICK. It was "abstract timer interrupt", used by timer.device. It was the same as VBlank, but with larger frequency. I removed it, because kernel.resource API was a cleaner way to access this interrupt. Furthermore, there can be more than one timer in the system. Thinking about bringing back timer HIDD definitions again. hpet.resource is a bad idea. Can someone please enlighten me a little on how the scheduler is meant to work? Poseidon.library creates its "Poseidon Event Task" during RTF_COLDSTART -> then calls Wait(), and ends up in limbo because wait disables interrupts (used for the scheduler heartbeat), and basically waits forever because the sigbit is never set, since krnSwitch doesn't switch the task unless TF_SWITCH is set, and no codepath run during this seems to set it?? TF_SWITCH does not disable/enable switching. This flag just enables to run user-supplied hook when the task is being switched away. It is completely safe to call Wait() in Disable()d state. Doing this actually temporarily breaks this state. IDNestCnt gets remembered in struct Task, then next task is selected, and its IDNestCnt is restored in sysbase (see kernel_scheduler.c). If there are no other tasks, then your cpu_Dispatch() should enable interrupts on the CPU and enter idle mode. See x86 implementation for good example. You miss what happens next... 1. KrnSwitch() saves context of your task, saves IDNestCnt (core_Switch() and cpu_Switch()), then drops into cpu_Dispatch(). 2. cpu_Dispatch() calls core_Dispatch. Then two cases are possible: 2a. There is a READY task. It is picked up, its IDNestCnt is restored in SysBase, then cpu_Dispatch() needs to restore registers and exit. The next task is run. 2b. There are no READY tasks. core_Dispatch() returns NULL. In this case your cpu_Dispatch() should enter idle loop. It should just enable interrupts on the CPU and put it on halt. This allows it to process hardware interrupts. Eventually some of your interrupt handlers wakes up your task and puts it into READY list. My heartbeat interrupt has been slowed atm to help debugging - but it never actually gets a chance to fire because of the Wait() disabling interrupts. Perhaps you have forgotten to enable interrupts in your idle loop. There is a change in the format of AROS executables. Until now we were using Elf RELocable files which are usually used as intermediate object files. We had them for various reasons, one of them was how AROS files were built in the past. That days we had no real aros cross compiler and the option to embed relocation data in unix executables (or in executable files in general) was rather new and not every linux/unix system had it. Therefore we have decided to use intermediate files. Although it was somehow working (and it is still working :-)), it has some drawbacks. Therefore decided to introduce real Elf EXEC types, in first turn implemented on ARM target with option to expand in future to all other AROS architectures. The first patch was pretty easy and appeared to work somehow. It generated nice executables with embedded relocation info. Not only that, it also removed all global symbols adjusting relocation data to be relative to the beginning of the sections. That move reduced number of symbols in each executable significantly (depending on the file between 20 and 80% of all symbols could be removed). The only symbols that stayed in the file are local ones - due to the nature of the patch wasn't able to remove them since we have not seen them in the symbol hash table. The patch didn't worked though. The files were relocated, AROS kernel loaded, but it crashed very early. What happened? Well, the nature of ARM relocations happened :) Most of the relocation data on all machines is rather simple. Relocation can be absolute or pc-relative, sometimes the offset has to be bit shifted. On ARM v7 there is another one. There, when one wants to load an address of function/variable into register a combination of two instructions can be used: movw and movt. The first one loads immediate into lower 16 bits of a register while clearing upper 16 bits. The second one loads immediate into upper 16 bits without touching lower halfword. Loading of a pointer into a register looks like this: movw r0, #:lower16:label movt r0, #:upper16:label In this case there are two relocations - one for lower halfword and another for upper. If an overflow of lower 16 bits occurs during relocation process, the upper one should be updated as well. Unfortunately with current patch and with typical ARM executables there is not enough information to perform the calculations. There are two options - the first one would be to give up and go back to "fake" executables, another one would be to change from REL to RELA relocation info. The latter contains an addend, extra data which can be used to perform all the relocation calculations I need. Decided for the second option. The patch is already in the works. There is another function for the binutils' bfd backend to perform the final relocation. There can decide what to do with every reloc info, modify data and eventually strip some symbols. An advantage is - at this stage of the linking process have also full access to all local symbols so can change all relocations section relative and eventually strip all symbols from the files. GPU VCore developed by Alphamosaic Ltd and now owned by Broadcom. Most of start.elf runs on the GPU. Placing ALL the userland GPU code in the videocore.hidd isn't going to be a terribly big problem because the code they published is nothing more than a shim that sends data straight to the GPU to execute. The good news about this is that we only need to write our HIDD using the OpenVG API. The shim is relatively small codewise and lives in the ARM memory (the actual OpenVG code itself lives in the GPU RAM area and its loaded from start.elf). That's also the bad news. Our driver has to translate AROS video calls to OpenVG calls, for most tasks it should be easy, for some, not so much. It's still probably less difficult and less work, than controlling the GPU directly. The other good news is that anything done through OpenVG happens on the GPU, its truly accelerated. It also has some nice font functions, meaning we can lead into an accelerated text mode later. Basically, AROS resets or locks up when it tries to use AROS_ATOMIC_INC or DEC. If I comment out the byte/word operations in the header files and use non-atomic operations, the code works as expected. have read that the L1 cache needs to be enabled to use LDREX and co (which I also read is only meant to be used on multi processor systems with shared memory) - however I am certain this is correctly enabled. If you are using LREX or STREX, you should have L1 cache enabled, at least on the ARM CPU I work with at work. L1 cache is enabled by enabling the MMU *AND* setting the C and I bits in the CPU - the C bit is ignored, and the I bit only covers the 16 byte instruction pipeline if the MMU is not enabled. Can you verify that your assembly is generating LDREX/STREX? From the behavior, it almost sounds like its generating the default Semaphore locked atomics. Impossible. There are no semaphore-locked atomics. There are Disable()/Enable()-based ones instead. And there's a special #define AROS_NO_ATOMIC_OPERATIONS in this case, which tweaks Disable()/Enable() implementations not to recurse forever. I have tested this on ARMv5 which does not have ldrex/strex, it works fine. On those ARMs there's no way to have real atomics. On other OSes (like Linux) this is done by introducing things like atomic_t, which appears to be a complex structure, holding the value together with accompanying spinlock (implemented using swp). #warning "TODO: lookup optimal mmu table settings for raspi memory" /* Set up an identity-mapping for all 4GB */ for(x = 0; x < 4096; x ++) { pagetable[x] = x<<20 | (0x40002|0x80000|0x010000|0x00C00|0x04); } Shouldn't there be a second loop that sets the 'C' bit in the descriptor for the RAM pages? Currently, you have TEX=0, C=0, B=1 for all pages (Shared Device). You should have TEX=0, C=1, B=0 for RAM (Write-Through, Cached) So .. pagetable[x] = x<<20 | 2; should be enough? No, for RAM you need to change the '| 0x40' to '| 0x80' tell dosboot the correct defaults to use Please don't do this. This bootconfig.c is a deprecated legacy thing. I wanted it to go away completely with time. Instead, display drivers should auto-install themselves during own initialization phase. I. e. detect hardware=>instantiate itself. This should make things way simpler. With this approach you only need to add the driver into KS image to get the device autobooted. No hardcoded stuff. Currently VESA and VGA drivers do this, look there for examples. never rewrote ATI driver because i don't have any test system for it. they defined a smaller AROSCPUContext than the ExceptionContext - yet reference it as ExceptionContext in other places, and since it hasn't allocated enough storage for ExceptionContext, are corrupting memory/the structure (since the elements that are there don't map 1 to 1 with the exception context). AFAIK, AROS has been moving in a different direction to this in recent years. It is the job of graphics HIDDs to allocate bitmaps etc. so that they have the most suitable characteristics, including allocating them from GPU RAM where possible. The concept of chip RAM is only for legacy code, and most if not all non-68k platforms should have all system RAM marked as chip. BTW, is the video processing code you mention CPU code or GPU code? Also, IIRC we have support for "external memory allocators". Perhaps that's what we need for the allocation of GPU RAM through the mailbox. All hosted and x86 native ports should use proper context formats. trying to clarify if the vblank handler has to have run by this point to prevent this deadlock. Actually, no. Unless you have installed VBlank handler which should wake up at some point. Without VBlank there will be no quantum count. Consequently, there will be no forced preemption. But the rest will work, and multitasking will be cooperative (switch happens only when current task voluntarily gives up the CPU). Does it depend on the vblank having run before this point? and if yes what does that mean on systems where it might be able to run enough code (e.g. get to this point) before the vblank interrupt has triggered? What is it waiting for? It could wait for timer, in this case you need timer.device working. VBlank is currently needed for exec's quantum counter. In current native ports we have only a single timer, which is served by timer.device. VBlank is simulated by timer.device also. If your machine has two timers, then you can use one of them for VBlank, and another for timer.device, this will simplify things down. VBlank needs to be 50 Hz for historical reasons, many programs use it as cheap timer. I am periodically thinking about making some abstract mechanism to be able to change quantum source (and untie it from 50 Hz), but have no time to come up with something good. Additionally i started disliking timer.device hardcoded design when PC has got many timers (old 8253, APIC, HPET). Currently i think there should be some low-level entity representing tick source. timer.device should just select the most appropriate source for its units. The BCM2835 has 4 GPU based timer sources - 2 are used by the GPU, so im using Timer3 for our heartbeat and the remaining one will be free to the system. There is also the less capable ARM timer but that is dependent on the CPU frequency. Very good. You won't need any emulation. Set the heartbeat to 50 Hz and drive VBlank from it. Use other timer for MicroHZ. Can you use the 'econsole.hook' I make for debugging the Sam460 via the serial port? It provides a before-anything-else shell prompt on the serial port. You can then do 'NewCLI' to test your graphics, or use any DOS command in shellcommands.resource. You should just be able to add econsole.hook to your module list, and use 'econsole' in your bootargs. So long as you have a working Exec/RawMayGetChar and Exec/RawPutChar, it should work. Also make sure to add shell.resource and shellcommands.resource for this. That should have done it. If you set "#define DEBUG 1" in arch/all-native/econsole/econsole.c, do you get any additional serial output? have added it to the build and added econsole to the command line - and can see the bootloader picks up on the emergency bootconsole tag, but I still only get the insert bootable media display? Im assuming it exposes a fake filesystem that tricks aros into booting? The contents of which are: ECON:AROS.boot Way to handle the scheduling code? The implementations I had been following were causing problems, due to cascading interrupts which I cant handle properly in the asm stubs just now (when they break disable etc.) - since it means detecting the interrupted codes cpu mode and getting the correct sp/lr for it, and that's just too tedious for arm. To work around this ive added a system idle task which does nothing - and when the scheduling code has no task to run switches this in and lets it run, thereby allowing the interrupts etc to resume until something does need to happen. Also, by adding accounting code to cpu_Switch() and cpu_Dispatch(), it should allow the system to log idle time correctly (as well as running tasks). have thought of also adding an additional task that never runs, solely to record time spent in IRQ handlers, but I digress.. was under the impression that kernel.resource should *never* be used outside of exec.library. This is a wrong impression. Michal started designing it because portable nature of AROS does not fit well into exec's API with all its assumptions. So, he started the new, hardware-agnostic kernel API from scratch. Yes, exec sits on top of it in places. But kernel always meant to be open thing. Otherwise it would not exist. it wasn't meant to be just used willy nilly by user code - but by lower system components (e.g. exec) so that they could be implemented in a more generic fashion, and the kernel resource itself hide the systems quirks. Adding new things there perfectly keeps up with our decision to minimize AROS-specific intervention into APIs which can clash with MorphOS or Amiga OS4 extensions. We want at least source-level compatibility there. Binary compatibility on PPC would be extremely cool, but at the other hand we have no maintainer for this, as well as their ABIs splintering. It depends on what exactly is being implemented - there's no reason we should have everything crammed into kernel.resource if it doesn't need to be (i.e. if its better suited as a separate component/subsystem in its own right) The _LE versions are for when you have endian swapping taking place. If the graphics are the same endian as the CPU, no swapping should occur. I ran into a similar terminology problem in SDL with a friend insisting that his Radeon 7000 on his PC was big-endian. It is not, it just uses the same endianness for the graphics card and the CPU so no swapping was necessary. They were both little-endian. The _LE versions are because the PixFmts refer to the bitmap data being in big endian format in memory, for which the normal version would need to do endianness conversion before applying the shifts/masks. on this platform it is in _LE in memory also so we don't need the conversion hence using the _LE version of the call). would use _LE (if it's really little endian 16 bit mode). What is the bare minimum needed to implement a framebuffer based gfx driver, with our software handling the rest? Have tried with just a gfx class that only expose new/dispose/newbitmap - and having an onscreenbitmap used only for the framebuffer itself (with all other bitmaps being chunkybm, and the framebuffer's superclass also being chunkybm), but that alone isn't enough it seems? You can use workbench/hidds/sm502/ as your example - it is as simple as I could make it. So, AROS creates the framebuffer bitmap (verified this) -> so surely it should be capable of then rendeing into it? I don't actually create the framebuffer "bitmap object" myself - only as a result of being asked to. The code I currently have on SVN seems to create the framebuffers bitmap object fine, but then crashes in intuitions DisplayDriver callback. In particular it crashes performing the getattr on the system default pointer. don't expose MEMF_CHIP in an allocatable form so AllocSpriteData was failing (and other code later doesn't check if the values are valid == illegal memory accesses) So far have -: vc_init: queries the gpus memory, and sets up a fake memory handler for it, then adds the bootmode driver and returns saying all is well vc_gfxhidd:New: sets up some fake syncmodes to test with and creates the real gfx object. vc_gfxhidd:NewBitmap: checks if its a framebuffer and uses the onbitmap class or uses the chunkybm class otherwise vc_onbitmap:New; creates a chunkybm object and then pushes the real framebuffer address into it as the buffer, vc4 had v8adds, v8subs, v8muld, v8min and v8max which operated on four 8bit uint values packed into a 32bit register. Multiplication was in the range 0.0 to 1.0 and addition/subtraction saturated. There were also a range unpacking/packing modes that allowed you to pack and unpack 8bit values into 32bit registers. RasPi has to speak to the "operating system" which runs on the GPU itself and request/free memory - it cant directly manage it itself, and so the managed functions were used to wrap these calls. The Arm and GPU share memory space. The framebuffer is shared. The Arm can write a pixel and it will appear on the screen (through GPU hardware) without flushing/copying being required. The GPU can composite multiple FB's in real time - so you have a number of surfaces defined which are rotated etc and composited in real time to the output. Copying can map from the address space of the Arm to the flat space of the GPU which takes some code, but I don't think whole buffers are copied. The DMA hardware can also access the whole memory space and can perform 2D fills and blits (no blending). This is documented in the peripheral spec posted. The DMA is just an Arm accessible peripheral and can be set up with low latency (e.g. microseconds). must use a 0xc0000000-based bus address to access SDRAM, yet non-DMA access should go via a 0x0-based bus address. For 2D dma, set TDMODE, and the spec says "interpret the TXFR_LEN register as YLENGTH number of transfers each of XLENGTH, and add the strides to the address after each transfer." so set STRIDE to pitch of the image, the width is XLENGTH and height is YLENGTH. You would fill by not setting the SRC_INC and point source to your fill data. The DMA cannot see the ARM's L1 cache, so you would map the framebuffer with ioremap_nocache. Depending on where the source data comes from, it may need an L1 cache flush. The DMA can see the L2 cache. Use 0xC0000000 bus addresses when L2 is disabled and 0x40000000 bus addresses when L2 is enabled. (actually just call virt_to_bus and you'll get the right address out). openGLES/openVG has high latency. Writing to framebuffer then reading it back is very inefficient (e.g. milliseconds). If you can drive it a unidirectional way, just streaming commands at then that is efficient. openVG is not implemented on top of openGLES - it uses the same hardware but as a first class interface To improve the Gfx driver, we will need a DMA resource implemented so can use to perform DMA operations. The Gfx driver will need this to perform blits. Actually MEMF_CHIP has to present, for historical reasons. This has been never fully agreed upon, but in ports i wrote i exposed the whole memory as MEMF_CHIP. The idea behind this is that CHIP is originally the memory where graphics and sound data can be put. On non-Amiga platforms there are no restrictions on this, so the whole memory is CHIP. Yes, many old software can misbehave with CHIP memory size larger than 2MB. But this actually applies only to m68k AROS which is going to run m68k binaries. In other cases it's quite logical to fix the program when porting. As to original question: yes, it's enough to have a framebuffer bitmap (one with aoHidd_BitMap_FrameBuffer set to TRUE) and PutPixel routine. It framebuffer can be served by chunky bitmap class, then you can simply create chunky bitmap with your own buffer (see how VESA driver does this). Chunky PutPixel is already there. struggling to determine what is the correct pixfmt to use for the 24/16/15 bit gfx modes on the RasPi. AFAIK it uses RGB565, for 16bit but im unsure what shifts etc should go with it? suffice to say Im getting the wrong colors so far lol. <pre> redmask: 0x0000F800 greenmask: 0x000007E0 bluemask: 0x0000001F alphamask: 0 redshift: 16 greenshift: 21 blueshift: 27 alphashift: 0 </pre> It should likely be vHidd_StdPixFmt_RGB16_LE This stuff is a bit confusing. The "names" of the stdpixfmts are based on the layout in memory, ignoring endianess. So for example: ARGB32: will be 0xAA 0xRR 0xGG 0xBB in memory on both big endian and little endian machines. The shifts and masks OTOH are based on pixel access (ULONG in this case), so differ depending on whether you run on big endian machine or little endian machine (that's why there's stdpixfmt_le.h and stdpixfmt_be.h in rom/hidds/graphics/). With the 16 bit pixel format it's even more confusing, as for example it's impossible on little endian machine to describe RGB16 with shifts/masks alone. That's why there's vHidd_PixFmt_SwapPixelBytes_Flag. (RGB16 == RRRRRGGG GGGBBBBB in memory, and for pixel (WORD) access on little endian machine it needs to be accessed as GGGBBBBBRRRRRGGGG). The shifts btw indicate how much to shift the component to the left (!) so that it is moved to the highest bit (31). The aHidd_PixFmt_StdPixFmt you specify will be ignored most of the time, because when the pixelfmt is registered, the gfx hidd checks if there's an identical pixfmt (shifts/masks/etc., but ignoring pixfmt->stdpixfmt) already in the system, and if so, it uses the already existing one and does not create a new one. In theory it would be better if gfx drivers could simply/only specify a StdPixFmt without all the shifts/masks stuff when the gfx driver uses pixfmt which matches one of the stdpixfmts exactly. Another possibility would be for gfx drivers to use HIDD_Gfx_GetPIxFmt(stdpixfmt_gfx_driver_wants_to_use) and then peek shifts/masks from it and fill out a pixfmt tag list based on that. 15bit very blue/green: Try to pass same shifts/masks/etc. as in 16 bit pixfmt (maybe you think it's using 15 bit R5G5B5 (or swapped) but it's actually still using 16 bit R5G6B5 (or swapped). aHidd_PixFmt_StdPixFmt you pass is mostly ignored. It's the shift/masks/etc. that count. But I would still pass the correct one (_LE) == whatever rom/hidds/graphics/stdpixfmts_??.h uses in the entry where you have looked up shifts/masks/etc. Use the shifts/masks/etc. from the entry in stdpixfmt_le.h (if you are running on little endian machine) or stdpixfmt_be.h (if you are running on little endian machine) that matches the pixfmt that its meant to be. 0xAA,0xRR,0xGG,0xBB on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on little endian (->entry in stdpixfmt_le.h which says vHidd_StdPixFmt_BGRA32) 0xAA,0xRR,0xGG,0xBB on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_ARGB32) 0xBB,0xGG,0xRR,0xAA on big endian (->entry in stdpixfmt_be.h which says vHidd_StdPixFmt_BGRA32) it feels like AROS trashes the alpha component, otherwise it should be 8A8R8G8B. read on the subject suggest its in 1x5r5g5b (x is ignored) to keep 16bit alignment . Suggests to me that wrong shift/mask are being applied - however going by the 16bit versions it all looks correct to me so I am really confused as to what is happening. The output image looks to have too much green/blue, and very weak red. Kickstart The idea is to minimize amount of archirecture-specific modules to make the user's life easier. So, the kickstart was split into 'base' (which does not contain anything machine-specific) and 'BSP' (Board Support Package) which contains all hardware-specific stuff. This way, for example, distribution makers can save up space on CD and make CDs with multiple platform support. Different configuration would load the same base with different BSP's. Next there was some part which is entirely missing on hosted. These are filesystems. Hosted ports do not need them to boot up, so on hosted they are left out. At the other hand, they are also architecture-agnostic. So i put them into 'FS' package (standing for 'filesystem'). USB Poseidon is one more big part. I made it into separate package in order to allow users to omit it if they don't need it (for example, to run on retro PCs without USB). Personally i have one. Again, Poseidon is hardware-agnostic (well, there are USB drivers but HCIs are pretty standard). AFAIK its HCI 1.0 compliant but not familiar enough with poseidons drivers, nor USB, to just hack away at the existing code. Perhaps once i'm more familiar with the workings I can merge in the changes needed to get it operating but for now I will focus on getting it running. Also our drivers have known issues so perhaps a fresh set of eyes might shed some light on what is going wrong. Another interesting question is whether Poseidon can operate on device side. Is it flexible enough? How similar is being a USB host and USB device? think it will need a bit of work on Poseidon's side. Until then I will force the driver into Host/Master mode in the init code, but leave open device etc to configure the chipset for either's use - and look at trying to add support for working in Device/Slave mode & switching modes once it's up and running. Actually USBROMStartup is some kind of kludge. Can there be any alternative? Could device drivers be self-installing, like our HIDDs? This would get rid of need to list them in USBRomStartup. * Model A and B limited to 150 mA per port. * Model B+ and Pi 2 introduced configurable 600 mA to 1.2 A support over all ports - anything above that requires a powered USB hub. Implementing the hardware driver that Poseidon uses to interact with the USB components. Have code in place to (try) and initialise the USB chipset, and configure host/device mode operation (though AFAICT Poseidon doesn't support device mode). Started to get the "virtual" root hub written for the single USB port so that Poseidon should at least list it correctly in the GUI - and try to interact with it to find peripherals. The BCM2835 uses a soft IP block from Synopsys’ DesignWare library (DWC), specifically the block is called dwc_usb_2_0_hs_otg_subsystem-ahb_se (“USB 2.0 Hi-Speed OTG Controller Subsystem w/AHB Interface SE”). There is no public documentation for this, and pretty much zero chance of anyone getting hold of it even with NDA. However, there's a Linux driver written by Synopsys ([https://github.com/raspberrypi/linux dwc_usb]). Specifically directories [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_common_port] and [https://github.com/raspberrypi/linux/tree/rpi-patches/drivers/usb/host dwc_otg]. The Synopsys code is actually under a fairly permissive licence – it's not GPL, it's similar to BSD (’don't sue us if it breaks’ is pretty much the only clause). So this should not be a barrier to porting the code. The code is really well written, with a nice partition between the work done by the driver (dwc_otg, which is fairly involved, given the host does more work than a conventional EHCI driver), and the interface to Linux (dwc_common_port). Probably only need provision of relevant changes to dwc_common_port. Other things to consider.... * Provision of necessary headers to get it to compile * Provision of necessary functions (main issues are wait queues, threads, work queues, tasklets, timers, spinlocks and mutexes (multithreading) ) * Interfacing between USB stack and the driver. dwc_otg/dwc_otg_hcd_linux.c looks like the place to start. the Linux bits of the headers are only required for the dwc_common_port library. dwc_common_port includes a variety of crypto functions which are not used – it appears to also be used for ultrawideband (UWB) and wireless USB (WUSB) drivers where crypto will be an issue, but it isn't going to be for plain wired USB. Every USB driver acts as an USB hub as well in order to let Poseidon control the state of USB ports. The code there was reading status of the only USB port in Raspberry's CPU but when changing the status it erroneously deleted some of the status bits, including the port enable one. It was so because those bits in the status register are of a type Read/WriteToClear. It means, if one does not want to change their value from 1 back to 0, one has to actually write the 0 value. Very practical thing e.g. in interrupt handlers, where one reads the interrupt status register to learn what was the interrupt reason, and writes it back to the same register in order to clear the interrupts. After fixing that code it turned out that the communication was still unsuccessful. Apparently the USB device was not understanding the host for some reason. That should not happen since the request sent was one of the standard ones implemented by virtually anything with an USB connector, assumed that Poseidon clears the data caches before forwarding the work to the USB drivers but that's the responsibility of the driver itself. The USB device responded and acknowledged the transmission! But why were all the request sent after address change failing with timeout? They should not. Once again, address set is supported just by anything. Tried to contact the device at address 0 once again and there it was, still responding properly. The enlightenment came. The bus address for DMA transmissions was, as it is in many bare metal USB implementations, just the pure memory address of the buffer as seen by the ARM cpu. Have "prefixed" it with the real location of uncached RAM and booted AROS once again. Trident saw this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 and this: Product : Vendor: Vdr=0424/PID=EC00 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 255 SubClass : 0 DevProto : 1 VendorID : 1060 ProductID : 60416 DevVers : 0200 and even this: Product : Hub: Vdr=0424/PID=9514 Manufacturer: Standard Microsystems Corp. SerialNumber: n/a /Users/michal/git/AROS/rom/USB/poseidon/./poseidon.library.c:psd_20_psdEnumerateDevice/3092: USBVersion: 0200 Class : 9 SubClass : 0 DevProto : 2 VendorID : 1060 ProductID : 38164 DevVers : 0200 What are these things? The first one is USB hub built in the Raspberry. Thanks to this one the Pi machines (with exception of Pi0 and computing modules) have more than just one single USB port. The second one is the network chip in raspberry, the third one is my USB SD card reader which have just connected to see what happens. AROS tried, of course, to boot from it ;) So, the first step towards working USB is done. The control transfers are working as you can see above. Next step is to implement bulk and interrupt transfers, having the basics in place. Finally some error handling will be added and USB for Pi will be as complete as the PC version. [http://www.raspyfi.com/raspberry-pi-usb-audio-fix/ Issue with USB Audio] Audio The Pi 4B is the only Pi that can output HD Audio as an HD Audio passthrough bitstream, and it does it over HDMI. It's possible to use the two HDMI output for separate HDMI video and HDMI audio outputs to allow UHD HDR video and HD Audio with non-UHD HDR compatible AVRs. The Pi3B+ and earlier will decode to PCM 5.1/7.1 and output over HDMI. HDMI is the only interconnect that has a standard for carrying Dolby True HD, DTS HD MA etc. as a bitstream - you can't carry it as a bitstream on any other interface. Pi3 and Pi4 audio jack output derived from 12bit pulse width modulation is relatively poor. For better, choose USB Audio or I2C versions. [https://github.com/raspberrypi/linux/tree/rpi-patches/sound/arm audio] and its [https://github.com/raspberrypi/firmware/issues/2 very high speed message passing interface type of thing VCHI] The Model B+ added an additional voltage regulator for the audio output and an additional output driver to drive low-resistance loads like headphones. However it is still using pulse-width modulation (PWM), which has a major impact on sound quality the old Raspberry Pi used a linear voltage regulator to provide the 3.3V to many of the components on the board while the new one uses a switching regulator. Both can perform reasonably well. However switch mode power supplies often show higher noise figures Analogue audio Audio over HDMI rev 1.3 & 1.4 Ethernet 10/100 BaseT Ethernet RJ45 socket GPIO GPIO shouldn't be too bad but bear in mind it is already accessed in places so they would need to allocate pins etc through it (e.g. sdcard to flicker the activity light, serial debug to output data on the GPIO pins) Probably a resource rather than a device... Started an i2c driver that will need to allocate GPIO pins. Feel free to work on it if you are interested ;p GPU graphics with 2D and 3D acceleration Sadly none yet for 32bit but for 64bit... Miscellanous hdmi issues Setting the hdmi_force_hotplug=1 makes sure the Pi believes the monitor/TV is really there. You might also need to set config_hdmi_boost=4 or even higher (up to 9) if your display needs a stronger signal. If the display is a computer monitor or newer tv, use hdmi_group=1 (auto HDMI use) and if it is an older TV, try hdmi_group=2 (for DMT formats, i.e. for PC monitors) then you HAVE to "set hdmi_drive = 2 to enable HDMI output as this forces HDMI mode rather than DVI mode Do not set hdmi_safe=1 as that overrides many of the previous options. Using a shorter or better quality HDMI cable might help. Make sure your Pi's power supply delivers 1 A and not 500 mA. If you see a problem with the red colour - either absent, or interference - then try a boost composite video changing the RCA cable, then the composite port worked out of the box Boot it as you are doing, without HDMI. If you now plug in the HDMI, do you get the image? In other words, does the Pi think HDMI is connected even when it isn't? Rename all the files in the first partion of the card except bootcode.bin, start.elf and fixup.dat What's the result? Put back config.txt What's the result? for PAL mode sdtv_mode=2 dmi_ignore_hotplug Pretends HDMI hotplug signal is not asserted so it appears a HDMI display is not attached hdmi_ignore_hotplug=1 Use composite mode even if HDMI monitor is detected <pre> # NOOBS Auto-generated Settings: #hdmi_force_hotplug=1 #config_hdmi_boost=4 #overscan_left=24 #overscan_right=24 #overscan_top=16 #overscan_bottom=16 #disable_overscan=0 start_x=1 gpu_mem=128 </pre> tvservice -c "PAL 4:3" <pre> /opt/vc/bin/tvservice -s or tvservice -s state: HPD high|HDMI mode|HDCP off|composite off (0x12001a), 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m CEA Group CEA has 1 modes: (native) mode 16: 1920x1080 @ 60 Hz, progressive /opt/vc/bin/tvservice -m DMT Group DMT has 0 modes: </pre> sudo amixer cset numid=3 1 forces the audio to the headphone jack, even with the HDMI video output plugged in config.txt the hdmi_ignore_edid_audio=1 option sems relevant as it should tell ALSA that the only available audio is analog, no matter what the display says There are several different ways that these 4 pole (ring) composite analog cables can be wired up, so some work great in some applications and can be a waste of time in others. What is needed for the Raspberry Pi B+ and above, which like many camcorders needs the ring contact next to the base contact to be the ground. The wiring for the 4 pole are: TIP (LEFT AUDIO CHANNEL) RING 1 (RIGHT AUDIO CHANNEL) RING 2 (GROUND/EARTH) RING 3 BASE/SLEEVE (VIDEO) YELLOW Most Apple based Players and the Microsoft Zune (TM) are wired this way. Most analogue camcorders are wired this way as well, where the ground in on Ring 2 will work with the Pi although you may need to swap your Video plug with the Right Audio plug. Nearly all other MP3 players are not wired this way, the ground is on another ring ie the wrong one. External devices * Camera Module Omnivision ov5647 Sunny 5MP (NoIR version) V1.3 - NoIR at 850&nbsp;nm, peak at 880&nbsp;nm and trails off at 940&nbsp;nm wavelengths * Camera V2 Sony IMX219 V2.1 8mpixel 8MP 8megapixel - 3280 x 2464 pixels - video at 1080p30, 720p60 and 640x480p90 - wider field of view, 62 vs 54 degrees horizontally - * Branded WIFI usb BCM43143 dongle N.B. dreaded error after changing cameras (stupidly without turning off the power first) and lasted through several power cycles. It can be a bad 15-pin FFC ribbon cable, when swapped, camera(s) and the Pi itself are working OK. It can be an instance of a cold solder joint on the CSI connector on the pi board. the camera can be detected (that's done via I2C) but may still not be able to receive image data (done via CSI-2) if something is broken. CSI-2 is uni-directional. Control is generally done via I2C. The CSI-2 receiver always writes to memory, not direct to the ISP. That's the way the Broadcom architecture works as it allows multipass processing easily. GPU memory is accessible from the ARM. Processing using the QPU graphics processors may be possible. currently the only supported sensor is OV5647 and IMX219. The linux drivers are all in the firmware blob, else you'd be looking at at least a man-month of work in a fully fledged imaging lab to do a decent tuning of the camera modules' ISP parameters. Static electricity maybe an issue for the camera module and slightly less for the pi board. == References == ===Good sites to visit=== *[https://github.com/raspberrypi/firmware/tree/master/ Raspberry Pi Firmware build] *[https://www.raspberrypi.com/documentation/computers/software-sources.html Documentation] *[https://rpilocator.com/ RPiLocator] Linux only *[https://github.com/raspberrypi/linux Raspberry Pi Linux Build] *[https://dietpi.com/ DietPi] *[http://www.tinycorelinux.net/ports.html piCore] *[https://wiki.alpinelinux.org/wiki/Raspberry_Pi Alpine Linux] *[https://github.com/armbian/build Armbian] *[ FydeOS] *[ TwisterOS based on ChromiumOS] *[https://note.com/jamesmondo/n/nc76e31402be8?hl=en BSD] *[https://www.raspberrypi.com/software/operating-systems/ PiOS Lite] and then [https://hstwb.firstrealize.com/ HST] *[ PiMiga for pi4 and pi5] *[ amibian for pi2 and pi3] *[ retropie pi1 and 2] Other alternative lighter smaller than Pi OS *[https://aros.sourceforge.io/nightly1.html Aros 64bit ARMV8 single core] *[https://www.riscosopen.org/wiki/documentation/show/Welcome%20to%20RISC%20OS%20Pi RiscOS on Pi3 and Pi4] *[https://github.com/michalsc/Emu68 ARM based realtime JIT 68k for amiga computers] *[https://github.com/JJDSNT/bellatrix/releases/ Alternative use of Emu68 on Pi3b] *[https://github.com/stevereaver/uaos uaOS with Emu68k] *[https://github.com/aros-development-team/AROS/commit/f80a268607dfae81b2db94755ab4e4d31ccb72d6 m68kemu library reference] *[ HaikuOS] *[https://github.com/raspberrypi/noobs NOOBS] os loader with successor [https://github.com/procount/pinn PINN] *[https://github.com/maxnet/berryboot berryboot] *[https://github.com/brianwiddas/pi-baremetal Bare Metal Access on Pi 32bit] Testing procedure is put sd card in, connect board to board if necessary, plug in hdmi and then power nothing else is done especially CSI DSI etc [https://www.raspberrypi.com/documentation/computers/compute-module.html CM5] has the same 55mm x 40mm 2x100pin connectors form factor as the CM4 but [https://www.epdtonthenet.net/article/214508/Key-Considerations-When-Migrating-from-Raspberry-Pi-CM4-to-CM5.aspx some pins and other small things] have changed. Will need the [https://raspipcb.com/tech-blog/raspberry-pi-cm4-vs-cm5-difference-in-booting-from-sd-card/ right IO board to suit] *Green [ Raspberry Pi Compute Module 5 IO Board REV2 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1967]] - untested *Green [ RPi Compute Module 5 IO board REV1 [https://pip.raspberrypi.com/categories/1097-raspberry-pi-compute-module-5-io-board SC1751]] - untested *Black SupTronics Geekbord X1500 CM5 IO Carrier Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[https://sipeed.com/nanocluster Sipeed NanoCluster] - untested up to 7 CM5 *Green BentoIO CMX0 - untested *Box EDATec ED-CLAWBOX - untested *Home Assistant Yellow - Kit with PoE with Raspberry Pi Compute Module 5 - untested *Blue [https://www.waveshare.com/wiki/CM5_PoE_BASE_A Waveshare CM5-PoE-BASE-A] - untested *Box Waveshare [ CM5-POE-BOX-A] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-B Waveshare CM5-IO-BASE-B] - untested *Blue [https://www.waveshare.com/wiki/CM5-IO-BASE-A Waveshare CM5-IO-BASE-A] - untested *Blue Waveshare [https://www.waveshare.com/wiki/CM5-NANO-B CM5-NANO-B] - untested *[https://carboncomputers.us/products/pi-flux piFlux] *[https://carboncomputers.us/products/ Zitaotech Hackberry] CM5 lite only - *Portable [https://www.waveshare.com/pocketterm35.htm Waveshare PocketTerm35] with Pi4B or Pi5 - untested *Box [https://www.clockworkpi.com/uconsole ClockworkPi uConsole][https://www.youtube.com/watch?v=EtI_bAahbR8 CM4 into an adapter or CM3 into so-dimm - Cyberdeck] - untested *Green RPi [https://datasheets.raspberrypi.com/cm4io/CM4IO-KiCAD.zip Compute Module 4] [https://datasheets.raspberrypi.com/cm4io/cm4io-datasheet.pdf IO board] V1.4 [https://datasheets.raspberrypi.com/cm4io/CM4IOUSB3-KiCAD.zip USB3] [https://datasheets.raspberrypi.com/cm4io/cm4iousb3-appnote.pdf CM4ISO] [https://datasheets.raspberrypi.com/cm4/cm4-datasheet.pdf Dual100pin] (2020) aka Development Platform Board - untested *Purple Pi Hut Cytron CM4 Maker Board - untested *Black DeskPi Super6C Cluster Mini-ITX Board - untested *[ KubeSail PiBox mini 2] *Home Assistant Yellow with Raspberry Pi Compute Module 4 - untested *[ Turing Pi V2] - untested CM4 with 260-pin SO-DIMM socket adapters and/or nvidia jetson nanos - untested *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-C Waveshare CM4-IO-BASE-C] - untested but binary blobs Rev01 Rev02 *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-B Waveshare CM4-IO-BASE-B] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-IO-BASE-A Waveshare CM4-IO-BASE-A] - untested but binary blobs *Blue [https://www.waveshare.com/wiki/CM4-NANO-B Waveshare CM4-NANO] - untested but usb and audio turned off or rerouted *Black [ Seeed Studio with BigTreeTech BTT pad 7] - bin blobs? CM3 has a 200 pin sodimm ddr2 connector form factor but not electrically SC0028, SC0029 *Blue [https://wiki.geekworm.com/CM_IO_Board Geekworm RPi Compute Module IO Board] [https://github.com/geekworm-com/cm-io-board CSI DSI] with CM3 in ddr2 slot underside - '''works''' if SW1 on but CM3+ '''does not''' *Green [https://cdn-shop.adafruit.com/product-files/3442/CMIO_schematic.pdf RPi V3 IO board CM3IO] and CM3 Lite - untested *Green [https://turingpi.com/ turingpi v1 cluster] - untested up to 7 cm3 7xlan9514 12V discontinued, 3 x Pi4 homelab maybe better *Blue [https://www.waveshare.com/wiki/Compute_Module_PoE_Board Waveshare Compute Module PoE Board] and CM3 lite (if not lite, write files to internal eMMC fat32) '''AVOID''' bin blobs *Blue [https://www.waveshare.com/compute-module-io-board-plus.htm Waveshare Compute Module IO Board Plus] [https://www.waveshare.com/wiki/Compute_Module_IO_Board_Plus wiki] [https://forums.raspberrypi.com/viewtopic.php?t=235695 pin settings] with CM3+ Lite - '''AVOID''' binary blob *[ Pi02w on Geekworm SupTronics X305 Raspberry Pi Zero IO Baseboard] - untested *[ Spotpear Pi Zero 2w to Pi3b format-ish] - untested *[ pi-top v4] box has 128x64 oled display, micro hdmi, 19Whr battery with pi4 and 15V PD 36W min needed *[ pi-top v3] three green pieces, heatsink covers most of the base tray, pi-top hub mk1 lhs and Pi1B Pi2b Pi3b rhs secured from below, black rounded strip with pi-top above keyboard, 13.3" HD 1366 x 768 display, small touchpad, *[ pi-top Model 2.0] pi-top on bottom bezel of 14-inch green laptop, large trackpad, keyboard slide down to reveal main system hub on slide rails moved to the right, Raspberry Pi3b screws down, hub slides in, 18V 2.5A 45W charger brick, battery 11.1V 3500mAh 38.85Wh and storage PiTopOS *[ Pi-Top CEED Raspberry Pi Modular Educational Desktop with RPI3] monitor *[https://www.indiegogo.com/en/projects/jesselozano/pi-top-a-raspberry-pi-laptop-you-build-yourself Pi-Top v1] wedge laptop with RPi2 <pre> 2008 Trustees collected for Foundation 2009 Pi Foundation charity status gained 2010 2011 First Raspberry prototypes 2012 First boards go on sale at CPC and RS. The Model A and B 700 MHz Arm11 - February 29th BCM 2835 2012 First million sold - more than the 10,000 original planned and anticipated 2013 First Alpha Experimental builds of AROS Native for the 32bit Pi 2013 Pi Trading launched making grants available, providing in house educational resources and Pi Academy for teacher training 2013 Over two million sold 2014 Over three million sold 2014 Pi 1 Model B+ introduced that moved composite video to audio jack and same half gig of memory 2014 Pi Model A+ v1.1 no ethernet and 1 usb - a little smaller - 2015 Over four million first gen pis sold 2015 Pi Zero 1.2 BCM2835 first production revision released with no camera port 2016 Pi0 1.3 released with camera csi connector 2017 Pi Zero W v1.1 1GHz Pi0W, single-core 32bit CPU BCM2835 released with Cypress CYW43438 wireless 2020 Raspberry Pi Pico SC0919 with RP2040 32-bit 2Core ARM Cortex-M0+ up to 133 MHz - 264KB of SRAM and 2MB of on-board QSPI Flash - 2024 Raspberry Pi Pico 2 with RP2350 2Core 32bit Arm Cortex-M33 and 2core open-hardware [https://github.com/wren6991/hazard3 Hazard3 RISC-V] 2015 Pi 2 Model B v1.1 BCM2836 900/600 MHz ARM Cortex-A7 Armv7 quad 32bit, 32bit VideoCore IV GPU - 1Gb RAM - 5V 2A micro usb - SMSC LAN9514 chip - 2015 Over a million pi2s sold 2015 Raspberry Pi 2 Model B version 1.2 Pi2bv1.2, aka Pi2B2 has armv8 BCM2837 underclocked to 900Mhz without wifi/bluetooth module 2016 Pi 3 Model B - Broadcom BCM2837 SOC four 64bit ARMv8 Cortex-A53 1.2GHz 32bit 1080p VideoCore IV GPU - 1Gb DDR2 - bluetooth 4.1, Cypress CYW43438 wireless 802.11n - 4 x USB2.0 ports - 5.1V 2.5A - SMSC LAN9514 chip 2016 PIs total over 10 million worldwide 2017 Compute Module 3 CM3 with BCM2837B0 armv8 Quad 64-bit - small 67.6mm x 31mm board which fits DDR2 SODIMM connector but not electrically compatible which plugs into needed IO board - beware of the I2C protocol issue 1Gb LPDDR2 RAM - Lite or 4Gb Emmc storage 2017 12 million pis sold in total 2018 Pi 3 Model B+ - 4c A53 BCM2837B0 1.4Ghz - 1Gb, wireless 802.11ac, gigabit ethernet (300Mbit/s) and bluetooth 4.2 - power over ethernet - 4 x USB2.0 ports - Microchip LAN7515 chip 2019 Over 15 million sold 2019 Pi 3 Model A+ with BCM2837b0 Cortex-A53 64-bit SoC @ 1.4 GHz with 512Mb LPDDR2, 1 usb2, 1 hdmi, 1 micro usb 5V 2A - no ethernet - 2019 Raspberry Pi Compute Module 3+ CM3+ - Broadcom BCM2837B0 1.2Ghz, Cortex-A53 (ARMv8) 64-bit SoC on DDR2 SODIMM mechanically compatible only factor - IO board required 1Gb DDR2 and 8GB, 16GB, 32GB or a Lite variant without eMMC 2021 Pi zero 2 (w or no W) RP3A0 quad 1GHz Cortex-A53 64bit BCM2710A1 512mB SDRam 2025 edaTEC CM0 ED-CM0NANA with additional dev board with quad 1Ghz A53 with 512Mb Raysan RAM, 2 USB2 and 10/100 ethernet - pico castellated edge 2019 Pi 4 Model B RPI4B - BCM2711B0T quad 64bit A72 1.5GHz, 4K VideoCore VI, AC wifi, Bluetooth 5.0, GbE Broadcom BCM54213PE (PHY ID 0x600d84a2), 2 micro hdmi decode up to 4K, USB-C 5.1V 3A power, 2xVLI VL805 USB 3, 2xUSB 2.0, 2GB 9LDWW D9WHZ or 4GB 9FDWW D9WHV, 8GB 0AA47 D9ZCL ddr4 ram 2020 Silent Pi 4 v1.2 upgrade with more USB-c psu support 2020 PI400 BCM2711C0T 1.8GHz 4Gb DDR4 inside keyboard, 5.1V 5A 27W usb-c psu, 2 micro hdmi, external ide style 40pin gpio, no audio port - 2020 Raspberry Pi Compute Module 4 BCM2711B0T on new 55mm x 40mm 2x100 pin form factor with extra breakout IO board CM4101000 1Gb RAM Lite SOM CM4102000 2GB RAM Lite CM4104000 4GB RAM Lite CM4004008-4GB-RAM 8GB-EMMC SOM System on Modules CM4104032 4GB RAM 32GB emmc CM4108000 8GB RAM Lite CM4008016 8GB RAM 16Gb eMMc 2021 Raspberry Pi SC0763 Compute Module 4S CM4S with ddr2 sodimm pinouts but not electrically the same with suitable IO board extra cost - CM4S01000 1GB RAM Lite CM4S01008 1GB RAM 8GB eMMC Flash CM4S02000 2GB RAM Lite CM4S04000 4GB RAM Lite CM4S08000 8GB RAM Lite 2021 Pi 4 v1.4 BCM2711B1 upgraded power regulator, to deal with 8gig of ram being more power hungry - 2021-48 Raspberry Pi 4 model B v1.5 2GB 2023 Pi 5 v1.0 BCM2712 Quad A76 @2.4Ghz - VideoCore VII - no audio socket - dual 4k from mini hdmi - fan connector - 5.1V 5A psu 2024 Pi 5 2GB DDR4 version uses BCM2712D0 2024 Pi-500 with 8Gb LPDDR5 and membrane keyboard 2024 Pi 5 v1.1 2024 Raspberry Pi Compute Module 5 CM5 BCM2712 55mm x 40mm form factor with additional IO board CM5004000 04GB RAM 0GB eMMC Lite CM5008000 08GB RAM 0GB eMMC Lite CM5016000 16GB RAM 0GB eMMC Lite 2025 Pi-500+ with 256GB NVMe storage, 16GB LPDDR4 RAM, and Gateron KS-33 Low Profile Blue mechanical keyboard switches 2025 Pi5 1GB DDR4 announced 2022 PiOS linux goes 64bit 2024 Pi Trading IPO stockmarket stock exchange listing 2026 April and May Aros 64bit fixed, added AHI audio, VC4 gfx started, usb functions added to rom 2026 June and July Aros 64bit usb2otg started, dma.resource, sdio.resource, bwfm.device wifi added 2026 Late July daily 64bit Pi3 LE little endian builds start 2026 August Pi 4, 400, 5 and 500 DTBs added, expanding existing support and wifi for Pi4 and Pi5 2026 August Pi5 HAT+ nvme and HDMI, AHI RPiI2S added, Pi4 HVS5 video scaler started, 2026 2027 2028 Pi 6 </pre> ==Future== [https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2] {{BookCat}} rpznzisva0tzae3zlb7ee6exudarlxm Three Dimensional Electron Microscopy/What is 3DEM? 0 295392 4672086 4086396 2026-09-24T09:03:44Z R. Henrik Nilsson 3395618 Refrence > References 4672086 wikitext text/x-wiki ='''What is 3DEM?''' = [[File:Flow Chart for 3DEM.png|thumb|Flow chart showing the steps involved in 3DEM.]] [[File:Cryo Conditions in EM.jpg|thumb|Cryogenic Conditions in EM]] [[w:Cryo-electron_microscopy|Cryogenic electron microscopy]], often abbreviated as ‘cryo-EM’ has evolved to encompass a wide range of experimental methods. Cryo-EM is increasingly becoming a mainstream technology for studying cells, viruses, and protein structures at molecular resolution<ref name="electron"> Milne, Jacqueline L, Mario J Borgnia, and Alberto Bartesaghi. "Cryo-electron microscopy – a primer for the non-microscopist." Febs Journal.280 (2012): n. page. Print. </ref>. Images are produced using a [[w:Electron_microscope | electron microscope]], using electrons as radiation, emitted by a source that is housed under a high vacuum, and then pushed down the microscope column at accelerating voltages in the range of 80-300 kV<ref name="electron"> Milne, Jacqueline L, Mario J Borgnia, and Alberto Bartesaghi. "Cryo-electron microscopy – a primer for the non-microscopist." Febs Journal.280 (2012): n. page. Print. </ref>. A very large difference in electron microscopy compared to [[w:Optical_microscope | optical microscopy]] is the resolving power of the two methods, with electron microscopy having a much high resolving power. The resolving power of a microscope is directly related to the wavelength of the irradiation used to form an image. The electron irradiation used causes extensive damage to the biological sample. One-way to reduce the electron induced sample damage is to perform the technique in cryogenic temperatures. Freezing aqueous solutions in cryogen, such as liquid ethane cooled by liquid nitrogen is a method commonly used to prepare specimens for cryo-EM applications<ref name="electron"> Milne, Jacqueline L, Mario J Borgnia, and Alberto Bartesaghi. "Cryo-electron microscopy – a primer for the non-microscopist." Febs Journal.280 (2012): n. page. Print. </ref>. This method has proved to reduce the effects of radiation damage in a large way, which in turn lets researchers use higher doses of electrons to increase the signal to noise ratio, because of less radiation damage. The commonly used variant of cryo-EM is single particle analysis. Using this technique data from a large number of 2D projection images such as identical copies of protein complexes in different orientations are combined to generate a 3D reconstruction of the structure <ref name="electron"> Milne, Jacqueline L, Mario J Borgnia, and Alberto Bartesaghi. "Cryo-electron microscopy – a primer for the non-microscopist." Febs Journal.280 (2012): n. page. Print.</ref>. =='''Particle Picking''' == Particle picking attempts to correctly the position of particles, and differentiate between the particles and any contamination in an image <ref name="Particle">Voss, Neil. "Particle Picking." Roosevelt University, Schaumburg. 13 Sept. 2013. Lecture.</ref>. Particles may be chosen manually or through the use of an automated algorithm. The automated algorithm strives to separate the “positive class” of particles from the “negative class” of contaminants or noise<ref> Langlois, Robert, and Joachim Frank. "A Clarification of the Terms Used in Comparing Semi-automated Particle Selection Algorithms in Cryo-EM." Journal of Structural Biology 175.3 (2011): 348-52. Science Direct. Howard Hughes Medical Institute. Web. 3 Dec. 2013.</ref>. Automated algorithms may be prone to a type 1 or type 2 error, which falsely identify positives or negatives. . =='''Contrast Transfer Function'''== The [[w:Contrast_transfer_function|contrast transfer function]] (CTF) is a distortion of the image data collected due to flawed optical properties in a [[w:Transmission_electron_microscopy|transmission electron microscope]]<ref> Voss, Neil. "Contrast Transfer Function." Roosevelt University, Schaumburg. 27 Sept. 2013. Lecture. </ref>. There are two cause of the CTF and both are related to the lens system in electron microscopy. The first cause is [[w:Spherical_aberration|spherical aberrations]] that cause many focal points, which blurs the image. The second cause of the CTF is the under focus used in electron microscopy. To obtain a high resolution 3D image, the CTF must be corrected. =='''Particle Extraction and Stack Creation'''== [[File:Three-dimensional-electron-microscopy-reveals-the-evolution-of-glomerular-barrier-injury-srep35068-s2.ogv|thumb|3DEM example.]] A stack is a collection of similar images of the same structure. Individual images can be obtained by removing unnecessary information to increase processing speed<ref> Voss, Neil. "Particle Boxing." Roosevelt University, Schaumburg. 27 Sept. 2013. Lecture.</ref>. Particle boxing cuts out the image 150% the particle’s pixel size. Particle contrast differentiates between particles on a negative stain and on vitreous ice, inverting when the particles are black against a light background. CTF correction alternates the particles between the data and its inverse to correct the particles. =='''Particle Alignment'''== In particle alignment images of a particle are shifted and rotated in many different directions to attempt to align the particles. They must be shifted and rotated to align together to obtain an average image. The goal when averaging is to maximize the cross correlation of the images<ref> Sigworth, F.J. "A Maximum-Likelihood Approach to Single-Particle Image Refinement." Journal of Structural Biology.122 (1998): n. page. Print. </ref>. Particle alignment can either be classified as reference based or reference free. Depending on the classification, different types of automated packages may be used for alignment e.g. Xmipp Maxium Likelihood Alignment, Spider Reference Liklihood, and EMAN Refine 2D Reference-free Alignment<ref> Voss, Neil. "Particle Alignment." Roosevelt University, Schaumburg. 4 Oct. 2013. Lecture. </ref>. =='''Initial Model Creation'''== Multiple 2D images are required to obtain the structure of a 3D image. Particles are chosen and organized by structural characteristics including common lines, shapes, and tilts<ref>Voss, Neil. "Initial Model Problem." Roosevelt University, Schaumburg. 8 Nov. 2013. Lecture.</ref>. The particles are clustered with other structurally similar particles, and then averaged together <ref name="Particle">Voss, Neil. "Particle Picking." Roosevelt University, Schaumburg. 13 Sept. 2013. Lecture.</ref>. Reconstruction of a 3D model is reliant on the particle orientation, as stated by the [[w:Projection-slice_theorem |central projection theorem]]<ref name="electron"> Milne, Jacqueline L, Mario J Borgnia, and Alberto Bartesaghi. "Cryo-electron microscopy – a primer for the non-microscopist." Febs Journal.280 (2012): n. page. Print. </ref>. =='''3D Reconstruction'''== After getting an initial 3D structure by using one of a number of methods, such as random conical tilt or angular reconstitution, the obtained map is used as a 3D reference to refine the single particle orientation parameters (two for position and three for orientation). The structure can then be iteratively improved, alternating position and orientation determination with 3D reconstruction. The FSC [[w:Fourier_shell_correlation|Fourier shell correlation]]) and other resolution criteria can be used to follow the progress of the structure refinement, which is terminated when there is no further improvement. Different program such as IMAGIC, SPIDER, FREALIGN can be used for this purpose<ref>Voss, Neil. "3D Reconstruction." Roosevelt University, Schaumburg. 25 Oct. 2013. Lecture.</ref>. == '''References''' == {{Reflist}} {{BookCat}} ki78luxrx82m1ni960qs1s4ci39rn95 Fire on the Limestone Plains/Bush Fires/The 1979 Bush Fires 0 368021 4672060 3255742 2026-09-24T08:29:24Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672060 wikitext text/x-wiki == The 1979 Bush Fires == On 13 February 1979 extreme fire weather conditions prevailed in the Territory. The following is from the 1978-79 Bush Fire Council Annual Report - :A grassland fire danger rating of 70 (on a scale of 100) was calculated on the McArthur fire danger meter. Twelve fires were attended by Bush Fire Council units that day. The maximum temperature reached was 39 degrees Celsius. The major fire started at Sunny Corner near the Village of Hall. It was first detected by the fire towers at 2.59 pm. Fanned by winds gusting to 70 kilometers per hour, the fire burnt fiercely in a northward direction and quickly grew in size spreading at an estimated 8 kilometers per hour at its worst. :At around 1540 hours the fire approached the Gundaroo Road, around 4 kilometers from the source. Around 1620 hours the fire had reached Gungaderra Homestead (about 7 kilometers from the source), the fire is running in fully_cured Phalaris grassland. The fire behaviour was erratic with flame bursts of 4 to 10 metres and huge fire whirls. :The town of Sutton (N.S.W.) was evacuated about 5pm, when the fire reached the tops of nearby hills and began moving towards the town on a one-kilometer wide front. A major wind change to the south-west occurred at about 1730 hours, the fire broke out along the entire northern flank and burnt strongly to the north east. By the time the fire had been controlled, at about 4 am the next day, a total of 165 square kilometers (16 500 hectares) of land had been burnt in the A.C.T.(4 025 hectares) and New South Wales (12 475 hectares). :The fire caused losses in the A.C.T. of two cottages, three sheds, machinery and stored fodder, about 5000 sheep, six horses and fencing worth $200 000. The fire was caused by a drop-out fuse from a high tension powerline. :On the same day there were other major outbreaks in the A.C.T. at Mount Painter, Tuggeranong, near Kambah Pool and at Stirling where an A.C.T. Bush Fire Brigade Tanker was burnt out.<ref>1978-79 Bush Fire Council Annual Report</ref><ref>The Hall / Sutton (Gold Creek) Fire 13th February 1979 http://www.firebreak.com.au/jeff_cutting-bushfires.html</ref> From the Canberra Times * Two 12-year-old boys had been charged with starting a number of fires in the Stirling area, in one of which an ACT Bush Fire Council truck had been extensively damaged last week, ACT Police said last night. The boys had been arrested yesterday morning by Sergeant Blenn Mclnnes, from Woden, after allegedly attempting to start a fire next to Streeton Drive, Stirling. The boys would each be charged with three offences under the Careless Use of Fire Ordinance and one relating to malicious damage to a fire truck on February 13. Police would also charge two 11-year-old boys with lighting a fire in the Stirling area on Friday.<ref>The Canberra Times Wednesday 21 February 1979</ref> === References === {{Reflist}} {{BookCat}} egbuv0wnqq1ydlkmpl2bntigystoqst VCE Physics/Unit 1/AoS 1/Temperature 0 405878 4672068 4353847 2026-09-24T08:35:48Z R. Henrik Nilsson 3395618 Farenheit > Fahrenheit 4672068 wikitext text/x-wiki {{displaytitle|title={{BASEPAGENAME}}/Temperature, and how we measure it}} {{VCE_Physics/TOC}} == Editing Notes == Need to start adding suitable images etc. == Introduction == You can feel if something is hot or cold. We refer to how hot or cold something is as its "temperature". However, our sense of whether something is hot or cold varies depending on our state. Imagine you have a bowl of water in which you wash your hands, it may feel cool to you. A friend might wash their hands in the same bowl of water and say it feels warm. Your perception of the temperature of the water, whether it feels cold or hot, depends on how hot or cold your hands are. {{VCE Physics/Safety|If you carry out any experiments related to temperature make sure you are aware of any potential risks, for example you need to be aware of how different water temperatures relate to saftey - for example the [https://www.betterhealth.vic.gov.au/health/conditionsandtreatments/burns-and-scalds-children Burns and Scalds - Children] is a web page maintained by the Victorian Government which has information on the effect of different water temperatures on the body.}} {{Hidden|headerstyle=text-align:left|Can you design, and carry out, a simple experiment to confirm this?|For example, take three bowls of water, one warm, one cold and one at a temperature in between (ensure they are all safe temperatures). Hold your hands in the warm bowl for a while, and then put them in the in-between bowl... does it feel warm or cold? Then Hold your hands in the warm bowl for a while, and then put them in the in-between bowl... does it feel warm or cold? Your design of some experiment similar to this will have to take into account safe temperatures for the water... how much different the temperatures need to be for you to feel the effect - a difference of just one or two degrees is likely to be insufficient - you might start with an initial experiment to determine approximately how much difference you can feel. Also, you need to monitor the termperatures, putting your hands in the bowl may cause a significant change in the temperature of the water, over time the temperatures will change due to interaction with the room. The best strategy might be to have the middle bowl at room temperature?... even in a "simple" experiment like this, there is a lot to consider.}} Other factors also affect our sense of the temperature of an object, for example, see the video: [https://www.youtube.com/watch?v=vqDbMEdLiCs Micconceptions About Temperature] There are further limitations to our ability to judge temperature. For example, we can be hurt be very hot or very cold temperatures - we do not want to thrust our hand into a fire to try and judge how hot it is!... similarly, we do not want to leave our hand exposed in the middle of Antartica to check how cold it is, it is advisable to stay covered up! Also, we cannot touch everything, or sometimes even get close, to make a judgement of the objects temperature - this might range from wanting to know the temperature of the lava in an inaccessible caldera (the big mountain bowl that can be formed as part of a volcano) to wanting to know the temperature of a star that is thousands of light years away. So how do we try and overcome these limitations? We use measuring instruments called [[wikipedia:thermometer|thermometers]]. The word thermometer originates from the Greek language with [[wiktionary:thermo-| thermos = hot]], [[wiktionary:meter|meter = measure]], so a thermometer is a device "to measure how hot something is". As well as a [[wikipedia:Vacuum_flask|thermos flask]], there are many words containing "thermos" such as [[wikipedia:thermoplastic|thermoplastics]] (plastics that can be molded using heat). Also, the name of many measuring instruments contain the word "meter" such as a [[wikipedia:voltmeter|voltmeter]] (an instrument for the electrical measurement of voltage). Note that in UK English (and Australian) the measurement of length is the "metre" (the "r" comes before the "e") which distinguishes its use from "meter" (with the "r" after the "e") meaning a measuring device. However, in US English both are spelt "meter". == Thermometers == Thermometers come in a variety of forms. There are two that might be familiar to you. A glass thermometer containing a liquid (usually an alcohol, most commonly ethanol) and an in ear thermometer (often used on babies but also on children and adults to determine their core body temperature). It used to be far more common for a glass thermometer to contain mercury. However, mercury is a toxic substance and if you have any mercury thermometers at school, you would be advised to replace them with alcohol thermometers, digital thermometers or even an infrared thermometer - if you can, you might want some of each as they are each most useful in different situations. Why are they useful in different situations?... well, how are we going to measure the temperature of something... let's consider a hot cup of tea and an alcohol thermometer. How would you use the thermometer to measure the temperature?... would you quickly dip it in the tea and then remove it, looking at the termperature shown on the gauge? You likely have a sense that this would not work. Why? Let's go back to the example of putting our hands into a bowl of water. If the water feels slightly warm (or cold) and we leave our hands in there, after a while the water will feel "normal". Our hands will be the same temperature as the water, and so we do not "feel" the temperature of the water - with the way we sense temperature it is not quite that simple but from this experience you get the idea. We need to leave the thermometer in the tea long enough for it to reach the same temperature as the tea - we refer to this as reaching '''thermal equilibrium'''. Before looking more closely at how thermometers work. We'll consider how we can even have a consistent definition of temperature, because the concept of thermal equilibrium is central to this definition. == Definition of Temperature (Thermal Equilibrium and the Zeroth Law of Thermodynamics) == So lets say we have a bottle of water. It is said to be in thermal equilibrium with itself if there is no net (overall) flow of heat from one part of the bottle to another. For example, if you were heating the bottle at the bottom, so more heat was flowing from the bottom of the bottle to the top, than vice versa, then the bottle would not be in "thermal equilibrium". Equally we could say the bottle is in thermal equilibrium with itself if it has one uniform temperature. Now imagine we have a bottle of water in a room which is warmer than the air in the room. For this discussion it is important that it is a bottle and not, for example, a bowl. When we are discussing thermal equilibrium we are discussing the exchange of heat between "systems" (the two systems here being the bottle and the air). If we had a bowl of water, some of the water could evaporate (water moleculres could leave the water and go into the air) or if the bowl was very cold, water might condense from the air into the bowl (water melecules in the air could clump together and form droplets in the bowl). This would be exchanging matter, not just heat. So our bottle and air exchange heat. As the bottle is at a higher temperature more heat will flow from the bottle to the air than from the air to the bottle. So the temperature of the air will rise very slightly (the room is big) and the temperature of the bottle will fall. At some point they will be exchanging the same amount of heat. At this point they are in thermal equilibrium and we say they are the same temperature. Now, the fact that this is not quite enough to define temperature is a subtle point. The Law that is associated with the extra, slightly more complicated requirement, is called the Zeroth Law of Thermodynamics (remember thermo = heat and dynamics = motion... so thermodynamics = the motion of heat). It is called the Zeroth Law because they had already named the First, Second etc. Laws and only then realised they were missing something... and had to go back and add a Zeroth Law... that is a clear indication that it is not obvious that we need it! So lets say we have two bottles of water, Bottle A and Bottle B. They are some distance apart. Bottle A and Bottle B both reach thermal equilibrium with C, the air in the room. So each of the bottles is at the same temperature as the room. For temperature to have a consistent meaning, if we put the bottles together, we would expect them to be in thermal equilibrium with each other i.e. the heat going from bottle A to B would be the same as the heat going from bottle B to A. There is no net (overall) flow of heat from one bottle to the other. So, the zeroth Law is: <blockquote>If A is in thermal equilibrium with C, and B is in thermal equilibrium with C, then A and B are in thermal equilibrium.</blockquote> Another way of saying this is: <blockquote>If A is the same temperature as C, and B is the same temperature as C, then A and B are the same temperature.</blockquote> To see how this is important in relation to using a thermometer. Imagine that C is a thermometer. If we use C to measure the temperature of the water in bottle A, and get a reading of "20" (on some scale). Then we use the thermometer to measure the water in bottle B and we also get a reading of "20" then, to be a useful measure, we would want that to mean that A and B are in the same "state", that they have the same temperature, if we brought them together they would be in thermal equilibrium (no net flow of heat). So the termperature of an object defines something about the state of that object. For the teacher, or interested students: The definition of thermal equilibrium, along with the Zeroth Law, defines temperature mathematically as an equivalence relation - thermal equilibrium is reflexive and symmetric, the Zeroth Law adds the property of temperature being transitive, to complete the requirements of an equivalence relation. Unfortunately the statement in the Study Design fails to suitably describe the Zeroth Law (see the end of this page for a cpoy of the dot point) - I would suggest the Study Design drop the Zeroth Law and just focus on thermal equilibrium, or correct the dot point. == How Thermometers Work == Many thermometers work by being put in thermal equilibrium with what they are measuring. There are also other, equivalent ways to measure temperature. For example we'll discuss how the infrared thermometer works in the climate section. Here we'll concentrate on thermometers that use thermal equilibrium, so this is thermometers like the glass thermometers that might contain mercury or alcohol, or the digital thermometers which have a probe which you put into the object similar to a glass thermometer or put in contact with the object, like an in-ear thermometer. An alcohol thermometer works on the premise that the volume of the alcohol changes with termperature. When it is warmer, it takes up more space, when it is colder, it takes up less space. So a very small amount of alcohol is enclosed in a glass tube. When the temperature rises the volume of the alcohol increases and so the level of the alcohol rises up the tube as it fills more of the tube. We can then put markings on the tube to compare readings from one time to another or one object to another. We can add numbers to the scale to make it easy to say where on the scale the alcohol has reached. We can then use these numbers as the "temperature" of an the object we are measuring i.e. the bowl of water in which we have immersed the thermometer. But we would like to be able to compare the reading on one thermometer with the reading of another thermometer. We need an agreed scale so we can "calibrate" all thermometers - when one thermometer reads "10" it means the same thing as "10" on a different thermometer. We need an agreed temperature scale. == Temperature Scales == To provide a consistent measure of something's temperature we can assign an agreed number to a particular temperature. In general for things that are hotter, we assign a higher number. Something that is colder, has a lower number. Historically, people have assigned numbers in different ways. The Celsius scale is one such scale. === Celsius Scale === On the Celsius scale the temperature at which water freezes is labelled 0 (read as "zero degrees Celsius" or "zero degrees C", for short) and the temperature at which water boils is 100. To indicate that we are using the Celsius scale, we use the symbol "°C" which can be read as "degree Celsius". So the melting point of water is {{nowrap|0 °C}} ("zero degrees Celsius" or "zero degrees C", for short). You are quite likely familiar with the Celsius scale. It is the scale we use for the weather in Australia - from a cold winter's day on which the temperature may be in single digits, just 1 or 2°C (or even below zero, in some places) to the height of summer where it may reach temperatures over 40°C. However, the VCE Physics course (and hence this book) will usually use the units defined as part of the "International System of Units" (otherwise known as SI units, where SI is short for "Système International d'Unités"). Throughout this book, as we discuss physical quantities such as temperature, time, length and mass we will introduce the relevant SI units. The SI is managed by the "Bureau International des Poids et Mesures" (BIPM) which, in English, means the International Bureau of Weights and Measures. The BIPM has its headquarters in France. This is why the BIPM and its associated work (like SI) have french names. See [[VCE_Physics/Appendices/Appendix_A|Appendix A : SI Units]] for more details on SI and the BIPM. The SI unit for temperature is the "kelvin" (the name starts with a lowercase letter) and the symbol for the unit is "K" (an uppercase letter). Using the correct names and symbols for units shows care, as well as an understanding of their history and use. So, correctly referring to the "kelvin" scale (starting the name with "k", and not "K") is important, even though it does not change what you are saying. Also, if you want to write zero kelvin and you write "{{nowrap|0 k}}" when you should write "{{nowrap|0 K}}" you could cause misunderstanding and confusion. When using units "k" is short for "kilo" indicating "thousands" of something - as in "km" (kilometres) meaning {{nowrap|1000 m}}. Again, you can see [[VCE_Physics/Appendices/Appendix_A|Appendix A : SI Units]] for more information about the conventions on the use of upper and lowercase letters in the names of, and symbols for, units - as well as other information, such as the use of letters such as "k" to mean some multiple of the unit. === Kelvin Scale === The SI unit of temperature is the kelvin, symbol K. The melting point of water is 273.16K. === Other Temperature Scales === There have been a number of temperature scales used in the past. However, currently, the [[wikipedia:Fahrenheit|Fahrenheit scale]] is the only scale in common use other than the Kelvin and degree Celsius scales. == Relevant dot points from the [https://www.vcaa.vic.edu.au/Documents/vce/physics/PhysicsSD-2016.pdf#PhysicsSD-2016.indd%3A.7438 Study Design] == * Convert temperature between degrees Celsius and Kelvin. * Describe the Zeroth Law of Thermodynamics as two bodies in contact with each other coming to a thermal equilibrium. * Describe temperature with reference to the average kinetic energy of the atoms and molecules within a system. {{BookCat}} jp5toc2vbtb1k0n8y3plbmq1mfw5y4l Mirad Grammar/Why Mirad? 0 417864 4671989 4671635 2026-09-23T18:23:50Z Tyoyafud 6233 /* Conclusion */ 4671989 wikitext text/x-wiki == Vocabulary Built on Native Roots == <noinclude>{{status|100%}}</noinclude> : In English, we have many words like ''ichthyology'', which baffle younger speakers of the language, because they are borrowed from a foreign language, in this case, classical Greek. This word, which could just as easily and more rationally be the Anglicized ''fishlore'', means the science of fish. If a word in English relates to fish, why is ''fish'' not a part of the word? Even for modern day Greeks to understand the word '''ιχθυολογία (ichthyologia)''', they have to know the ancient root '''ιχθύς (ichthys)''' for ''fish'', which has long been supplanted by the current word everyone uses, '''ψάρι (psari)'''. What I'm saying is that the vocabulary of English, as is the case in many other natural languages, is a hodgepodge of borrowings, irregular spellings, and words cobbled from obscure roots that have little recognizability for the average speaker. : While English is a melting pot of words, there are some languages that do less borrowing and less non-discriminate formation of words that do not associate with one another through some root or pattern. Icelandic, for example, does not borrow very much from other languages and its words are formed using roots familiar to speakers of that language. The Icelandic word for ''library'' is '''bokasafn''', which literally, is ''book collection ( = saving)''. Any child in that language knows what the word means immediately, because it is composed of root words that are obvious. The simple English word ''library'' has nothing to do with the English word ''book'', just as ''cerebral'' has nothing to do with the word ''brain''. : Arabic, by contrast, is a language that has a system of word-building based on a rational association of consonants and vowel patterns, such that most words relating to books and writing contain the three consonants '''k-t-b'''. Over the centuries, the system has been polluted with irregularities, but at least the consciousness of associations of words based on a root pattern is there and is still used today to coin new words. : In Turkish, the bulk of words having to do with ''knowledge'' contain the native root '''bil-''' (''know''). Because of this, most of these words will be grouped on the same pages in a dictionary. For example: '''bildik''' ''known'', '''bildirim''' ''announcement'', '''bilecen''' ''know-it-all'', '''bilgi''' ''knowledge'', '''bilgili''' ''knowledgeable'', '''bilgin''' ''scholar'', etc. A word such as '''unknowability''' inevitably contains the root '''bil''' and can be learned fairly easily by a young student of the language. : Mirad has a vocabulary-building system with approximately 500 morphemes (word atoms or vocabulary building blocks) that are used to form derived words in the same sense family in accordance with a set of word-building rules. Words that are related semantically will share the same bulk of letters. (This type of language is called [[wikt:oligosynthetic|oligosynthetic]]. For example, '''iva''' (''happy''), '''ivla''' (''glad''), and '''ivra''' (''delighted'') share the root morpheme '''iv-''' and differ only in one letter. The opposite of happy is derived by switching the vowel in the root morpheme from '''i''' to the negative counterpart '''u''', such that '''uva''' means ''sad''. Similarly, '''uvla''' (''woeful'') and '''uvra''' (''tragic'') are opposite counterparts to the extended '''iv-''' words. : In Mirad, every letter of a word has some semantic or grammatical function. All words are part of a system. If you know the word for ''to lengthen'', then you automatically know the word for ''to shorten''. The rules for deriving new words from existing words are consistent across the language. In Mirad, there is no such thing as irregular conjugation of verbs as in English ''write, wrote, written''. Nouns are pluralized in one way only across the board, unlike the multiple, unpredictable ways German and Arabic words are pluralized. Prepositions have one meaning, as contrasted with the multiple, inscrutable meanings of Russian or Latin prepositions. : Words in Mirad are pronounced as they are written, with no exceptions. Only Roman letters are used in the alphabet, and there are no pesky diacritics (accents). Word stress is regular. : What if we took this root association to the maximum degree and ensured that all words in a language were constructed on logical, associational, and regular principles with roots that are obvious to the learner? That would be the way Mirad does it. == Deriving Opposites by Vowel-switching == : A very simple principle in Mirad is that a good portion of the vocabulary can be guessed by the learner without looking up words in the dictionary. All descriptive adjectives can be changed to their opposite with a simple change of vowel. For example, if you know '''fia''' (''good''), then you automatically know '''fua''' (''bad''). This is possible by knowing the rule of contrastive vowels: '''i''' is a positive vowel and contrasts with '''u''', a negative vowel. Similarly, '''a''' contrasts with '''o''', so that the opposite of '''aza''' (''strong'') is--you guessed it--'''oza''' (''weak''). In fact, if you know that '''e''' is an intermediate vowel, then you understand that '''eza''' means ''moderate''. These simple principles of word-building mean that students of the language can cut down on their learning time by at least 50%. == Using Consonants and Vowels to Vary Domains == : Another principle is that the beginning and/or closing consonants of a word in Mirad give you clues as to the meaning. All sentient creatures have the final stem consonant '''t''', such that '''dat''' (''friend''), '''tot''' (''god''), '''at''' (''I''), '''tuzut''' (''artist''), and '''pit''' (''fish'') all refer to sentient creatures. The root stems of all words having to do with communication, begin with the letter '''d''', eg. '''der''' (''to say''), '''dud''' (''answer''), '''dyes''' (''book''), '''dal''' (''speech''), etc. The internal vowels of root stems very often indicate concepts such as ''sky'', ''land'', ''sea'' or ''up'' vs. ''down'', or ''zeroth'', ''first'', ''second'', or ''toward the speaker'' vs. ''away from the speaker'', and on and on. == Scalarization == : In English, as in many other languages, there was probably some attempt to associate words in this way. Take for example, the series ''sing'', ''sang'', ''sung'', ''song'', ''singer'', ''songstress'' or ''drip'', ''drop'', ''droop'', ''dribble''. More often than not, there is very little association among English words that are obviously distinguished by the one feature, '''''size''''', eg. ''mountain'', ''hill'', ''knob'', ''bump'', ''pimple''. In Mirad, these are all distinguished regularly by a scalarizing enumerative vowel. The Mirad days of the week are not a series of Roman- or Teutonic-related concepts, '''Moon-day''', '''Tiw&apos;s-day''', '''Woden&apos;s-day''', '''Thor&apos;s-day''', '''Freya&apos;s-day''', '''Saturn-day''', and '''Sun-day''', all of which are a matter of memorization by the child or student of the language. Mirad days of the week consist rather of a series of words numerically arranged "day-one, day-two, day-three, etc." This is actually the approach taken by quite a few natural languages like Portuguese. : The months, too, ought to be learned in 10 seconds, by knowing that an internal vowel of the root expresses the numerical order of the months. Again, there are some natural languages that do this. By knowing that '''jiab''' means ''month one, January'', then by knowing how to count in the language, the word for September can be readily deduced as '''ji<u>yu</u>b''' (''month <u>nine</u>'', '''yu''' being the number for ''9''). == Mnemonics == Words in the language can be mnemonically associated to body terms by changing the initial domain consonant accordingly, so, while '''teb''' means ''head'', '''xeb''' in the '''x''' or ''work/action domain'' is ''boss'', '''deb''' in the social/political domain is ''leader'', etc. : The following chart shows in this mnemonic echoing in action, where the letters before '''-ub''' suggest the domain: <div style="font-size:smaller;"> ::{| class="wikitable" style="background: lightyellow;{{Text default color}};" |+ Mnemonic Echoing |- ! DOMAIN !! WORD |- | human (body) || '''tub'''....''arm'' |- | work/action || '''xub'''....''subsidiary, branch'' |- | plants || '''fub'''....''limb, branch, bough(of a tree)'' |- | fish || '''pitub'''....''fin'' |- | birds || '''patub'''....''wing'' |- | animal || '''potub'''....''paw'' |- | land-sea animal || '''peitub'''....''flipper'' |- | shoe || '''tyoyafub'''....''(scuba-diving) flipper'' |- | vegetation || '''vub'''....''shoot, sprig, twig'' |- | society/politics || '''dub'''....''minister, department head'' |- | building || '''tomub'''....''wing (of a building)'' |- | land || '''mub'''....''promontory'' |- | river || '''mifub'''....''oar'' |- | things || '''sub'''....''ramification, offshoot'' |- | table || '''semub'''....''flap (of a table)'' |- | rotating things || '''zyufub'''....''rudder'' |- | flat || '''zyifub'''....''paddle'' |- | round || '''zyub'''....''lobe'' |} </div> == Conclusion == Mirad uses many different techniques to short-cut the difficulty of learning new words or recognizing terms. The vowels, consonants, mnemonics, scalarization, taxonomy and many other methods are used to make the vocabulary as rational and intuitive as possible. Unlike in most natural languages, words like ''snow'', ''sleet'', and ''ice'' are going to have sounds in common in Mirad. <noinclude> {{Chapter navigation with TOC|Introduction|Alphabet}}</noinclude> i9stbypo79velumhx19nfpbyn3pnmyj Issues in Interdisciplinarity 2020-21/The power of Christianity in modern society 0 421762 4672084 3792989 2026-09-24T09:02:58Z R. Henrik Nilsson 3395618 Refrence > References 4672084 wikitext text/x-wiki == Introduction == Most of the countries with Christian origins have separated their [[:w:Secularism|secular]] government from the power of the institutionalized religion, contending a neutral opinion about the individual’ religious beliefs. Yet, the contemporary [[:w:Catholic Church|Catholic Church]], as a representative of the body of believers throughout the world, holds a certain power especially in the field of moral consciousness, human rights and ethical behaviour. [[:w:Pope|The Popes]]’ [[:w:Encyclical|encyclical]] letters of the last decades address the themes of birth, death, life, marriage, equality and the environment. These themes have had direct or indirect impacts on various disciplines which are based on ethical discussions, especially [[:w:Gender studies|gender studies]], [[:w:Medicine|medicine]] and [[:w:Ecology|ecology]]. [[:w:Pope Francis|Pope Francis]] is slowly abandoning traditional [[:w:Anthropocentrism|anthropocentric]] views and [[:w:Reductionism|reductionist]] approaches for the discussion of problems, allowing a form of liberal [[:w:Theology|theology]] to better interact with interdisciplinary studies.<ref>Van Tine, Robin. "Reflections, Analysis, and Significance for Human Ecology of Pope Francis’s Encyclical Letter Laudato Si’: On Care for Our Common Home," Human Ecology Review 23, no. 1 2017, p. 158. [Accessed December 13, 2020] Available on-line: https://www.jstor.org/stable/26367968.</ref> == Bioethics in Medicine == Bioethics is an area of study dealing with the ethical connection of particular biological and medical practices, remedies, and technologies.<ref>Tiegreen T. What is bioethics? [Internet]. Practicalbioethics.org. [cited 2020 Dec 12]. Available from: https://practicalbioethics.org/what-is-bioethics</ref> With the advances in the knowledge of the human biological system and how it thrives, longevity is expanded nowadays. This implies that people now live longer in the midst of fatal illnesses, but the controversy stands as to how to respond to such possibilities; this leads to the emergence of bioethics as a discipline.<ref>Messer, Neil. Flourishing: Health, Disease, and Bioethics in Theological Perspective. Grand Rapids, Michigan: William B. Eerdmans Publishing Company, 2013.</ref> However, one factor that inherently affects this response is the fundamental belief of [[:w:Judeo-Christian|Judeo-Christianity]]<ref>Kilner, John Frederic, C. Christopher Hook, and Diane B. Uustal, eds. Cutting-Edge Bioethics: A Christian Exploration of Technologies and Trends. A Horizon in bioethics series book. Grand Rapids, MI: W.B. Eerdmans, 2002</ref>, which prohibits any act that will lead to actively or passively ending one’s life. Such activities are considered sinful and against God’s will.<ref>Igboin BO. Spirituality and medical practice: a Christian perspective. Indian J Med Ethics. 2015;12(4):199–206.</ref> Therefore, bioethics-related issues such as [[:w:Judeo-Christian|euthanasia]], [[:w:Assisted suicide|physician-assisted suicide]], [[:w:Right to die|right-to-die]], and [[:w:Abortion|abortion]] defy Christian principles, which plays a pivotal role in shaping people’s preference and ethical beliefs or even political perspectives in modern society<ref>Hinkley AE. Christianity, the culture wars, and bioethics: Current debates and controversies in the Christian approach to bioethics. Christ Bioeth. 2006;12(3):229–35.</ref> However, the extent of Christian influence on bioethics depends on the degree of religious power in politics.<ref>Smith, Janet E, and Christopher Robert Kaczor. Life Issues, Medical Choices: Questions and Answers for Catholics, 2016.</ref> For instance, it is noticeable that in the European political system, where state and church are independent, liberal opinions and actions are permitted.<ref>Tao, Julia Lai Po-Wah. Cross-Cultural Perspectives on the (I'm)Possibility of Global Bioethics. Dordrecht; London: Springer, 2011.</ref> Specifically, The Netherlands and Belgium made euthanasia and abortion legal since the state does not meddle with citizens’ personal religious convictions on these matters <ref>Chattopadhyay S, De Vries R. Bioethical concerns are global, bioethics is Western. Eubios J Asian Int Bioeth. 2008;18(4):106–9.</ref>This is not the case for the Caribbean, where they tend to be much more conservative regarding morality, being deeply rooted in Christian views. Unlike European countries, Caribbean laws regarding bioethics, particularly in Jamaica, is often strongly influenced by religious inclinations, affecting political decision making toward bioethics.<ref>Olweny C. Bioethics in developing countries: ethics of scarcity and sacrifice. J Med Ethics. 1994;20(3):169–74.</ref> It can be surmised that Christianity shapes people’s beliefs and preferences on bioethics related to abortion, euthanasia, and physician-assisted suicide. However, the impact of Christianity on bioethics in the real world depends on the political standpoint of [[:w:Liberalism|liberalism]] or [[:w:Conservatism|conservatism]]. == Ecology == [[:w:Pope Francis|Pope Francis]]’ [[:w:Encyclical|encyclical]] letter [[:w:Laudato si'|Laudato si]], (2015), comes after decades of environmental discussions within the Church.<ref>“Laudato si”, from Wikipedia, [Accessed on November 27, 2020.] Available on-line: [[:w:Laudato si']]; Van Tine, Robin. "Reflections, Analysis, and Significance for Human Ecology of Pope Francis’s Encyclical Letter Laudato Si’: On Care for Our Common Home," Human Ecology Review 23, no. 1 2017: 141-78. [Accessed December 13, 2020] Available on-line: https://www.jstor.org/stable/26367968.</ref> If [[:w:Pope John Paul II|John Paul II]] inaugurated a debate about environmental ethics in which God’s Creation was placed at the centre of attention, [[:w:Pope Benedict XVI|Benedict XVI]] asserted that there is a theological kinship between the love for God and that for the environment.<ref>Ancilla Dent, ed., Ecology and Faith; the Writings of John Paul II, Berkhamsted 1997; Benedict XVI, The Garden of God: Toward a Human Ecology, Washington 2014; Anne K. Mosher, Heather Whittington, Bibliography about the Catholic Church on Ecological Degradation, [Accessed on November 27, 2020.] Available on-line: http://www.inee.mu.edu/CatholicChurchonEnvironmentalDegradation.htm</ref> According to Pope Francis, since “ecology studies the relationship between living organisms and the environment in which they develop,” its mechanism should become an interdisciplinary model for the care of the planet and its inhabitants.<ref>Encyclical Letter “Laudato si” of the Holy Father Francis, 138, [Accessed on December 12, 2020.] Available on-line: http://www.vatican.va/content/francesco/en/encyclicals/documents/papa-francesco_20150524_enciclica-laudato-si.html</ref> With Pope Francis environmental discussion takes a more global and holistic stance. In his letter, inspired by [[:w:Francis of Assisi|Francis of Assisi]], the Pope perceives an interconnectedness among the theological, ecological, economic, political, and social crisis. “It follows,” the Pope writes “that the fragmentation of knowledge and the isolation of bits of information can actually become a form of ignorance unless they are integrated into a broader vision of reality.”<ref>Encyclical Letter “Laudato si” of the Holy Father Francis, 138, [Accessed on December 12, 2020.] Available on-line: http://www.vatican.va/content/francesco/en/encyclicals/documents/papa-francesco_20150524_enciclica-laudato-si.html</ref> In a speech, released in 2019, Francis argued about various interrelated topics: first, how the profit of maximizations of corporations lead to the exploitation of the planet and consequently to models of exclusion; second, how climate change is destructive for the planet and impacts especially the poor; third, how pollution affects health conditions and condemns future generations to pay; finally, how protecting nature restores the dignity of the excluded.<ref>E&E news, Pope might make environmental destruction a sin, [Accessed on November 27, 2020.] Available on-line: https://www.eenews.net/stories/1061604543</ref> In Laudato si, there is a constant interaction between natural and social systems leading to the [[:w:Emergence|emergence]] of a discipline that the pope calls social or integral ecology.<ref>Encyclical Letter “Laudato si” of the Holy Father Francis, [Accessed on December 12, 2020.] Available on-line: http://www.vatican.va/content/francesco/en/encyclicals/documents/papa-francesco_20150524_enciclica-laudato-si.html</ref> With this, the pope has replaced the original [[:w:Anthropocentrism|anthropocentrism]] with a more complex point of view. The Pope’s Letter perceives the Creation as a [[:w:Complex system|complex system]] which cannot be studied with a [[:w:Reductionism|reductionist]] anthropocentric approach, but only with a new interdisciplinary [[:w:Paradigm|paradigm]] which is already expanding the interreligious contemporary environmental debate.<ref>Difendere l’ambiente per salvare l’umanità. Dall’enciclica Laudato si’ un nuovo paradigma, in Ecoscienza, 4, 2015, [Accessed on December 12, 2020.] Available on-line: https://www.arpae.it/cms3/documenti/_cerca_doc/ecoscienza/ecoscienza2015_4/Enciclica_ES4_15.pdf</ref> == Gender Studies == Since the emergence of [[:w:Christianity|Christianity]], it has wielded power by being an important instance of structuration in different countries. In the 20th and 21st centuries, the awareness within our society that some dominant ideas about gender perspectives could be disputed helped the emergence of certain debates. With these debates came the creation of the notion of [[:w:Gender studies|gender studies]] <ref>Griffin, G. (2017). A dictionary of gender studies (1st ed.). Oxford, New Zealand: Oxford University Press.</ref>. From that moment, people realized the tremendous power Christianity exercises on gender issues <ref>Favier, A. (n.d.). La réception Catholique des études de genre. Retrieved December 14, 2020, from Archives-ouvertes.fr website: https://halshs.archives-ouvertes.fr/halshs-00765786/document</ref>. The example of the gay community demonstrates how Christianity influences gender studies. In fact, the Church is historically opposed to emancipation currents from the [[:w:LGBT|LGBT]] community. Furthermore, Christianity has always been affiliated with the conservative right representing a considerable part of the population, especially in Europe where right-wing governments thrive. This explains why Christianity plays a major role in shaping public opinion on gender issues. One debate currently opposing the Church with the [[:w:LGBT|LGBT]] community is same-sex civil union <ref>What does Christianity say about same-sex marriages? (n.d.). BBC. Retrieved from https://www.bbc.co.uk/bitesize/guides/zqcrpbk/revision/7</ref>. The opinion and discourse of Church representatives haven't changed in decades on this question. Popes have always been against same-sex marriages and agreed with the Church teaching that holds homosexual orientation as 'objectively disordered' <ref>Horowitz, J. (2020, October 21). In a shift for church, pope Francis voices support for same-sex civil unions. The New York Times. Retrieved from https://www.nytimes.com/2020/10/21/world/europe/pope-francis-same-sex-civil-unions.html</ref>. However, [[:w:Pope Francis|Pope Francis]] doesn't follow the path of his predecessors and creates division within the Church <ref>Walsh, J. (2020, October 21). Pope Francis endorses civil unions for same-sex couples. Forbes Magazine. Retrieved from https://www.forbes.com/sites/joewalsh/2020/10/21/pope-francis-endorses-civil-unions-for-same-sex-couples/</ref>. He publicly expressed his support for same-sex civil unions in a documentary from October 2020 <ref>Francesco. (n.d.). Retrieved December 14, 2020, from Francescofilm.com website: https://www.francescofilm.com/</ref>. Although the leader of Christianity changed his tone, the power of the Church on this gender debate stays strong because Francis' opposition remains almost absolute. In the actual society in which the voice of minorities is increasingly heard, it is very interesting to study how Christianity remains centre to gender debates. Many communities ask for the Church's opinion to change, and despite progressive acts from the pope, his word isn't enough to make significant changes. This shows how traditional conservatism can give Christianity such an impacting power. == Conclusion == In synthesis, the most recent position of the Pope is toward a restoration of human dignity based on sustainability which is both ecological and social. Thus, the power of [[:w:Christianity|Christianity]] in the contemporary world can be especially detected in three disciplines: [[:w:Gender studies|gender studies]], [[:w:Medicine|medicine]] and [[:w:Ecology|ecology]]. Tensions within and among these disciplines are created by progressive and conservative approaches in different Christian schools. There are several levels of influence and response which are generated from the papal encyclical letters and attacked by Christian communities around the world. While Pope Francis assertions have revolutionized Christian thought opening new [[:w:Paradigm|paradigms]], conservative communities, often more strongly related to local economies and politics, resist the Pope’s methods and approaches reasserting the value of orthodox views.<ref>Ross Douthat, “A Crisis of Conservative Catholicism,” in First Things, January 2016, [Accessed on December 12, 2020.] Available on-line: https://www.firstthings.com/article/2016/01/a-crisis-of-conservative-catholicism</ref> Such tensions might be risky for the Catholic Church inner divisions, yet [[:w:Pope Francis|Pope Francis’]] attention for human rights, liberal ethics and integral ecology continue to polarize the world with an unprecedented power especially among the young generations. == References == {{BookCat}} imw1dkxiyhewms732wy3kjzd32xgzi6 MapleStory/Magician Guide/Builds 0 428318 4672078 4508566 2026-09-24T08:49:39Z R. Henrik Nilsson 3395618 amplication > amplification 4672078 wikitext text/x-wiki {|style = {{MapleStory/tablestyle}} {{MapleStory/TOC}} {{MapleStory/TOC/Jobs}} {{MapleStory/TOC/Jobs/sub|Magician}} |} =Builds= == Stat Build == === Cookie Cutter Build === The path of the Mage starts at the Character Creation screen. The only parts you can customize with any real game-play importance are the four stats: STR, DEX, INT, and LUK. STR and DEX should be as low as possible, prefferably a 4 in each, though up to dual 5 or 6/4 is acceptable. INT and LUK are the main stats for the Mage, and as long as STR and DEX is 4/4, it doesn't matter what INT and LUK are. INT is the Mage's main damage stat, as it determines the character's Magic Attack. Also, it increases the Magic Defense of the character as well. LUK is only used for the Mage as a requirement to wear most Mage-specific equipment, with the usual requirement of LUK being 3 points above the equipment's level. Level 10 -> 13 LUK Level 33 -> 36 LUK Level 50 -> 53 LUK And so on. If LUK is being kept at a desired level, all points should be placed in INT, as the other stats do not help Magicians AT ALL! === No LuK Build === •Note from a player: For this build, it is recommended that you try and have this: STR: 4 DEX: 4 INT: 12/13 LUK: 4/5 However impossible looking, yes, this is possible, the 4 4 5 roll notoriously rare, and the 4 4 4 roll even rarer still. Don't settle for anything higher than a 5 5 5 or equivalent. The build, it you may notice, may remind you of the "Fabled No Dex" build. This is however, only a certain type of LuK Build. Another LUK build is when you up your LUK till a certain point, and continue with only INT after that level. The reccomended Levels (asisde for getting perfect beginning rolls) Level 8 Level 13 Level 18 Level 23 Level 28 Level 33 Note: If you reach this point and you're still adding LUK, then I suggest you keep going. I personally stopped at 18, the 2nd equipment with a + on it I believe. Basicaly, the only reason I stopped at this level, was because I took a liking to the 2 part equipment :P == First Job Skill Build== The following skill build is recommended from the Magician's start, level by level. 8: Energy Bolt (1) 9: 3x Improving MP Recovery (3) 10: 2x Improving MP Recovery (5), Improving Max MP Increase (1) 11: 3x Improving Max MP Increase (4) 12: 3x Improving Max MP Increase (7) 13: 3x Improving Max MP Increase (10 MAXED) 14: 3x Improving MP Recovery (8) 15: 3x Improving MP Recovery (11) 16: 3x Improving MP Recovery (14) 17: 2x Improving MP Recovery (16 MAXED), Magic Claw (1) 18-23: 3x Magic Claw 24: 1x Magic Claw (MAXED); Magic Guard (2) 25-30: Magic Guard (MAXED, as if it was a surprise) With this build, Improving MP Recovery can be replaced by Magic Claw, if you can afford the potion cost. Leveling will be painful drudgery otherwise. Regal Star/MajesticMystic's alternative non-perfectionist build: *8: Energy Bolt (1) *9-12: Magic Claw (10) *12-13: Improved MP Recovery (5) *14-17: Improved MP Increase (10) *17-20: Improved MP Recovery (11) [MAX] *21-23: Magic Claw (9) *24-30: Magic Claw (1) [MAX], Magic Guard (20) [MAX] As you can see, this build does not max Improved MP Increase ASAP, so you will lose some max MP in the long run. However, let's face it... 1HKOing slimes and earning enough money for potions and equipment beats 1HKOing snails and conserving MP any day, and this build allows you to do it sooner. The less max MP is less noticeable too, as it will make you miss out on, oh, about 30-50 MaxMP, and that's nothing when you're working with 2500s at level 50 or so. Note from a player: I recommend not to use the non-perfectionist build, as you may regret it terribly and have to start over. Maxing 'Max MP Increase' is a must, and you must do it as soon as possible. In the end, after level 30, you will have the exact same skill levels, only one mage will have much more MP than the other one. - Mach1Sloth, Scania Magician/SlickSinner (Sin) Second Suggestion: ~And a whole lot less offensive to level up. It is better to level up Max MP while you keep putting 1 point on claw. Usually its best to put up to 6 or 7 points in Regen then work on Max MP with magic Claw otherwise leveling up will be slow. ===Common Myths=== '''Myth:''' Energy Bolt is Better than Magic Claw Energy bolt attacks only once, while Magic Claw attacks twice. Magic Claw can also go through walls, while Energy Bolt can't. Energy Bolt is slower each cast compared to Magic Claw. There are reasons for those that choose the Magic Claw path, and the Energy Bolt path. Magic claw is stronger, but takes more mp. Energy Bolt is weaker, but takes up less mp to use. Magic claw is recommended over energy bolt. ~Just to note, Energy Bolt now has 80 base damage. Claw has 40 (x2) so Energy Bolt is no longer technically weaker (though Bolt is still slow, and gets blocked by ramps etc...) :Incorrect, Energy Bolt still has a 55 max base power. -[[User:EMP Demon|EMP Demon]] ~Also with magic bolt you can knock back bigger monsters later at an earlier level giving you a slight advantage since you wont be getting hit, Claw deals more damage total but not per hit wise, so depending on how far you are planning on going could determine which is better. :There are only a few monsters below level 40 with a KB value of greater than 1 (Bubbling(30), Jr Necki(30), Fairy (300), Jr Wraith(50), Star Pixie (100), Jr Boogie (500), Jr Pepe (1000), Zombie Lupin (100), King Slime (300)). Considering that by level 40 you will have another attack skill to replace use of your 1st job attack skill (and you shouldn't really hunt anything above level 30 before you're level 40 anyways), as well as the fact that you should be able to deal enough damage with claw to KB anyways for most of them (Fairy and Boogie doesn't count -_-"), Energy's knock back aspect is kind of moot. '''Myth:''' Magic Armor is better than Magic Guard Many people make this mistake. At lower levels, when most people's MP regeneration rate is low, and when they have low maxMP, magic guard tend to drain their MP very quickly. However, all experienced players will know that magic guard is very helpful when one has reached a certain level. Magic Guard is preferred, because of all the higher level monsters that are out there. While Magic Guard can protect you to up to 80% damage from magic attack or weapon attack, Magic Armor cannot. All Magic Armor does is give you a certain amount of defense against weapon attack. Overall, Magic Guard is recommended. ~Just a thought: Although Magic Guard diverts up to 80% of taken damage to your MP instead of HP this will cause a problem for the MP as the magician becomes levels 30-40. During this time their hp is high enough to sustain attacks but the MP guard constantly "drains" MP, making many mages turn to SP reset (1st job) or abandoning the skill completely. Be wary of how much you put into Magic Guard, and it is advisable not to max it if you believe the above situation may apply to you. (But you don't HAVE to turn it on in these circumstances that would be dumb sence mp cost x2 more than hp) ~Tip: You can disable your Magic Guard by double clicking on it's icon on the top right screen corner. I can do this in MapleSEA, not sure about the other versions though. ~On high levels you NEED magic guard to survive. There's nothing else in job 1 worth putting the points into and job two has too many things worth considering for your points. Between MP recovery, common sense and MP Eater when you get it any mage should be fine with the 30 to 40 levels. Just stick to green mushrooms and horned mushrooms until level 35, then ice mages can go 1 hit fire boars and fire can go to kitties etc... which are money monsters and all. If you really worry that much just get MP Eater second. ~Additional note: At higher levels, monsters like Crimson Barlog can kill you in one hit if you don't have magic guard on. Barlog can hit you 1k of damage and there isn't a lot of mages out there who can take 1k of damage to their HP. At later levels, magic armor will only reduce 20 damage done to you, give or take the damage. It won't save you from a Barlog attack. ~ Special Tip ~ For fire/poison mages who do not want to put any points to poison brace, you could try putting you extra points in the second job into magic armor. (You will have 11 points left after maxing Fire arrow, Meditation, MP Eater, Teleport and Slow.) Although 40 weapon defence (what M armor will add to your defence when maxed) it not much, but it is still worth putting points into compared to poison brace, which is next to useless compared to poison mist. (Note: Just a tip) :) And the special effects from initiating Magic Armor look cool. (^_^) == Second Job Skill Build== === Cleric === This is one of the best builds you can have as being a cleric who plans on making it to the third job and above. You will put 1 point into teleport, Max Heal, Max MP Eater, Max Invincible, Max Bless, then Max Teleport. You can always switch Bless, Invincible, and Teleport. You will put the last 11 points into Holy Arrow. The reason that you should NOT get Holy Arrow is because your main attack will be Heal and Shining Ray will replace Holy Arrow. * 1 Teleport * Max Heal * Max MP Eater * Max Invincible or Bless * Max Bless or Invincible * Max Teleport * 11 Holy Arrow For those who will always have a good party to level with there is this build where bless is maxed first, then heal. MP Eater and Invincible aren't raised 'til later since they only help the cleric without increasing the killing power for the rest of the party. This may cause a problem because you will be using more HP pots than the average cleric who will max Heal first. * Teleport or MP Eater 1 * MP Eater or Teleport 1 * Heal 5 * Invincible 5 * Bless 20 * Heal 30 * MP Eater 20 * Invincible 20 Heal at level 15 is still quite strong, so if you also want to be able to kill anything with your party, you will need an attack, so spending some points in Holy Arrow early can be beneficial. This may not be a good build for a player who actually plans on making it to the third job. Once you're at the third job, you will be using heal A LOT for attacking, and your Shining Ray will replace Holy Arrow. * Teleport or MP Eater 1 * MP Eater or Teleport 1 * Heal 5 * Invincible 5 * Bless 20 * Heal 15 * Holy Arrow 30 * MP Eater 20 Without a party, you will need to be able to attack. These builds are based around going either Heal or Holy Arrow as your main skill. Holy Arrow Build * Teleport or MP Eater 1 * MP Eater or Teleport 1 * Heal 1 * Holy Arrow 30 * Heal 15 * MP Eater 20 * Heal 30 (Max) * Invincible 10 The heal build is much easier and cheapest since you will never require regular healing potions, and once you get MP eater maxed, you will barely even need to use mana pots. Heal Build * Teleport or MP Eater 1 * MP Eater or Teleport 1 * Heal 30 * MP Eater 20 * Holy Arrow 30 * Invincible 10 There are 30 points left over after any of these builds to finish of some of your skills. Invincible is a very good skill to max, since it will reduce 30% of the damage taken once it is maxed. However as a cleric, you will heal any damage you take simply by healing making it almost useless at low levels. However at higher levels when enemies do 1500+ damage, while you have less than 1000, this will save you a lot of money on mana potions when you get hit with Magic Guard activated. There are many debates about whether to get Holy Arrow, Bless, or Teleport. Teleport is good since you can get around the screen much more easily, however mp cost is the only thing that decreases as you add more SP. Holy Arrow is good against enemies weak to Holy attacks, however once you get to level 70, it will be replaced by Shining Ray anyway making it useless. And its base damage is hardly higher than Magic Claw. Bless, Magic Armor is a skill which adds a certain amount to various skill rather than a percentage. This becomes less and less useful as your level increases. The choice in this skill really comes down to personal preference. Here is another contributed build: * Lvl 30- Add on 1 heal or Teleport. * Lvl 31-40- Max heal in those lvls(on every lvl only add on heal if you added heal at lvl you'll have an extra point, add on tele, you will need it) * Lvl 41- 3 Mp eater * Lvl 41-51- Max Holy Arrow * Lvl 51- Add 3 Invincible * Lvl 52- Add 2 Invincible, 1 Bless * Lvl 53-59 Max bless till lvl 19 * Lvl 60- 1 Bless * After that Max TelePort or Invincible your choice, if you want max mp eater. Essentially all builds sacrifice at least one skill since Clerics are short 19 points to max all skills. This build sacrifices 17 points in MP eater so that both holy arrow and heal can be maxed. [Note from a Cleric]: Also, maxing Holy Arrow may not be the thing to do because it not only does only a tiny fraction more than Magic Claw compared to Fire/Poison or Ice/Lightning Wizards' main attacks, but also because on your third job change, you get a skill that is much better than holy arrow, making it useless. I would recommend only putting around 10 or 11 points into Holy Arrow, if any, because of those reasons. If you want to do really good damage compared to Magic Claw, Cleric probably is not the best choice for you. =) [Comment & Opinion]: MP Eater is an extremely useful skill when you are training on undead monsters such as Zombie Lupins or Platoon Chronos. The reason is that you won't waste a lot of mesos on pots, therefore making you richer to buy good/godly scrolled items. For example, at level 50 I can train my cleric on platoons or zombie lupins and I would use no mp pots at all unless I decide to spam teleport. Also, Invincible is useful at higher levels when clerics/priest party train. Like when I partied trained at Yeti & Pepe, the damage without invincible ranged around 1000 (more or less depending on equips, but around that area). However, with invincible the damage is around 700. Which makes a difference seeing how high level priest train on things like grims. Or when you are party training at Bains or Yeti & Pepes or any other high leveled monsters. Teleport is good to max since it will help you train faster and for it to consume less mp. The distance only matters for teleporting up and down, but for teleporting left and right it makes no significant difference. Just think of it this way, if you had a friend who didn't max out teleport (130 distance) and tele with you. After about 6-7 teles, you would have been 1 tele ahead of your friend. ;Controversy between Bless and Holy Arrow Bless and Holy Arrow are pretty sucky skills for a Cleric. However, you must max out one of the skills. So the debate among Clerics is which skill sucks ''more''. Bless will prove to be useful to Warriors when maxed and even more useful for fighting bosses. Holy Arrow is the primary attack for Clerics as the 80 MATK will be increased if fought on an undead monster. It all depends on whether you want to be a solo Cleric (pick Holy Arrow) or a party Cleric (pick Bless). Holy Arrow also has longer range than Shining Ray (third job Cleric skill) which will ease the killing of Jr. Balrog, Crimson Balrog, undead Ludibrium monsters, etc. The main usage of Bless is for the +20 ACC which helps every class except Mages. '''Arguments''' (Note: these arguments are not written from a [[Wikibooks:Neutral point of view|neutral point of view]] and reflect the views of individual players.) ~Just a thought... Bless mainly adds the 20 evade. Thieves and bowmen don't need accuracy and nor do mages. So it's mostly about extra high evade which stacks nicely with the new capes. On the other hand though I found I would have gone quite mad without Holy Arrow... and seeing 1000 on Dark Stone Gollems was pretty kewl... I think practically speaking bless is much more useful but holy arrow will keep you from going mad stuck at undeads (or in parties whether you like the people or not) ~ Marl :: Why have evade when you got a cleric sitting next to you with heal? Practically speaking, the best use for Bless is the +20 accuracy, which allows low-dex warriors to replace their dex skill points with strength if they have a reliable cleric partner. Avoid saves money, but is neglagable compared to heal. Then again, Holy arrow is also considered a pretty bad skill, as in 3rd job you get Shining Ray which outdamages it and hits 6 enemies. Again, this is the argument of "Which is worse" and not "which is better".--[[User:Dragontamer|Dragontamer]] 04:33, 29 March 2006 (UTC) ~Most people do want that 20 evade tho. The accuracy is still way up there but practically speaking NOBODY but warriors needs it. Thieves have all dex and luck anyway, and mages don't benifit. And archers are all dex XD But yeah... looking at it from the cleric's POV they may need that evade to not get killed. Holy Arrow on the other hand can make for a change of pace for the long frustrating levels from 30-70... 80 before shining ray is useful and ONLY if you get it first and not holy symbol. Also it has much better range than shining ray. Yes, bless makes it much, MUCH better for warriors. But consider the cleric too. They might not always be able to find people to party and heal, or might not want to. And all in all choosing to be a cleric is not saying 'I'm everyone's slave'. :) Oh, and Holy Arrow has a base of 80 now too. It's not great, but it's much better than claw (at least on dark things). -Well, if you think about it--most Priests aren't going to be training with sins or archers, they're gonna be training with the people that get into the middle of a mob of Grims and need healing, right? So is HA really gonna help you that much when you're training with a DK at Phantom Watches? Also--Bless is like a Warrior magnet. =) === Ice/Lightning Wizard === MajesticMystic: Alright, you can decide to max either Cold Beam (commonly referred as ice) first or Thunder Bolt (commonly referred as lit or lightning) first. Ice first is recommended to most, although if you have money to burn and just want to train fast, by all means go for lit first. With regard of both choices in mind, I will label the first attack you max as your Primary Attack, and the other as Secondary Attack. Build A - Maxing two attacks in quick succession *Teleport (1) *MP Eater (1) *Primary Attack (30) [Save SP at skill level 15 until you have 11 SP to spend] *MP Eater (2) *Secondary Attack (30) [Again, save SP at skill level 15] *Meditation (20) *Teleport (19) *MP Eater (17) *Energy Bolt/Slow/Whatever (1) Build B - Maxing meditation after one attack *Teleport (1) *MP Eater (1) *Primary Attack (30) [Save SP at skill level 15 until you have 11 SP to spend at once] *MP Eater (2) *Meditation (20) *Secondary Attack (30) [Again, save SP at skill level 15] *Teleport (19) *MP Eater (17) *Energy Bolt/Slow/Whatever (1) Build C - Maxing Teleport AND Meditation after one attack *Same build as above, but max Teleport before Secondary Attack [Talon] Someone should probably explain why one should save 11SP to spend at once? [HappyViet] There are some people who feel they don't need teleport to be efficient. For those who are wondering, there are other builds that can work better in different situations. [MajesticMystic] Teleport is almost essential to a lightning wizard. When you're training at say, Lorangs (or basically any map with crowded mobs - exactly the type of maps lightning wizards should train in), they are doing a lot of damage to you, and teleport allows you get in a good spot without getting hit on the way so you can start zapping away. For those who are maxing out lightning first, I recommend this build: *Lvl. 30 - 1 MP Eater (1) *Lvl. 31 - 3 Lightning (3) *Lvl. 32 - 3 Lightning (6) *Lvl. 33 - 3 Lightning (9) *Lvl. 34 - 3 Lightning (12) *Lvl. 35 - 3 Lightning (15) *Lvl. 36 - Save *Lvl. 37 - Save *Lvl. 38 - Save or if you can't wait any longer 9 Lightning (24) *Lvl. 39 - 12 Lightning (27) or if you already added 3 Lightning (27) *Lvl. 40 - 3 Lightning (30) ---------------------------------- Now that you have maxed out your essential attack, you'll find it still weak to train efficiently off better monsters. Pehhd: the following needs to be fixed -- 3 MP Eater is a prereq for Meditation. ---------------------------------- *Lvl. 41 - 3 Meditation (3) *Lvl. 42 - 3 Meditation (6) *Lvl. 43 - 3 Meditation (9) *lvl. 44 - 3 Meditation (12) *Lvl. 45 - 3 Meditation (15) *Lvl. 46 - 3 Meditation (18) ---------------------------------- Now you'll finish maxing Med. but what do you do now? Should you teleport around, moving faster or into big groups of monsters, or recover some more MP with MP Eater??? I find that 1 Teleport is efficient enough but MP Eater recovers a little MP even when maxed. I recommend more over the other MP Eater though. But it's your character, build it the way you want to. ---------------------------------- *Lvl. 47 - 2 Meditation (20) and 1 Teleport (1) *Lvl. 48 - 3 MP Eater (4) *Lvl. 49 - 3 MP Eater (7) *Lvl. 50 - 3 MP Eater (10) *Lvl. 51 - 3 MP Eater (13) *Lvl. 52 - 3 MP Eater (16) *Lvl. 53 - 3 MP Eater (19) --------------------------------- Now that you have finished maxing MP Eater, you can go finish out Teleport or start on a new cool ice attack (but sound gets annoying) --------------------------------- *Lvl. 54 - 1 MP Eater (20) and then it's your build now!!! hope this build is for those who want Lit fast and efficient!!! See you guys later. '''Third job is now available. This is a simple 3rd job skill build guide. Enjoy.''' -------------------------------- Total Points, Lv 70-120 = 151 -------------------------------- Skills (160 points total) -------------------------------- Skill Build -------------------------------- *Lv 70 Lightning Spear 3 *Lv 71 Lightning Spear 3 *Lv 72 Lightning Spear 3 *Lv 73 Lightning Spear 3 *Lv 74 Lightning Spear 3 *Lv 75 Lightning Spear 3 *Lv 76 Lightning Spear 3 *Lv 77 Lightning Spear 3 *Lv 78 Lightning Spear 3 *Lv 79 Lightning Spear 3 *Lv 80 Spell Booster 3 *Lv 81 Spell Booster 3 *Lv 82 Spell Booster 3 *Lv 83 Spell Booster 2 Elemental Amplification 1 *Lv 84 Elemental Amplification 3 *Lv 85 Elemental Amplification 3 *Lv 86 Elemental Amplification 3 *Lv 87 Elemental Amplification 3 *Lv 88 Elemental Amplification 3 *Lv 89 Elemental Amplification 3 *Lv 90 Elemental Amplification 3 *Lv 91 Elemental Amplification 3 *Lv 92 Elemental Amplification 3 *Lv 93 Elemental Amplification 2, Ice Strike 1 *Lv 94 Ice Strike 3 *Lv 95 Ice Strike 3 *Lv 96 Ice Strike 3 *Lv 97 Ice Strike 3 *Lv 98 Ice Strike 3 *Lv 99 Ice Strike 3 *Lv 100 Ice Strike 3 *Lv 101 Ice Strike 3 *Lv 102 Ice Strike 3 *Lv 103 Ice Strike 2, Magic Composition 1 *Lv 104 Magic Composition 3 *Lv 105 Magic Composition 3 *Lv 106 Magic Composition 3 *Lv 107 Magic Composition 3 *Lv 108 Magic Composition 3 *Lv 109 Magic Composition 3 *Lv 110 Magic Composition 3 *Lv 111 Magic Composition 3 *Lv 112 Magic Composition 3 *Lv 113 Magic Composition 2, Seal 1 *Lv 114 Seal 3 *Lv 115 Seal 3 *Lv 116 Seal 3 *Lv 117 Seal 3 *Lv 118 Seal 3 *Lv 119 Seal 3 *Lv 120 Seal 1, Partial Resistance 2 -------------------------------- *Choosing Thunder Spear or Composition first it totally preference, however training ground options are more open with a massive damage spell [ Thunder Spear, up to 8000 damage with amplification ] *MajesticMystic: I have to disagree with the above build. Personally, I think it might be better to max Ice Strike first so you can kill Bains earlier (recommended for level 85+). Thunder Spear lacks good training spot since 1)Ludi isn't out yet, and 2) Even with Ludi out, you're not about to kill Vikings on level 80. You can kill Zombies or Baffoons if you go for Ice Strike first, then eventually on Bains. My recommended build is: Ice Strike (30) Booster (11) Element Amp (30) Thunder Spear (30) Composition (30) Partial Resistance (20) Let's face it, who the hell needs Seal when you can just freeze them solid? *Consider whether you should put points into Partial Resistance or not, after all, there aren't many monsters with such elemental attacks, and why would an Ice/Lightning be training on them in the first place? *Good point, I didn't realize that when I first wrote the build. In any case, Seal is probably better for everything but Zakum, while Partial Resistance is useful if you do Zakums all day (since you can't seal Zakum). Though, it's not like you're going to try to train on Grims or anything, and for Vikings IS freezes them solid anyways. MajesticMystic's 3rd job build: Alright, your first order would be to get an attack skill, get 4 points in Amp, and 11 in Booster. Thunder Spear is not suitable for your first attack skill, since there are no thunder-weak monsters between Clangs and Vikings. So... *Ice Strike/Composition (1) *Elemental Amplification (3) *Ice Strike/Composition (29) *Elemental Amplification (1) *Magic Booster (11) After that, max a second attack skill. If you went for Comp first, this will pretty much always be Ice Strike. If you went for IS first though, you can choose between TP or Comp. Personally I feel that TP is more useful since you'd be training on Vikings mainly anyways, unless you're a JMSer or KMSer (in which cases, go for Comp first). So... *Thunder Spear/Ice Strike (30) At this point, max either your final attack skill or amp in either order. IMHO, if you went for IS first, maxing Amp is probably the better option; if you went for Comp first though, you should max TP before Amp. So that makes: *Elemental Amplification (26)/Thunder Spear (30) *Thunder Spear (30)/Elemental Amplification (26) Finally, get 1 in both Partial Resistance and Seal, then choose to max either. === Fire/Poison Wizard === Considering Fire Arrow will be your primary attack, the skill build instead differs in whether to get Slow or to get Poison Brace (As an added note, if you max Slow you still has 11 points for Poison). Build A - Max Slow *Teleport (1) *MP Eater (1) *Fire Arrow (30) [Save SP at level 15 Fire Arrow until you have 11 SP to spend] *MP Eater (2) *Meditation (20) [Again, save SP at level 10 Meditation] *Teleport (19) *Slow (20) *MP Eater (17) *Poison Brace (11) Build B - Max Poison *Teleport (1) *MP Eater (1) *Fire Arrow (30) [Save SP at level 15 Fire Arrow until you have 11 SP to spend] *MP Eater (2) *Meditation (20) [Again, save SP at level 10 Meditation] *Poison (30) [Don't bother saving SP. You're not spamming it.] *Teleport (19) *MP Eater (17) *Energy Bolt/Slow/Whatever (1) Alternate Fire/Poison Build *Fire Arrow (30) *Meditation (20) *Poison Breath (30) *MP Eater (20) *Teleport (10) *Slow (10) This only represents the final look on the build. The way the person chooses to distribute the stats is up to him/her. However it is highly recommended Fire Arrow along with Meditation are top priority. A maxed Poison Breath can do around 347 to 578 damage (with roughly 35 luk and 175 m attack) plus if poisoned 70 hp or 1/40th hp whichever is higher. This can allow Fire Wizards to hunt fire creatures they normally would not be able too such as Fire Boars. Some creatures weak to poison also give good exp. This is an optional build and only recommended for advanced players. =Anti-Builds= These are a collection of builds that look great on paper but don't work in practice. ===HP Cleric=== Instead of spending stat points in INT and LUK, wear a bathrobe, and put it all in HP. This way your heal will do tons of damage since it is based on your HP. Unfortunately this doesnt work since the damage you do to enemies is based on the level of your Heal regardless of your HP. --Actually, testing has been done, and it turns out that Heal isn't percentage based as most people think. A 4/4 Strength Cleric will probably heal 4 HP with each cast of Heal, since the amount healed is apparently based upon M. Attack, like most other spells. Well, you're partially correct. The percentage that reads on the skill box--you multiply that by your total HP, and divide it among all of your party members in range. However, when fighting monsters, damage is based purely on M.ATK. I have personally tested it--using a sword and my Lama Staff on Zombie Lupins... Oh, and just a hint of advice: dont try fighting Zombie Lupins with a sword. =P ===STR Cleric=== You may be thinking, Magicians have access to maces, so it should be a good idea to do a warrior-ish build, just adding enough INT to make the first advancement then doing a similar STR/DEX build to a warrior. Unfortunately, there are a few problems wrong with this idea. First of all, a lack of mastery and weapon-based skills makes this build nearly as weak, if not weaker, than a perma-beginner. Even then, perma-beginners have access to the 200+ attack weapons (Not in Maple Global, but still...). Second, the few Magician/Cleric skills available won't nearly be enough to compensate for its weaknesses. Why? *As stated, with so little INT, Heal will heal very little amounts of HP and do very little damage. *Skills that aren't based on INT (Magic Guard/Armour, Bless, Invincible) still work, but they would anyway in a normal build. *Attack skills (Magic Claw, Holy Arrow) also do little damage, if any. Third, Magic Guard will likely be the only thing saving you from death at stronger monsters; At least Warriors have their massive HP, Bandits a good amount of HP and (eventually) Meso Guard, and perma-beginners have no EXP loss on death. As such, Perma-beginners will likely be better than a STR Cleric in most areas except partying... And the lack of Heal really hurts a STR Cleric in that regard anyway. {{BookCat}} jt7bwl2uxqgdaing4m39f8zue7joar7 Emulation/Mega Drive 0 434579 4672087 3992395 2026-09-24T09:08:01Z R. Henrik Nilsson 3395618 refrences > references 4672087 wikitext text/x-wiki [[File:Sega-Mega-Drive-JP-Mk1-Console-Set.jpg|thumb|A Sega Meda Drive.]] == About Mega Drive == The Sega Mega Drive was a popular console in the 1990's, and continued to be a popular console in some geographic regions well into the 2010's. == Sega Mega Drive and Genesis Emulators == === SEGA Mega Drive and Genesis Classics === An official emulator and ROM pack developed by SEGA. Includes over 50 officially licensed games as well as an easy to use launcher. ROMS included are compatible with other emulators.<ref>{{cite web |title=You Can Buy Sega Genesis Roms! Mega Drive And Sega CD |url=https://www.youtube.com/watch?v=a1BfQWWcnHA |access-date=29 July 2021 |language=en}}</ref> [https://store.steampowered.com/app/34270/SEGA_Mega_Drive_and_Genesis_Classics/ Steam Page] === Gens === [[File:Gens logo.png|thumb|Gens emulator interface.]] Gens is an open source '''Gen'''esis emulator. === DGen === [[File:DGen Logo.svg|50px|DGen logo]] DGen is an open source Genesis emulator. === GPGX === An open source Mega Drive emulator focused on accuracy. === PicoDrive === A source available Mega Drive emulator.<ref>{{cite web |title=GitHub - notaz/picodrive: Fast MegaDrive/MegaCD/32X emulator |url=https://github.com/notaz/picodrive |website=GitHub |access-date=29 July 2021 |language=en}}</ref> == References == {{Reflist}} {{Status|25%}} {{Bookcat}} __NOTOC__ cc4uewr4sh3l4c8gqzrhqqqhqd9myej History of video games/Platforms/FunKey S 0 436801 4672088 4295455 2026-09-24T09:08:21Z R. Henrik Nilsson 3395618 refrences > references 4672088 wikitext text/x-wiki == History == === Development === Prototype cases were made with 3D printing.<ref name="Dodo Funkey"/> === Launch === The system cost about $70.<ref name="Gizmodo Fun Key">{{cite news |title=My Eyes Hate Me for Loving This Impossibly Tiny Game Boy Clone |url=https://gizmodo.com/my-eyes-hate-me-for-loving-this-impossibly-tiny-game-bo-1846624976 |access-date=2 September 2021 |work=Gizmodo |language=en-us}}</ref> == Technology == === Compute === The system used a ARM Cortex A7 architecture processor clocked at 1.2 gigahertz. The system has 64 megabytes of DDR2 RAM. The system ships with a 32 gigabyte microSD card, which can be user upgraded.<ref name="Gizmodo Fun Key"/> === Screen === The FunKey S has a screen with a resolution of 240 pixels by 240 pixels, a size of 1.52 inches, and a refresh rate of 50 hertz.<ref name="Gizmodo Fun Key"/> === Hardware === The system is powered by a battery with a capacity of 410 mAh, lasting under two hours.<ref name="Gizmodo Fun Key"/> The system uses MicroUSB for charging.<ref name="Dodo Funkey">{{cite news |title=Funkey S Review - The Mini Gameboy Advance SP |url=https://retrododo.com/funkey-s/ |access-date=2 September 2021 |work=Retro Dodo |date=18 May 2020}}</ref> Production cases were injected molded.<ref name="Dodo Funkey"/> === Software === The system runs FunKey OS, which is a custom OS based on Linux.<ref name="Gizmodo Fun Key"/> == References == {{Reflist|2}} {{status|25%}} {{bookcat}} __NOTOC__ 3tlkaz44jxpx6lhxwtizpa4j4n7sppt Robotic Pets for Psychosocial Therapeutics 0 440034 4672097 4225579 2026-09-24T09:11:19Z R. Henrik Nilsson 3395618 refrences > references 4672097 wikitext text/x-wiki Robotic animals have been developed as a substitute for animals in animal-assisted therapy (AAT). In AAT, an animal is used as a facilitator to help individuals aid in recovery from, or cope with medical conditions. Animals have a unique ability to break down barriers that may exist between a client and therapist in a relatively short period of time, and thus aids in building trust between client and therapist, to create a more relaxed and comfortable atmosphere<ref>{{Cite book| publisher = Elsevier Science & Technology| isbn = 978-0-12-381454-8| last = Fine| first = Aubrey H.| title = Handbook on Animal-Assisted Therapy: Theoretical Foundations and Guidelines for Practice| location = Saint Louis, UNITED STATES| accessdate = 2021-12-07| date = 2010| url = http://ebookcentral.proquest.com/lib/uva/detail.action?docID=629941}}</ref><ref>{{Cite journal| doi = 10.2466/pr0.1999.84.3c.1235| issn = 0033-2941| volume = 84| issue = 3_suppl| pages = 1235–1245| last1 = Mason| first1 = Margaret S.| last2 = Hagan| first2 = Christine B.| title = Pet-Assisted Psychotherapy| journal = Psychological Reports| accessdate = 2021-12-08| date = 1999-06-01| url = https://doi.org/10.2466/pr0.1999.84.3c.1235}}</ref>. It is highly effective in eliciting communication and interaction from clients who would otherwise prove difficult to engage<ref>{{Cite journal| last1 = Katcher| first1 = A| last2 = Wilkins| first2 = G. G| title = Animal-assisted therapy in the treatment of disruptive behavior disorders in children. In “The Environment and Mental Health: A Guide for Clinicians”(A. Lundberg, ed.).| journal = The Environment and Mental Health: A Guide for Clinicians (A. Lundberg, ed.)| date = 1997}}</ref>. Working with live animals has many limitations such as zoonotic disease, allergies, or animal welfare concerns. Robotic pets can bring therapeutic benefits of animal-assisted therapy, while nullifying negative issues associated with living pets such as increased. Robotics technology has been applied in a variety of ways in mental healthcare scenarios. Such applications include interventions for conditions ranging from autism spectrum disorder to cognitive impairments, as well as ways to encourage physical activity and provide companionship to individuals living alone. ==Current State of the Art== Currently, there are dozens of different robotic pets commercially available with a wide variety of features ranging from $100-$6,000. For $100, the Hasbro Joy for All Pets line includes multiple colors of cats and dogs. The cat can blink, purr, meow, wash its face with its paw, and even roll onto its back for belly rubs, and the dog has a realistic heartbeat, can bark in response to voices and move its head around to nuzzle up against the user<ref>{{Cite web| title = Lifelike Robotic Pets for Seniors - Joy for All| work = Ageless Innovation LLC| accessdate = 2021-12-08| date = 2018| url = https://joyforall.com/}}</ref>. At a higher price point of $500, the Tombot Jennie has a moving head and is covered in touch sensors and microphones that allow it to realistically respond to touch and bark in response to voice commands<ref>{{Cite web| title = Tombot {{!}} Robotic Emotional Support Animals| work = Tombot, Inc.| accessdate = 2021-12-08| date = 2021| url = https://tombot.com/}}</ref>. Aibo, costing $2,900, is able to move around on its own, and has artificial intelligence (AI) powered learning that allows it to develop a unique personality over time<ref>{{Cite web| title = aibo| work = aibo| accessdate = 2021-12-08| date = 2021| url = https://us.aibo.com/}}</ref><ref>{{Cite web| title = aibo - Communication| work = aibo| accessdate = 2021-12-08| date = 2021| url = https://us.aibo.com/feature/feature2.html}}</ref>. It can pick up a special bone it recognizes, roll over and respond to human interaction through touch or voice, and even sports a fake peeing animation where it lifts a back leg and plays the sound of water being poured on a hard surface through its built-in speakers<ref>{{Cite web| title = aibo - Communication| work = aibo| accessdate = 2021-12-08| date = 2021| url = https://us.aibo.com/feature/feature2.html}}</ref>. Unlike many robotic pets that attempt to mimic it’s real life counterparts, aibo has no fur, instead sporting a metallic dog-like form. For $6,000, PARO, a seal-like pet, holds the Guinness World record for “Greatest reduction in stress levels by a robot”<ref>{{Cite web| last = Guinness World Records| title = Greatest reduction in stress levels by a robot| work = Guinness World Records Limited 2021| accessdate = 2021-12-08| date = 2021| url = https://www.guinnessworldrecords.com/world-records/77523-greatest-reduction-in-stress-levels-by-a-robot}}</ref>. PARO has been in use in Japan and throughout Europe since 2003<ref>{{Cite web| title = PARO Therapeutic Robot| accessdate = 2021-12-08| url = http://www.parorobots.com/}}</ref>. PARO’s cameras allow it to actively seek eye contact with its users, and can even remember faces and associate them with different names for the robot – if the same unit is used for multiple patients, it will recognize each user and respond to the name each has assigned to it. Therapeutic benefits of a robotic pet mostly parallel those of a living animal. Robotic animals used for AAT have been shown to improve moods and make patients more communicative, improve activity of cortical neurons in patients with dementia, and reduce stress as revealed from urinary tests<ref>{{Cite journal| doi = 10.1016/j.jamda.2007.11.007| issn = 1538-9375| volume = 9| issue = 3| pages = 173–177| last1 = Banks| first1 = Marian R.| last2 = Willoughby| first2 = Lisa M.| last3 = Banks| first3 = William A.| title = Animal-assisted therapy and loneliness in nursing homes: use of robotic versus living dogs| journal = Journal of the American Medical Directors Association| date = 2008-03| pmid = 18294600}}</ref><ref>{{Cite journal| doi = 10.2196/resprot.4189| issn = 1929-0748| volume = 4| issue = 2| pages = –45| last1 = Yu| first1 = Ruby| last2 = Hui| first2 = Elsie| last3 = Lee| first3 = Jenny| last4 = Poon| first4 = Dawn| last5 = Ng| first5 = Ashley| last6 = Sit| first6 = Kitty| last7 = Ip| first7 = Kenny| last8 = Yeung| first8 = Fannie| last9 = Wong| first9 = Martin| last10 = Shibata| first10 = Takanori| last11 = Woo| first11 = Jean| title = Use of a Therapeutic, Socially Assistive Pet Robot (PARO) in Improving Mood and Stimulating Social Interaction and Communication for People With Dementia: Study Protocol for a Randomized Controlled Trial| journal = JMIR Research Protocols| accessdate = 2021-12-08| date = 2015-05-01| url = https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4433493/| pmid = 25934173| pmc = PMC4433493}}</ref><ref>{{Cite journal| doi = 10.1109/TRO.2007.906261| issn = 1941-0468| volume = 23| issue = 5| pages = 972–980| last1 = Wada| first1 = Kazuyoshi| last2 = Shibata| first2 = Takanori| title = Living With Seal Robots—Its Sociopsychological and Physiological Influences on the Elderly at a Care House| journal = IEEE Transactions on Robotics| date = 2007-10}}</ref>. In treating loneliness in elderly patients living in long-term care facilities, no statistical difference was shown between treatment groups of a robot, aibo, and living dog, both resulting in similar improvements<ref>{{Cite journal| doi = 10.1016/j.jamda.2007.11.007| issn = 1538-9375| volume = 9| issue = 3| pages = 173–177| last1 = Banks| first1 = Marian R.| last2 = Willoughby| first2 = Lisa M.| last3 = Banks| first3 = William A.| title = Animal-assisted therapy and loneliness in nursing homes: use of robotic versus living dogs| journal = Journal of the American Medical Directors Association| date = 2008-03| pmid = 18294600}}</ref>. Anecdotally, some residents and staff were initially reluctant to interact with aibo; however, with exposure, this resistance largely dissipated. Acceptance of interactive robots suggests their widespread use in geriatric facilities is feasible from a therapeutic standpoint. Research has indicated it is not the mere presence of a robotic animal that produces therapeutic effects, but that it is animated. When the “Haptic Creature”, a furry-animal like device, was breathing compared to inactive, respiration rate, heart rate, and anxiety were lower, and emotional valence was more positive<ref>{{Cite journal| doi = 10.1109/TAFFC.2015.2457893| issn = 1949-3045| volume = 7| issue = 2| pages = 108–121| last1 = Sefidgar| first1 = Yasaman S.| last2 = MacLean| first2 = Karon E.| last3 = Yohanan| first3 = Steve| last4 = Van der Loos| first4 = H.F. Machiel| last5 = Croft| first5 = Elizabeth A.| last6 = Garland| first6 = E. Jane| title = Design and Evaluation of a Touch-Centered Calming Interaction with a Social Robot| journal = IEEE Transactions on Affective Computing| date = 2016-04}}</ref>. Additionally, touch has been suggested to promote stress-reducing effects. When participants were touched by a “NAO” robot, compared to absence of touch, arousal reduction was observed through decreased heart rate and respiration rate<ref>{{Cite journal| doi = 10.1007/s12369-018-0500-9| issn = 1875-4805| volume = 11| issue = 2| pages = 285–304| last1 = Willemse| first1 = Christian J. A. M.| last2 = van Erp| first2 = Jan B. F.| title = Social Touch in Human–Robot Interaction: Robot-Initiated Touches can Induce Positive Responses without Extensive Prior Bonding| journal = International Journal of Social Robotics| accessdate = 2021-12-09| date = 2019-04-01| url = https://doi.org/10.1007/s12369-018-0500-9}}</ref>. ==Ethical Concerns== As robotic technology forays into our daily lives, special consideration must be given to ethical concerns in using robotics for psychosocial therapeutics. Experts in rehabilitative therapy have expressed concerns on privacy and deception<ref>{{Cite journal| doi = 10.1186/s12877-020-01641-5| issn = 1471-2318| volume = 20| issue = 1| pages = 244| last1 = Bradwell| first1 = Hannah L.| last2 = Winnington| first2 = Rhona| last3 = Thill| first3 = Serge| last4 = Jones| first4 = Ray B.| title = Ethical perceptions towards real-world use of companion robots with older people and people with dementia: survey opinions among younger adults| journal = BMC Geriatrics| accessdate = 2021-11-04| date = 2020-07-14| url = https://doi.org/10.1186/s12877-020-01641-5}}</ref>. This differs from concerns of users primarily being decreased human contact, followed by deception, dignity, infantilization<ref>{{Cite journal| doi = 10.1186/s12877-020-01641-5| issn = 1471-2318| volume = 20| issue = 1| pages = 244| last1 = Bradwell| first1 = Hannah L.| last2 = Winnington| first2 = Rhona| last3 = Thill| first3 = Serge| last4 = Jones| first4 = Ray B.| title = Ethical perceptions towards real-world use of companion robots with older people and people with dementia: survey opinions among younger adults| journal = BMC Geriatrics| accessdate = 2021-11-04| date = 2020-07-14| url = https://doi.org/10.1186/s12877-020-01641-5}}</ref>. ===Privacy=== Data collected from the multitude of sensors could be leaked or stolen. The Wakamura robot was designed as a companion, but it can also be used for monitoring elderly, delivering messages and reminding them about medicine<ref>{{Cite journal| volume = 43| issue = 1| pages = 44–45| last1 = Shiotani| first1 = Shigetoshi| last2 = Tomonaka| first2 = Tetsuya| last3 = Kemmotsu| first3 = Keiichi| last4 = Asano| first4 = Shin| last5 = Oonishi| first5 = Ken| last6 = Hiura| first6 = Ryouta| title = World’s first full-fledged communication robot” Wakamaru” capable of living with family and supporting persons| journal = Mitsubishi Juko Giho| date = 2006-01}}</ref>. A healthcare provider may have access to sensor data for patient safety, consequently making the patient under constant surveillance and losing all right to privacy. The issue becomes more complex if the client’s mental state deteriorates. A person with Alzheimer’s may forget the robot was monitoring them, and could perform acts or say things thinking they are in the privacy of their own home. ===Social Contact=== AAT is known to aid in loneliness and encourage social interactions; however, the technology is only intended as a supplement, not a replacement. At present, robots are far from being real companions. They can interact with people, and even show simulated emotions, but their conversational ability is still extremely limited. They cannot form adequate replacements for human love and attention. Nonetheless, some are advertised as such: the Geeko CareBot claims to be “a new kind of companion”<ref>{{Cite web| last = GeckoSystems| title = CareBot™ - Benefits for the Elderly and the Entire Family| work = Mobile Robot Solutions for Safety, Security and Service| accessdate = 2021-12-09| date = 2021| url = https://www.geckosystems.com/markets/CareBot_benefits.php}}</ref>. Presence of a robotic animal in a user's presence may justify inattentiveness and a lack of contact; for instance, caregivers in a nursing home may devote more time to residents who do not have the AAT, neglecting those who do. Similarly, family members may use the robotic pet to alleviate guilt for not spending time with an older family member. These effects of robotic pets demonstrate Jevons Paradox: attempting to increase social interaction with the robotic animal can ultimately reduce social contact overall. ===Deception=== Deception is another primary concern. Caregivers and family members that market the robot as a real pet to users can be seen as inherently deceitful and as treating users with less dignity. These concerns are exacerbated when the user has cognitive impairments from diseases such as dementia and autism, conditions of which AAT is commonly used for. Morphology is a richly debated topic in the community, with many studies showing people will anthropomorphize and form attachments to nearly anything conveying animacy<ref>{{Cite journal| doi = 10.1037/0033-295X.114.4.864| issn = 1939-1471| volume = 114| issue = 4| pages = 864–886| last1 = Epley| first1 = Nicholas| last2 = Waytz| first2 = Adam| last3 = Cacioppo| first3 = John T.| title = On seeing human: A three-factor theory of anthropomorphism| journal = Psychological Review| date = 2007}}</ref><ref>{{Cite journal| doi = 10.1016/S0921-8890(02)00374-3| issn = 0921-8890| volume = 42| issue = 3| pages = 177–190| last = Duffy| first = Brian R.| title = Anthropomorphism and the social robot| journal = Robotics and Autonomous Systems| series = Socially Interactive Robots| accessdate = 2021-12-08| date = 2003-03-31| url = https://www.sciencedirect.com/science/article/pii/S0921889002003743}}</ref><ref>{{Cite journal| doi = 10.1111/0022-4537.00153| issn = 1540-4560| volume = 56| issue = 1| pages = 81–103| last1 = Nass| first1 = Clifford| last2 = Moon| first2 = Youngme| title = Machines and Mindlessness: Social Responses to Computers| journal = Journal of Social Issues| accessdate = 2021-12-08| date = 2000| url = https://onlinelibrary.wiley.com/doi/abs/10.1111/0022-4537.00153}}</ref>. Increasingly realistic representations not only convey inaccurate expectations, but may be unethical when treating vulnerable populations. This deception is a form of infantilization by treating older adults as children. It can be seen as disrespectful and can damage their family’s perception of them; thus further decreasing desire to interact and isolating them. Whether users care they are being lied to and treated in such a way vary greatly and a universal consensus of harm cannot be determined. On one hand, “a diagnosis of dementia does not erase the need to be treated with dignity”<ref>{{Cite web| last = Heerema| first = Esther| title = Pros and Cons of Doll Therapy in Dementia| work = HOPE Dementia Support| accessdate = 2021-12-09| date = 2018-01-10| url = https://hopedementiasupport.org/pros-and-cons-of-doll-therapy-in-dementia/}}</ref>; however, clients could still enjoy, and benefit, from interacting with a robotic pet without thinking it is actually sentient. Turkle et al. found seniors interacting with robots showed considerable variations in their attitudes and behavior towards them: some wanted to know how they worked in a mechanical sense, whereas others were content to interact with them “as they presented themselves” with no interest in their underlying mechanism <ref>{{Cite journal| doi = 10.1080/09540090600868912| issn = 0954-0091| volume = 18| issue = 4| pages = 347–361| last1 = Turkle| first1 = Sherry| last2 = Taggart| first2 = Will| last3 = Kidd| first3 = Cory D.| last4 = Dasté| first4 = Olivia| title = Relational artifacts with children and elders: the complexities of cybercompanionship| journal = Connection Science| accessdate = 2021-12-09| date = 2006-12-01| url = https://doi.org/10.1080/09540090600868912}}</ref>. Robotic pets for psychosocial therapy is a tool that still needs more psychological research to provide a clearer picture of beliefs that elderly hold about the robots they encounter and should be used with discretion based on how the patient wants to be treated<ref>{{Cite journal| doi = 10.1007/s10676-010-9234-6| issn = 1572-8439| volume = 14| issue = 1| pages = 27–40| last1 = Sharkey| first1 = Amanda| last2 = Sharkey| first2 = Noel| title = Granny and the robots: ethical issues in robot care for the elderly| journal = Ethics and Information Technology| accessdate = 2021-12-09| date = 2012-03-01| url = https://doi.org/10.1007/s10676-010-9234-6}}</ref>. A few individual factors have been found to influence acceptance of robots among older adults, such as previous experience with technology. Notably, culture, an increasingly important aspect of healthcare, also plays a role not only in attitudes and behaviors toward robots, but also in preferences in relation to appearance along with verbal and nonverbal communication<ref>{{Cite web| title = The Influence of Culture on Attitudes Towards Humanoid and Animal‐like Robots: An Integrative Review - Papadopoulos - 2018 - Journal of Nursing Scholarship - Wiley Online Library| accessdate = 2021-12-07| url = https://sigmapubs.onlinelibrary.wiley.com/doi/full/10.1111/jnu.12422}}</ref>. Wang et al. found in a cross-cultural study between Chinese and American participants, robots that respect cultural norms are more likely to be accepted<ref>{{Cite conference| doi = 10.1109/HRI.2010.5453165| last1 = Wang| first1 = L.| last2 = Rau| first2 = P.| last3 = Evers| first3 = V.| last4 = Robinson| first4 = B.| last5 = Hinds| first5 = P.| title = When in Rome: the role of culture & context in adherence to robot recommendations| booktitle = HRI 2010| date = 2010}}</ref>. Barua argued the behavior of a robot is a reflection of the creators’ values, which means for robots to be effectively integrated into healthcare, they ought to be created culturally competent and compassionate<ref>{{Cite journal| volume = 3| pages = 4| last1 = Barua| first1 = Resheque| last2 = Sramon| first2 = Shimo| last3 = Heerink| first3 = Marcel| title = Barua, Resheque, Shimo Sramon, and Marcel Heerink. "Empathy, compassion and social robots: An approach from Buddhist philosophy." philosophy 3.4 (2015).| journal = philosophy| date = 2015}}</ref>. ==Conclusion== With increased use of robots as service machines in the medical context, human-robot interactions are more and more frequent in healthcare. Robots interacting with humans in a way that supports mental and physical well-being have potential for directly supporting individuals at risk and also the healthcare system in general. As technology advances and robot morphology becomes increasingly closer to their real-life counterparts, their potential technological dangers and ethical social issues must be considered in future developments. ==References== {{Reflist| {{shelves|Robotics|Medicine}} {{one-page book}} 321chcg97hyrj21ntj5ys6c437kv3ux User talk:Kittycataclysm 3 442343 4671990 4671829 2026-09-23T18:33:36Z Kittycataclysm 3371989 Rollback 1 edit by [[Special:Contributions/~2026-51006-30|~2026-51006-30]]: Vandalism 4671822 wikitext text/x-wiki {| class="wikitable" |+ ! colspan="3" |Talk Page Archives |- |[[User talk:Kittycataclysm/Archive 2022|2022]] |[[User talk:Kittycataclysm/Archive 2023|2023]] |[[User talk:Kittycataclysm/Archive 2024|2024]] |} == That IP range calculator == Following [[phab:T381138|T381138]], I have now become the maintainer of the IP range calculator you like. You can find it [[toolforge:ftools/general/ip-range-calc.html|here]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 23:10, 9 January 2025 (UTC) :Thank you for the heads-up! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:56, 10 January 2025 (UTC) == A merge and unmerge from two years ago == I was browsing through the history merge log when I saw that you merged [[Cookbook:Chicken Bog]] into [[Cookbook:Chicken Bog I]], and then promptly reverted it. What happened here exactly? Could I correct it? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 15:55, 10 January 2025 (UTC) :Good question! I can't remember what I was trying to do, but it looks like I didn't succeed at what I wanted based on the log comment. You're just trying to history merge to get [[Cookbook:Chicken Bog I]] to have continuity of history? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:35, 10 January 2025 (UTC) ::I think I figured out your mistake: it outright moved the revisions from the first page to the second, rather than copying them. This would have caused the other two [[Cookbook:Chicken Bog]] pages to have incomplete histories. I think the only solution would be to XML import the pre-April 2023 revisions from the first page to the other three, and I'm not sure if that's the best idea, and I am technically unable to do so. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 16:49, 10 January 2025 (UTC) == Undeletion request == I wouldn't be surprised if you expected this, but I'd like to ask you to undelete the subpages of [[Rotorcraft Fundamentals]] you just deleted with the summary "Use of copyrighted work without permission. Please read Terms of Use: page needs to be imported for attribution", so that I can do that. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 19:54, 14 January 2025 (UTC) :Done! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:57, 14 January 2025 (UTC) ::Upon further investigation, this might actually be a rare case where an [[WB:UT|unmerged transwiki]] is ''preferred'' (this is part of why I stopped calling them "bad transwikis"), since only a small portion of the Wikipedia article (with over 2,000 revisions) was copied over. Importation is generally only needed if the ''majority'' of the page is copied across wikis. I'll just leave a null edit providing attribution and add {{tlx|Copied}}. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 21:19, 14 January 2025 (UTC) == Reusing [[Cookbook:8 Desserts in 1 Pan]] on wikiHow == Hi, I am a user on wikiHow, see [[wikihow:User:Xeverything11]]. I would like to create a new recipe on wikiHow. I wanted to let us know if I can give permission to reuse your contributions to this recipe from Wikibooks to wikiHow. I (as a copyright holder) created this recipe on Wikibooks, but you contributed to this recipe. If not, I'll use the revision before you contributed since I was the only author. Wikibooks uses CC-BY-SA 4.0 while wikiHow uses CC-BY-NC-SA 3.0, which both licenses are incompatible due to ShareAlike conditions. Thanks [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 08:27, 15 January 2025 (UTC) :@[[User:Xeverything11|Xeverything11]] I'm personally fine with this as long as proper attribution is given back to the original recipe page here. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:52, 20 January 2025 (UTC) ::I adapted this [[wikihow:Make-8-Desserts-in-1-Pan|recipe]] on wikiHow with attribution, and got a Rising Star (an achievement used for best new articles on wikiHow). Thank you! [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 19:49, 24 January 2025 (UTC) == Wikibooks community == Hi, @[[User:Kittycataclysm|Kittycataclysm]]! I am trying to contribute more to English Wikibooks. My main contributions will focus on the Cookbook, especially on Indonesian recipes. Do you have a community group where we can discuss and share ideas together? I am looking forward to join. Thank you! [[User:Raflinoer32|Raflinoer32]] ([[User talk:Raflinoer32|discuss]] • [[Special:Contributions/Raflinoer32|contribs]]) 08:47, 16 January 2025 (UTC) :@[[User:Raflinoer32|Raflinoer32]] Sorry I missed this, and welcome! Are you asking about a Cookbook-specific area for discussion? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:39, 20 January 2025 (UTC) ::Yes. Do you know place for this? ::Thank you ::[[User:Raflinoer32|Raflinoer32]] ([[User talk:Raflinoer32|discuss]] • [[Special:Contributions/Raflinoer32|contribs]]) 09:41, 21 January 2025 (UTC) :::Honestly, there's not a centralized Cookbook-specific discussion space, especially since there aren't currently a ton of active contributors. Some people ask questions at [[Cookbook talk:Table of Contents]]. I'm currently the most consistently active and involved Cookbook editor, so feel free to ask me questions! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:46, 22 January 2025 (UTC) == Congratulations! == [[File:Admin T-shirt.svg|thumb|You get this now.]] You are now a permanent administrator. Welcome to the team (I am entitled to say this because I technically got the extension a few hours before you did)!{{FBDB}} [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 10:33, 29 January 2025 (UTC) :Thanks :) —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:29, 29 January 2025 (UTC) == Is there a way to contact a Steward on WikiBooks? == Hi {{PAGENAME}}, Is there a way to contact a Steward on WB? I tried to find who the active Stewards are here at [[Special:ActiveUsers?username=&groups%5B%5D=steward&wpFormIdentifier=specialactiveusers]] but nothing shows up. The reason I am asking is that I believe that all individual Wikimania-wikis should have a backward link to the [[Wikimania-wiki]], but I just visited the [[wikimania 2014 wiki]] and could not find this backward link. I tried to ask about this on the [[Wikimania 2014 main-page talk]] but disovered that the Stewards have protected it. Is there a way wikibookians can communicate with Stewards at WB? Thanks in advance for answering this non-urgent question, and apologies for all the red-links which I can bluify if needed. Cheers [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 16:37, 7 February 2025 (UTC) :@[[User:Ottawahitech|Ottawahitech]] You can ask this on somewhere like [[metawiki:Steward requests/Miscellaneous]]. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 17:01, 7 February 2025 (UTC) <s>:@[[User:Ottawahitech|Ottawahitech]] seconding what Leaderboard said—we no longer have any active stewards at enWB.</s> Had a brain fade there and mixed up stewards with bureaucrats. Yes, meta is the place for this. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 7 February 2025 (UTC) ::@Kittycataclysm,@[[User:Leaderboard|Leaderboard]], or anyone else: ::Some wikibookians prefer for various reasons to post only at wb. I myself am indef-blocked at META so could not participate at [[metawiki:Steward requests/Miscellaneous]] even if I waned to. ::Since [[Wikimania]] is a topic of interest to all members of the [[wikimedia movement]] why can't wikibookians talk to thier elected representatives here? [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 20:56, 7 February 2025 (UTC) :::@[[User:Ottawahitech|Ottawahitech]] I can check with the blocking admin to see if they'd be willing to unblock you, if you'd like. The reason things like these are done at Meta is that Meta is a cross-project coordination platform - stewards ''cannot'' be expected to watch every project after all. Now you could message any steward here on Wikibooks if you really wanted to, but that is not normally a good idea. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 02:26, 8 February 2025 (UTC) ::::Wikimania is the annual conference celebrating all the free knowledge projects hosted by the Wikimedia Foundation (WMF). It is a wikimedia initiative which is meant to help all of our projects (including wikibooks), gain more readership, educate more wiki-editors, foster better communications, and much more. The wmf has been hosting a Wikimania-wiki dedicated to each Wikimania annual event since 2004. These wikis contain a wealth of information, but can benefit from wiki-improvements, starting from spelling and grammar errors that detract from their to appeal to the general membership. It would be nice if Stewards paid more attention to it. ::::@[[User:Leaderboard|Leaderboard]], I truly appreciate your offer, but I posted this here not in order to get someone to advocate for one unblocking at META. As I said earlier: ::::* "Some wikibookians prefer for various reasons to post only at wb" ::::* "The reason I am asking is that I believe that all individual Wikimania-wikis should have a backward link to the Wikimania-wiki, but I just visited the wikimania 2014 wiki and could not find this backward link. I tried to ask about this on the Wikimania 2014 main-page talk but disovered that the Stewards have protected it" ::::I would much rather see more wikimedia members question blocking in general at META. One cannot run such large movement of people from different backgrounds and nationalities simply by silencing minorities IMIO. [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 20:12, 8 February 2025 (UTC) == [[Crystal ball]] == That page appears to be a mixture of isolated paragraphs from [[w:Crystal ball|Crystal ball]], hence my tag. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 03:04, 9 February 2025 (UTC) :Yep, that seems correct! I also queried it simply because it does not seem suitable for inclusion at all. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:09, 9 February 2025 (UTC) == Question about an edit suggestion == Hi Kittycataclysm, Thanks for the great work you do as an admin! I wanted to clarify a suggestion you made on a recently published page I’m working on. You recommended splitting it into smaller sections—would you suggest creating separate pages for these sections, or would a higher-level header for some topics be sufficient? Any specific recommendations you have would be greatly appreciated! Here’s the link to the page I’m referring to: [[Funding and Finance of Transportation Projects in the United States of America]] Thank you! [[User:Svrmustafa|Svrmustafa]] ([[User talk:Svrmustafa|discuss]] • [[Special:Contributions/Svrmustafa|contribs]]) 18:19, 18 February 2025 (UTC) :Hi @[[User:Svrmustafa|Svrmustafa]], and thanks for asking! Splitting refers to creating new pages, each with a smaller amount of content. The main page should then contain a table of contents, and each page can contain a navigation template for easier navigation. I'll create the table of contents based on the current work and move some content to one of those pages as an example for you; then, you can do the rest. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:26, 19 February 2025 (UTC) ::Following up on this—I noticed that you use the term "paper". However, technically Wikibooks hosts books not papers, so you should probably change this wording. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:38, 19 February 2025 (UTC) == Talkback == {{Talkback|Cookbook talk:Chilli Crab|Recipe Questions}} [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 09:54, 19 February 2025 (UTC) :@[[User:Kittycataclysm|Kittycataclysm]] I also made [[Cookbook:Prata|this]] [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 10:15, 19 February 2025 (UTC) == Hello == Can you look at my latest recipe? [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 00:10, 28 February 2025 (UTC) :I saw it! It needs a few corrections, which I'll note. What's the origin of the recipe? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:23, 28 February 2025 (UTC) ::@[[User:Kittycataclysm|Kittycataclysm]] How do you write recipe summary, correct headers [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 06:04, 28 February 2025 (UTC) :::Please see [[Cookbook:Policy/Recipe template]]. What's the origin of the recipe? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:08, 28 February 2025 (UTC) ::::ok [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 02:33, 1 March 2025 (UTC) == Cookbook == Hi there, Kittycataclysm. I wandered over here from Wikipedia, and I'm quite enamoured with this cookbook. I noticed you seem to be the one maintaining it, and I thought I'd reach out. Can I really just start cranking out recipes from public domain cookbooks and my family recipes? It's that simple? I was also wondering about the featured recipes section. There's not very many in there, and I imagine there's not very many folks around to do reviews compared to GAR on Wikipedia. How do you handle content review? Thanks. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 01:51, 1 March 2025 (UTC) :Hi @[[User:MediaKyle|MediaKyle]] and welcome! For some context, the Cookbook has been around since the very beginning of Wikibooks, but it had gotten into a bit of disarray over the course of about two decades by the time I found it. I started the long process of overhauling, standardizing, and expanding it just over four years ago—I finished standardizing the recipe formatting and quality a while back and am currently working my way through the ingredient pages before moving on to equipment, techniques, and cuisines. You can absolutely add any public domain recipes as well as your own recipes—they just need to conform to the [[Cookbook:Policy/Recipe template|recipe template]] and [[Cookbook:Policy|Cookbook policy overall]]. It's even better if you've made the recipe and can contribute a nice picture and specific guidance/instructions/notes! Please feel free to ask me any questions. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:27, 1 March 2025 (UTC) ::Oh, and regarding the featured recipes section, I actually haven't gotten around to looking into that yet—there's been a lot to do! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:28, 1 March 2025 (UTC) ::That's great, thanks a lot for your response. This is just delightful. Maybe content review is something that we could collaborate on. There's a lot of recipes in here and it would be nice to know which ones are the best. Question for you, [[:Category:Brown sauces]] is really bothering me. How can I move that to Brown sauce recipes? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:29, 1 March 2025 (UTC) :::Good catch on that category! It seems like it was created two decades ago and never got corrected—feel free to recategorize those recipes. Thank you also for introducing the hideprefix parameter to the category trees—I didn't realize that was an option, and it reduces the visual clutter! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:38, 1 March 2025 (UTC) ::::My pleasure! As I continue to look at the categories, this is actually worse than I thought. We have both [[:Category:Sauce recipes]] and [[:Category:Recipes for condiments]] and I suspect that's just the beginning. I want to go through and categorize everything properly, but the bones aren't even there... How long do I have to be here before it'll let me create and move around categories? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:40, 1 March 2025 (UTC) :::::Regarding the categories, the category overhauling is in progress, since I address the category when I overhaul the associated page. The variation in titling is actually somewhat deliberate—I started changing it from "____ recipes" in certain cases to solve a particular categorization problem. Sometimes, there is an item that is used in recipes as an ingredient but for which there are also recipes. For example, [[:Category:Recipes for bread]] versus [[:Category:Recipes using bread]]. The different naming scheme is necessary to properly delineate the categories, and I'm working on implementing it a bit more consistently as I go. While you're still getting started, it would be great if you could check with me when something looks odd or out of place—that way I can take a look and weigh in on whether that's normal or not and maybe provide some context. Just off the top of my head, I think you will have to wait for autoreview status to make move changes. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:56, 1 March 2025 (UTC) ::::::I see what you're saying, I've been trying to wrap my head around that. Maybe it would be beneficial to try to put together some sort of a Cookbook MOS regarding category structure? It's kind of all over the place right now. Using your bread example, would it perhaps make more sense to have [[:Category:Bread recipes]] and [[:Category:Recipes using bread]]? There would be no ambiguity with just those two categories, but when you add the extra [[:Category:Recipes for bread]], that's when things start getting a little whacky. What do you think? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:05, 1 March 2025 (UTC) :::::::Either that or get rid of [[:Category:Bread recipes]] and keep the other two. But one of these categories gotta go, I reckon. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:07, 1 March 2025 (UTC) ::::::::I see you already had the same thought as me. I think all categories should include "for" or "using". Take for example, [[:Category:Recipes for pancakes]] as opposed to [[:Category:Pancake recipes]]. Well obviously there's no recipes using pancakes. But for something like [[:Category:Recipes for gravy]], there may also be a need for [[:Category:Recipes using gravy]]. The lack of consistency in this regard means the only way to achieve consistency across the categories is by changing them over to that format. Sorry for clogging up your talk page! [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:18, 1 March 2025 (UTC) :::::::::Same heads-up as below—migrating this over to [[Cookbook talk:Table of Contents]] —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:10, 4 March 2025 (UTC) :Also, on [[Cookbook:Table of Contents]], could you please add a wikilink for [[Cookbook:Breakfast]], and maybe add cooknav to the top for seamless navigation between all the top level articles? Can't edit that article yet. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:47, 1 March 2025 (UTC) == More Table of Content Edits == Hello again. I've been going through everything and this is my list of suggestions for edits to the table of contents. Unfortunately there's not much else I can do for now, because without autoconfirmed my ability to change anything is very limited. I was going to ask for someone to check off the confirmed box for me at RfP but I can't post there either, so I guess I'll be back in four days. * Fix Bread wikilink * Remove "Creaming" from techniques, redirected to Mixing * [[Cookbook:History of Food and Cooking]] points to redirect, needs capitalized * [[Cookbook:Low-Carb]] points to redirect, needs capitalized * [[Cookbook:Cuisine of the Mediterranean]] to [[Cookbook:Mediterranean Cuisine]] for parity * Remove the S from the cuisine wikilinks on ToC, currently redirecting * Create [[:Category:Lunch recipes]], wikilink to ToC * Wikilink [[Cookbook:Dessert]] under Meals * Get rid of "Brunch"; will just be confusing alongside a breakfast and lunch category * Create [[Cookbook:East Asian Cuisine]] so I can add the recipes from [[:Category:East Asian recipes]] to it; currently is a redlink on the ToC * Change "Introductory Matter" header to just "Introduction" * Appendix and Equipment sections switch places Cheers, [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:46, 1 March 2025 (UTC) :I took the liberty of doing it myself in my userspace. You can just copy it over from [[User:MediaKyle/sandbox]]. Figured I'd save you the trouble of trying to figure out what I'm talking about. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 14:15, 1 March 2025 (UTC) :Circling back to this! It seems like your suggestions are getting at a couple different things. I'll try to go through them point-by-point below: :* {{xt|Fix Bread wikilink}} {{done}} :* {{xt|Remove "Creaming" from techniques, redirected to Mixing}} see below comments on TOC. :* {{xt|Cookbook:History of Food and Cooking points to redirect, needs capitalized}} {{not done}} for now because I don't fully understand the urgency and I want to triage/prioritize things for you, but please feel free to make this change yourself once you can! :* {{xt|Cookbook:Low-Carb points to redirect, needs capitalized}} {{not done}} for same reason as above. :* {{xt|Cookbook:Cuisine of the Mediterranean to Cookbook:Mediterranean Cuisine for parity}} {{not done}} for now just because we do have a lot of cuisine pages that follow the form "Cuisine of ____". It could be good to standardize, and I had been planning to do that once I got around to the cuisines. :* {{xt|Remove the S from the cuisine wikilinks on ToC, currently redirecting}} {{not done}} for same reason as other redirects :* {{xt|Create Category:Lunch recipes, wikilink to ToC}} Not quite sure what you mean here, and I didn't see what it corresponded to in your linked sandbox page :* {{xt|Wikilink Cookbook:Dessert under Meals}} {{done}} :* {{xt|Get rid of "Brunch"; will just be confusing alongside a breakfast and lunch category}} I'm not sure about this—brunch is in many places considered a separate entity, and I don't necessarily think it would cause confusion. But, overall it's hard to determine whether it should have its own page and TOC link because I haven't actually gotten around to evaluating the meal pages and what role they should play. See also the TOC notes below. :* {{xt|Create Cookbook:East Asian Cuisine so I can add the recipes from Category:East Asian recipes to it; currently is a redlink on the ToC}} {{done}} for now; however, I'm not sure yet whether it will ultimately make sense to keep that as a content page. I think content pages should be reasonably focused, and it may not be the best to have a cuisine page that is so broad. This is something I planned to consider once I made my way around the overhauling the cuisines. :* {{xt|Change "Introductory Matter" header to just "Introduction"}} The reason I made it "Introductory Matter" instead of "Introduction" is because there's already a chapter itself titled "Introduction"—it felt odd to have the entire section titled that as well. Happy to discuss other header options (e.g. "Front Matter", which is a generally accepted book term) :* {{xt|Appendix and Equipment sections switch places}} see below comments on TOC. :* '''Comments on the TOC:''' So, I think a fundamental issue with the current TOC is that it somewhat arbitrarily picks and chooses individual pages to link. It also sometimes direct-links to categories and sometimes to content pages, which I don't think we should do. Because the cookbook is so expansive, it's been established that manual indices intending to capture detail in large areas don't really make sense and quickly get bulky and out-of-date. This is why categorytree is such a useful tool! After thinking on it for a while and making some small tweaks, I think I'd ultimately like to overhaul the TOC and come to a solution that keeps a few broad headers/links to the small handful of the primary content pages while perhaps stashing away more detailed and self-updating lists in a collapsible way to reduce clutter but allow for customizable user navigation. Much to think about, and I'll probably workshop some things on the side to see how they feel. :Let me know if I've misunderstood anything! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:24, 3 March 2025 (UTC) ::Thanks for the notes! Here's my thoughts: ::* On the Cuisine titling, it actually seems like [[Cookbook:Cuisine of the Mediterranean]] and [[Cookbook:East Asian cuisines]] are the only ones that don't follow the naming scheme, i.e. "[[Cookbook:African Cuisine]]", and I think that shorter titles are preferable where it makes sense. ::* On your note about East Asian Cuisine, I actually had the same thought after going through the cuisine pages. Having three separate pages for different kinds of Asian cuisine does seem a little silly, doesn't it? Do you think it might be better to combine all of them under one "Asian Cuisine", but put the different locales under separate headers? ::* On Brunch - I honestly think there's way too much ambiguity around what exactly constitutes as "brunch" to keep that in. I feel as though the term brunch more applies to the time you're eating, rather than the kind of food. I think it would be easier to keep meals that include commonly accepted breakfast foods in the Breakfast category, and things that don't fit neatly into that, into the Lunch category. This would prevent any dilemmas in the future where we can't decide whether something is breakfast or brunch. ::* You're right that it looks a little awkward to have the header as Introduction when there's a page called introduction. I still think that to say "Introductory Matter", or "Front Matter" as you mentioned, is a little long-winded and reflects a more academic tone than needed for a cookbook. Upon further reflection, I think maybe rather than worrying about the header at this point, we should perhaps think about trying to compile all of those short introductory type pages into one comprehensive introductory page. Then we likely won't even need a header for it on the ToC. ::* The ToC is definitely a bit cluttered, and it bothers me too that there's a real lack of consistency across whether the wikilinks lead to a page or a category. I'm not sure how I would feel about cutting away too much of the navigation from it, though, because just about every page on there does have a reason to be there, it's just that they're not presented very nicely. Some of it can certainly get nested or combined though. I'll play around with it over the next few days in my sandbox as well and let you know if I come up with anything. ::* As an aside, the first thing on my to-do list once my autoconfirmed comes through is to start subcategorizing all of the recipes so that they're all nicely sorted in the category trees. When you have a chance, I'd love to hear your thoughts on what we should use as the standard naming for categories. Once we determine this, I think we can also take the liberty of updating the cookbook MoS to reflect it. ::Cheers, [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:33, 3 March 2025 (UTC) :::Note: After writing this, I realized what you were getting at about slashing away some of the subpages. Maybe we can come up with a system where all of those subpages are under their main subpage rather than on the ToC. For example, all the Cuisines are under [[Cookbook:Cuisines]], all techniques under [[Cookbook:Cooking Techniques]], to keep the subpages off the main ToC. Also, I wonder if maybe we should try to make a centralized discussion for this somewhere, in case anyone else wants to join in at some point? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:45, 3 March 2025 (UTC) ::::Heads-up: to make it easier to keep track of these and since I think they deserve their own discussions, I'm going to gradually migrate them over individually to [[Cookbook talk:Table of Contents]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:52, 4 March 2025 (UTC) :::::Good idea. Can you remove the semi-protection from that talk page? I see no reason why it should be protected. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 23:23, 4 March 2025 (UTC) == Cookbook ToC == Hi [[User:Kittycataclysm|Kittycataclysm]]. I was just wondering why you didn't respond to my above message, and started a separate sandbox for the ToC instead? It seems as though you don't really want to collaborate. It would be nice if we could work on this together. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 22:43, 2 March 2025 (UTC) :@[[User:MediaKyle|MediaKyle]] thanks for the ping! I'm sorry you feel like I don't want to collaborate—the opposite is true, and please understand that this is good-faith editing. The reason I haven't responded to the above points is mostly since you've been modifying a bunch of content and adding suggestions lately, and I've been working my way through these while continuing with my routine contributions and real life as well—things happen a little more slowly here than on other projects, and I'm the one person dedicated to the cookbook right now. The reason I created that sandbox was because I saw [[Wikibooks:Reading room/General#Modernize the shelves|your comment]] at the reading room and wanted to play around and think about your suggestion without touching the actual TOC. You're right that it's not the best, and it's been something I've been thinking about for a bit now. Please understand also that it can be overwhelming when a new editor unfamiliar with the Cookbook begins making a high volume of edits and suggestions without having much experience with it or its history—this isn't to say that you don't have good ideas or things worth contributing. In fact, you have already made a few helpful changes, as I've mentioned. I just want to do this properly and take the time to evaluate your suggestions together with the current efforts that are underway, and that can take a bit. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:03, 2 March 2025 (UTC) ::Thanks for getting back to me. While I may be new to Wikibooks, I'm certainly not new to MediaWiki, and I've been working with small wiki projects for a number of years. Perhaps it's been a misunderstanding to some degree, but I've found my reception here to be unusually unwelcoming. The way to do this properly, as you said, would be to have discussions and form consensus. Yesterday, when you reached out to me about adding hideroot to the pages, I gave you my rationale and was more than happy to have a discussion about it, but you did not reply. I noticed a similar situation happened with [https://en.wikibooks.org/wiki/User_talk:Ottawahitech#Category_sorting Ottawahitech], regarding category sorting. I'm aware that you're the main person looking after the cookbook right now, which is why I reached out to you right from the get go. ::I understand why you would want to create your own sandbox to play around with options for the ToC, but I'm sure you can understand why it would draw my attention that you would do this without implementing any of the wikilink fixes I mentioned, or making an attempt to discuss it further. This came across to me as not wanting my help. ::I invite you to check out my page on Wikipedia. I've made contributions across quite a wide area of topics there, as well as the other Wikimedia projects, and this is the first time I've encountered any sort of resistance to my contributions. I think Wikibooks has enormous potential, and I'm very excited to contribute to helping it grow. On most projects, this would be something to be encouraged. I don't feel like "I'm sorry that you feel that way" was really an appropriate response. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 23:59, 2 March 2025 (UTC) :::I think you're right that this has been a mix of misunderstanding and miscommunication, and I think I can understand how things came across as unwelcoming! For whatever it's worth, I absolutely plan on circling back to the various discussions at hand (I have all the relevant pages open to return to), but it seems like the order I did things made it seem like I was ignoring you (if I'm understanding correctly). I am pretty busy, so sometimes items on my to-do list do get lost/shunted or it takes me a bit to get around to something—please don't hesitate to give me a ping if it seems like I'm taking a while to get back to something. Looking forward to more collaboration! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:49, 3 March 2025 (UTC) ::::I'm glad you can understand where I'm coming from. To clarify, my intent is not to try to rush you, or to try to push you to make changes that you don't agree with. It's really easy to misinterpret things over the Internet, and I think a short message can go a long way. I apologize if I've caused you any undue stress by coming into the cookbook and unleashing a flurry of alterations, but do rest assured that I'm not married to any of my changes, I'm always open for discussion, and I want to see the cookbook improve just like you do. The great thing about wikis is that no change is permanent. I think we'll have it in tip-top shape in no time! [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 01:19, 3 March 2025 (UTC) == [[Cookbook:Polish Doughnuts (Paczki)]] == Do you see any reason not to just add this to Featured Recipes? At least we know this one works, and it seems like this is now one of the few recipes to have a picture that actually aligns with the recipe used. I was thinking later on we'll come up with a content review system where a couple editors will actually try the recipes nominated for FR, but in the absence of that I'd just add it to the list. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 12:25, 4 March 2025 (UTC) :I'm fine with adding it to the featured recipes. You're right that we'll want to come up with a good system for this going forward, though it's lower down on my personal priority list at moment. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:15, 4 March 2025 (UTC) == [[Cookbook:Cream Cheese American Buttercream]] == Hi! I am a wikiHow user and I am planning to adapt this recipe to wikiHow. Since you contributed to this recipe, I wanted to know if I can get permission to reuse your contributions to this recipe. Thanks. [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 21:41, 4 March 2025 (UTC) :@[[User:Xeverything11|Xeverything11]] that's fine with me as long as proper attribution and linking back to the original recipe page here are included at the top. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:28, 4 March 2025 (UTC) == [[A Companion to Our Literary Journey]] == Hi! I feel that we have started to outline the scope in a clearer and more precise way and that’s the work we are going to do with the students this and for the next years, adding more sections and content. Do you think that would be enough? [[User:Ferdi2005|Ferdi2005]] ([[User talk:Ferdi2005|discuss]] • [[Special:Contributions/Ferdi2005|contribs]]) 22:43, 6 March 2025 (UTC) :Hi @[[User:Ferdi2005|Ferdi2005]]! Yes, this seems to be reasonably outlined. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:51, 7 March 2025 (UTC) == Exercising care with copyright == When deleting a page as a copyright violation, it is important that you '''do not quote any content from the deleted page'''. If you do, then your log entry is itself a copyright violation. I have redacted a recent deletion that you performed because of this. If you want to make sure that none of your past deletions have been problematic for this reason, you can [[quarry:query/90444|run this SQL query]] to get a list of every deletion that could be eligible for redaction. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 18:32, 21 March 2025 (UTC) :Hi @[[User:JJPMaster|JJPMaster]] and thank you for the message. In the most recent instance that I think you're referencing, I do not see any material in the edit summary that posed a significant risk—I don't believe the few listed words would be a copyright concern. However, I do understand your concern! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:31, 21 March 2025 (UTC) == Splitting Pages == Hi I have recently made the book on the [[History of the Nawabs of Bengal]] and you gave a notice on how you believe it should be split into smaller bits. As I am still new to wikibooks I don't know how to do this. Can you please assist me on renaming the page so I can split the page into multiple pages? @[[User:Kittycataclysm|Kittycataclysm]] [[User:Greatswrd|Greatswrd]] ([[User talk:Greatswrd|discuss]] • [[Special:Contributions/Greatswrd|contribs]]) 19:47, 29 March 2025 (UTC) :@[[User:Greatswrd|Greatswrd]]: You did it. I've removed the tag. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 22:44, 29 March 2025 (UTC) :Like @[[User:JJPMaster|JJPMaster]] said, you're all set! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:53, 29 March 2025 (UTC) ::Thanks! @[[User:JJPMaster|JJPMaster]] @[[User:Kittycataclysm|Kittycataclysm]] [[User:Greatswrd|Greatswrd]] ([[User talk:Greatswrd|discuss]] • [[Special:Contributions/Greatswrd|contribs]]) 10:24, 30 March 2025 (UTC) == Minecraft book == Is it good creating pages like this, [[Minecraft#Husk]]? [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 12:43, 9 May 2025 (UTC) :@[[User:Cactusisme|Cactusisme]] what do you mean? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:18, 10 May 2025 (UTC) ::are we allowed to create pages like that? like for every mob [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 10:02, 11 May 2025 (UTC) :::To be honest, I don't think the structure and formatting of the book is very good. Several of the mob pages, for example, have very little information and aren't particularly helpful on their own. If I were working on it, I would restructure the book. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 14:09, 11 May 2025 (UTC) ::::I am planning to do that. [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 04:19, 12 May 2025 (UTC) == Request to Review Adjusted User Page (XoriantTeam) == Hello [[User:Kittycataclysm|Kittycataclysm]], I hope you're well. I noticed that my user page ([[User:XoriantTeam]]) was recently deleted for appearing promotional or inappropriate for Wikibooks. Thank you for keeping the community standards in check. I’ve since revised the content with closer attention to neutrality and compliance with Wikibooks guidelines. My intent is to participate constructively, especially in areas related to digital engineering and educational content creation. If possible, I’d appreciate your help reviewing the revised version. I'm happy to share it or upload it as a file if there’s a preferred method. Please let me know how best to proceed. I welcome any suggestions and will gladly make further adjustments. Best regards, XoriantTeam [[User:XoriantTeam|XoriantTeam]] ([[User talk:XoriantTeam|discuss]] • [[Special:Contributions/XoriantTeam|contribs]]) 11:02, 15 May 2025 (UTC) :Hi there—you can publish an updated user page, but I'd caution you against talking about your company. Keep it limited to your involvement with Wikibooks. You may contribute productively here, but further promotional materials are grounds for an indefinite block. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:30, 15 May 2025 (UTC) == Planning to use AWB to update categories on the cookbook == Hello. I noticed in recent changes that you were moving some categories using HotCat (e.g. moving Category:Chile recipes to Category:Recipes using chile), which can be time-consuming. Therefore, I plan to help you with moving the cookbook categories by adding myself to enabledusers and enabledbots in [[Wikibooks:AutoWikiBrowser/CheckPageJSON]]. Would this be fine if I assist you and to add myself to the check page? I am familiar with using AWB after testing on a non-Wikimedia project. Thank you. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 04:42, 8 June 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—thank you for the tip! I just installed JWB, so this should make my mass cat changes much faster. Thanks again! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:11, 8 June 2025 (UTC) :: Thank you for the information. Also, is it okay if I change (for example) [[:Category:Vinegar recipes]] to [[:Category:Recipes using vinegar]] (I can redirect the former category to the latter), given that we should move {{tq|Category:[ingredient] recipes}} to {{tq|Category:Recipes using [ingredient]}} for consistency? [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:57, 8 June 2025 (UTC) :::Sure thing—go ahead! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:53, 8 June 2025 (UTC) == Tool for even faster category changes == See [[:c:Help:Gadget-Cat-a-lot#As_your_user_gadget]]. I just [https://en.wikibooks.org/w/index.php?title=User:Koavf/common.js&action=history installed it] and used it dozens of times in a click. Let me know if you need any help. —[[User:Koavf|Justin (<span style="color:grey">ko'''a'''vf</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 00:36, 19 June 2025 (UTC) :@[[User:Koavf|Koavf]] Thanks! I'm having a little trouble activating it, but I'll keep trying. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:54, 19 June 2025 (UTC) ::A lot of times, a purge will do the trick. See [[:mw:Purge]]. Usually just <kbd>Ctrl+Shift+R</kbd> once or twice. —[[User:Koavf|Justin (<span style="color:grey">ko'''a'''vf</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 00:55, 19 June 2025 (UTC) :::Took several purges, but we're set now! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:16, 19 June 2025 (UTC) == Advice on when I should run for adminship == Hi, I hope you are doing well. I am asking for some advice on when I should run for enwikibooks adminship, given the following below: Currently, I am doing some optimizations for dark mode on this project, and some of the message box/MediaWiki interface/template pages might be outdated, fully protected, or can use a little help using mw-parser-output. These unfortunately might hinder the process of updating these pages/templates for Vector 2022's dark mode.<br> Additionally, I have a solid expertise with edit filters, as I have requested some administrators to update deprecated filter variables, switching filters from warn and disallow to disallow only, and I can also monitor the filter log for potential false positives (from local or global filters). A fellow English Wikibooks administrator also said to me that they are willing to support me in a few months when I run for adminship, as I am generally trusted. I hold two advanced global permissions, and I hold an edit filter helper permission on the English Wikipedia, to be sure. Thank you for your consideration. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 01:02, 23 June 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—good question! I agree that you are a trusted user, and I think it would be reasonable for you to run for adminship, especially given our need to fix up technical aspects of the project. If you don't plan to commit to Wikibooks long-term (i.e. you have some projects you'd like to take a few months to complete and then be done), you can always request temporary adminship. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:30, 23 June 2025 (UTC) :: Thank you for your feedback, but I also plan to monitor for vandalism/spam, and to commit to reduce the administrative assistance reading room backlog, should I be elected for adminship (and I forgot to mention those). Anyway, regarding your feedback, I might run by August or even July, given that I've lately started contributing more often to Wikibooks. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:29, 23 June 2025 (UTC) ::: [[User:Kittycataclysm|Kittycataclysm]], I am pinging you one more time to see if you have read my response above yours. Thank you. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:34, 26 June 2025 (UTC) ::::Hi @[[User:Codename Noreste|Codename Noreste]]! I'm not sure what you mean—was there an additional question you had? Everything you've outlined seems quite reasonable. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:26, 26 June 2025 (UTC) ::::: Apologies for the confusion, I don't have any questions to ask. I was clarifying that I can help with implementing edit requests and to block obvious vandals and spammers, aside from the skills I mentioned earlier. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:32, 26 June 2025 (UTC) == how is it you feel able to interfere in my sandbox? == you deleted a page in my sandbox that was my way of providing my response to a request from an OpenSCAD dev team leader for a couple of text blurbs for use on a web page of the OpenSCAD site. now that you have deleted my page i have to recreate the texts from a screenshot to be able to offer the suggestions, which i will This kind of high handed treatment is what keeps me from being a wiki-anything contributor .. If it is Wiki policy to interfere in the documentation of an open source project because it is hosted on Wikibooks then i will take up the task of moving our online docs to a site where you cannot interfere. -- [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 21:56, 29 June 2025 (UTC) :Hi @[[User:VulcanWikiEdit|VulcanWikiEdit]]—thanks for bringing this to my attention. I now understand that this was intended to be in your user namespace—I've undeleted it and moved it to the correct namespace for you. Let me know if anything else comes up! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:05, 30 June 2025 (UTC) ::ah .. err .. umm .. well that is a gentle answer to my ire. Thanks for being so gracious [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 20:29, 30 June 2025 (UTC) ::and .. isn't my sandbox in my namespace by default? [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 20:30, 30 June 2025 (UTC) :::No worries—it looks like you didn't add the prefix "User:" before writing out the full page titles, so the pages you created were technically in the project's Main space with the official published materials. Going forward, you can just double-check that the page title starts with "'''User:'''VulcanWikiEdit/sandbox", and that should keep everything in the right place! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:36, 30 June 2025 (UTC) ::::BTW .. i love the play on cat lover name [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 15:35, 1 July 2025 (UTC) :::::Thank you! That's very kind. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:46, 1 July 2025 (UTC) == Regarding the user Codename Tameirao == Could this be Matthew again (the Unicode LTA)? I believe it might be him based on his usage of edit summaries, and his usual edits to [[Unicode/Versions]]. I just blocked his recent account, and then I protected and stabilized that Unicode book. <span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 23:51, 12 August 2025 (UTC) :I suspect you're right! That seems like a reasonable course of action. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:56, 13 August 2025 (UTC) :: I recently encountered another possible LTA, see [[Special:Contributions/~2025-55706-6]] (as well as [[Unicode/Roadmap Blocks]]). I can email you more details if you want. <span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 16:30, 9 September 2025 (UTC) :::I think this is the same LTA, yes! I've protected [[Unicode/Roadmap Blocks]], but I think it would be a good idea if we could automate this monitoring somewhat using the edit filter. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:07, 9 September 2025 (UTC) :::: I don't think that was Matthew, as he typically uses edit summaries. The deleted page was not protected, as it was protected before you deleted it; I salted it from creation for one year. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 20:22, 9 September 2025 (UTC) ::::: You might want to look at [[Special:Contributions/Freddy Fazbearing Others]]. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 04:18, 26 October 2025 (UTC) ::::::Thank you! I went ahead and blocked them. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:54, 28 October 2025 (UTC) == IP block exempt == Hi Kitty, I currently have IP block exemption on enwiki, Commons and Wikidata as I use VPNs connected to my internet security software. Can you please grant me the right on wikibooks. I have a strong password and use two factor authentication. ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 10:51, 22 August 2025 (UTC) :Hi @[[User:TarnishedPath|TarnishedPath]]! This doesn't sound unreasonable to me, but I think it would be good if you requested at [[Wikibooks:Requests for permissions]] so we can have a discussion—I have not granted this right before. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:50, 23 August 2025 (UTC) ::Kitty, thanks for pointing me in the right direction. ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 03:25, 23 August 2025 (UTC) ::See [[Wikibooks:Requests_for_permissions#TarnishedPath_(discuss_·_contribs_·_count_·_logs_·_block_log_·_rfp_·_rights)_(IP_Block_Exemption)]] ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 03:35, 23 August 2025 (UTC) == You've got mail! == {{You've got mail|sig=<span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 00:20, 6 September 2025 (UTC)}} :Thank you! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:06, 6 September 2025 (UTC) == Are you able to import? == I made a few requests over at https://en.wikibooks.org/wiki/Wikibooks:Requests_for_import . [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 22:32, 4 October 2025 (UTC) : [[User:2005-Fan|2005-Fan]], I'll go ahead and start the imports. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:29, 5 October 2025 (UTC) ::Thank you for your help [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 16:51, 5 October 2025 (UTC) ::: My apologies for not doing this sooner, because some database error appears when I am trying to mass import. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:39, 5 October 2025 (UTC) ::::I also tried to make this import earlier and ran into issues with the software. I was hoping it was a temporary bug, but it seems to be persisting. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:01, 6 October 2025 (UTC) :::::This seems like I should get involved. {{working}}... [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:11, 6 October 2025 (UTC) :::::: I believe there are five pages that have massive page histories they fail to import here. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 15:13, 6 October 2025 (UTC) :::::::I backed up the XMLs of them locally but im unsure how much that'd do. [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 15:18, 6 October 2025 (UTC) ::::::::Just became an importer. The reason is prob understandable but I cannot upload the XML file to here locally. [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 17:23, 10 October 2025 (UTC) == About the category parameter in the recipe summary template == When it uses a "recipe by type" category, should it use a "[type/food] recipes" name or "Recipes for [type/food]"? I recently operated JWB to change from [[:Category:Dessert recipes]] to [[:Category:Recipes for dessert]] in multiple Cookbook recipes, and from what I've said before, I've changed to ''Recipes for dessert'' in the category parameter of Cookbook recipes. Hope you don't mind that this was over more than 250 changes (not counting the recent category changes after moving some recipe categories). Thanks. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 02:07, 27 October 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—those JWB changes you made seem fine to me! I'm not quite sure what you're asking in your first sentence, though. Assuming I understand correctly: in general, I think the default format should be whatever the actual category name is. BUT if there is a redirect, it ultimately shouldn't matter too much. And, because I'm not convinced of the utility of that infobox parameter in the first place (thinking of removing it), I'm not hugely concerned about it for the time being. Does this help? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:21, 27 October 2025 (UTC) :: Probably, but I will say the following below (for my first sentence) to clarify: :: On the <code>|category =</code> parameter, when placing a recipe category name, should it either be {{tq|Sandwich recipes}} or {{tq|Recipes for sandwiches}}? I hope this clears the confusion. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:39, 27 October 2025 (UTC) == Please no more Unicode LTA == Please don't block me again. I promise I will edit Unicode stuff and add correct information. [[Special:Contributions/&#126;2025-30839-28|&#126;2025-30839-28]] ([[User talk:&#126;2025-30839-28|talk]]) 20:54, 1 November 2025 (UTC) :<small>I am a bit out of the loop, so correct me if I'm wrong - I'm assuming here</small> I think the point is that they want you to ''not'' edit the Unicode stuff? Also hi kitty, it's been a ... very long time.. <sup>&#8212; [[User:L10nM4st3r|<span style="color:#c71300">L10nM4st3r</span>]]</sup> / <sub>[[User talk:L10nM4st3r|<span style="color:#ce3f00">'''ROAR''' at me!</span>]]</sub> 01:13, 5 November 2025 (UTC) ::Ok so apparently not as long as I thought, but it feels like I've been away for at least a year lol <sup>&#8212; [[User:L10nM4st3r|<span style="color:#c71300">L10nM4st3r</span>]]</sup> / <sub>[[User talk:L10nM4st3r|<span style="color:#ce3f00">'''ROAR''' at me!</span>]]</sub> 01:23, 5 November 2025 (UTC) :::Nice to see you! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 15:41, 5 November 2025 (UTC) == Administrator and reviewer user right combinations are not needed anymore == Given that administrators can review edits in addition to reviewers, I would suggest for you (and other administrators) to kindly remove the reviewer permission from (own) accounts. What I'm saying is that if one holds administrator and reviewer permissions together, they can remove the reviewer permission from their own account and retain their administrator permission. Thanks. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:06, 11 November 2025 (UTC) :Gotcha—is there a reason it's bad for one user to have both these rights? If so, I can remove my reviewer right. Otherwise, it seems fairly harmless? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:26, 11 November 2025 (UTC) :: The thing is, administrators have the <code>review</code> user right, as well as some permissions in the reviewer user group in the administrator toolset. That means that having the reviewer user group together with the admin user group is redundant. Hope this explains it. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 19:59, 11 November 2025 (UTC) ::: @[[User:Kittycataclysm|Kittycataclysm]] <s>I'll do this tomorrow morning, as well as to remove autoreviewed user permissions from users who are reviewers.</s> ({{doing}}) [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 03:24, 12 November 2025 (UTC) : I have removed the autoreviewed user permission from users who are reviewers. As for administrators, I will do so later today. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 03:40, 13 November 2025 (UTC) == Nesting in Open Book of Ecovillages and Eco Communities == Hi Kittycataclysm, I am editor of wikipedia since 2004. We have the habit if we have a concern using the talk page to clarify the case. I am not sure to delete meaningful content without previous notification and doing major redirection without agreeing the main contributor(s) is an adequate admin act and sign of good manner of host (see [[W:Wikipedia:Etiquette|Wikipedia:Etiquette]].) Yes, It will be not an average book but above the regular. This is the exact case: ''"this may be appropriate, such as with large textbooks that contain subsections with a lot of content."'' ''for to establish good structural and stylistic practices'' I have a data management certification. If you asking it will have 4 nest level on strict purpose. If you saw the introduction of the [[Open Book of Ecovillages and Eco Communities]] is/will be a global collection making effective collaboration over borders and continents. One structured + categorized(!) page for each community willing to show up. The Postal addresses has also same or larger deepness, this is unavoidable (Country/Postal Code/Location/Street/House/floor/door). Here will looks like: '''Eco-comm/Continent/Regio code/Community name''' The goal of this system to open bridge + experience highway for the communities using the same permaculture technics what collected parallelly in [[Open Book of Permaculture]]. That is also part of this knowledge base please dont do simplification steps on that without discussion. I am kindly asking to revert your edits in this book. After that I will put a notification template about "This book is under construction with major changes. Before contributing, please discuss and align your work with at least one of the main contributors listed in the Page History. Common clarifications/ guides are on the primary talk page." Thanks: [[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 02:22, 12 November 2025 (UTC) :Hi @[[User:Rodrigo|Rodrigo]], and thank you both for your contributions and for reaching out! Yes, I did make the following changes to [[Open Book of Ecovillages and Eco Communities]]: :* I moved the pages from the [[Eco-comm]] namespace to the [[Open Book of Ecovillages and Eco Communities]] namespace, since the table of contents and pages for a given book should be under that book's namespace. :* I removed the links to Wikipedia that were on [[Open Book of Ecovillages and Eco Communities]], since outlinking has been discouraged at en.Wikibooks as a matter of practice. Compilations of links may not fall into WB scope as an instructional text, and [[Wikibooks:Requests for deletion/Piano Solo Music: An Encyclopedia|there is precedent for deleting them]]. But, I do see that the tool I used didn't just remove links to enWP, so I will restore the prior revision and ping the tool developer. :* I flagged it as needing denesting—you're right that nested entries can sometimes be appropriate. In this case, I was primarily flagging for a denest because the table of contents needs to be moved onto the main page, and it shouldn't have hidden navigation within the nested portions. :Could you clarify which of these edits you do not agree with so I can make sure they are individually addressed? As an aside, it could be helpful to create a [[Help:Local manuals of style|local manual of style]] for the book in order to clearly outline the expectations. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:59, 12 November 2025 (UTC) ::My main concern not about moving and flagging but '''deleting''' [[Eco-comm]] against [[Wikibooks:Deletion policy]] and not mentioning in the clarification even after my notification. Should I note all administrators [[Wikibooks:Please do not bite the newcomers]] - or will they do speedy deleting one by one until I make them individually addressed? :::The <u> local manual of style</u> development is ongoing together with the sample pages. ::'''MAIN PAGE''' ::The '''Main page''' and '''Namespace''' is the [[Eco-comm]]. The '''Full Title''' or '''Cover''' is [[Open Book of Ecovillages and Eco Communities]]. Because of the high level of nesting the below extra-long-full-text-title to be avoided the Cover page is a redirection with preface/intro etc. ::'''NESTING ''' :::Featured book with 3 level nesting: [[Social and Cultural Foundations of American Education/Educational Change/Theory]] :::5 level nesting example: [[Development Cooperation Handbook/Designing and Executing Projects/Communication Management/Communication Planning/Develop a Conflict Management Strategy]] ::'''Categories''' The [[:Category:Eco-comm]] will let the users make practical sub-categories e.g. [[:Category:Eco-comm/Project/numundo]] [[:Category:Eco-comm/]] ::: ::[[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 03:44, 18 November 2025 (UTC) :::Thank you for elaborating! I'm unfortunately not sure what you mean about deleting [[Eco-comm]]—are you referring to the fact that I moved it without leaving a redirect? Regarding the nesting, I do honestly think those other books you linked should have their navigation denested since I find their format difficult to parse, and they have some navigation issues. Looping in some other active admins (@[[User:Leaderboard|Leaderboard]] @[[User:MarcGarver|MarcGarver]] @[[User:JJPMaster|JJPMaster]] @[[User:Codename Noreste|Codename Noreste]] (@[[User:SHB2000|SHB2000]]) so they can get eyes on this and voice anything they think is important. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 04:12, 18 November 2025 (UTC) ::::It makes no sense to have some crazy abbreviation as a "main page" or "namespace" (whatever that means in this context) for a book in order to allow it to be deep nested. Nobody needs to type the whole name of the nesting because that's what navigation templates do, and it is a simple matter to override the page title. I also take issue with the statement, above, "Before contributing, please discuss and align your work with at least one of the main contributors listed in the Page History." Anybody can edit, and nobody gets to own and control any work. Taken together, this complaint looks like a case of attempting to assert ownership and to operate against the normal practices of Wikibooks. As such, I am completely aligned with the changes made. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 12:49, 18 November 2025 (UTC) :::::That. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 14:59, 18 November 2025 (UTC) ::::Thanks @[[User:MarcGarver|MarcGarver]]@[[User:Leaderboard|Leaderboard]] for the contribution, btw the [[Development Cooperation Handbook/Designing and Executing Projects/Communication Management/Communication Planning/Develop a Conflict Management Strategy]] also looks crazy long, is'nt it? Lets continue in the [[Wikibooks:Reading_room/General]] keeping this page for personal messages. [[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 23:07, 20 November 2025 (UTC) == Deletions of Wikibook subpages == Hello @[[User:Kittycataclysm|Kittycataclysm]], regarding the [[Thesis Writing Guide]] subpage deletions, should I just recreate them when I keep working on them or was there an automatic deletion that we could undo? This document will grow, but really slowly. Best, Tim [[User:TimBorgNetzWerk|TimBorgNetzWerk]] ([[User talk:TimBorgNetzWerk|discuss]] • [[Special:Contributions/TimBorgNetzWerk|contribs]]) 11:37, 16 December 2025 (UTC) :Hi @[[User:TimBorgNetzWerk|TimBorgNetzWerk]]! Since there was so little content on the deleted pages, my recommendation would just be for you to gradually recreate the chapters as you go. Does that make sense? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:54, 17 December 2025 (UTC) ::Makes sense, not my ideal solution, but also not far from it :) The end result will be the same, the in-between will just feel a little bit weird from time to time. ::Thank you for taking time to curate and quality-control Wikibooks - wishing wonderful holidays and a happy new year! [[User:TimBorgNetzWerk|TimBorgNetzWerk]] ([[User talk:TimBorgNetzWerk|discuss]] • [[Special:Contributions/TimBorgNetzWerk|contribs]]) 20:43, 17 December 2025 (UTC) :::Thank you, and happy holidays to you as well :) —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:13, 17 December 2025 (UTC) == help with "Media Literacy and You" == {{re|Kittycataclysm}} What do I need to do to get a quality review of ''[[Media Literacy and You]]'', or whatever is needed to remove <nowiki>{{Qr-em|not clear how this is to be structured as a book}}</nowiki>? I ask, because you added that flag just over 2 hours after I created it. I later found that I had accidentally created it as an anonymous user. I've since started using my standard Wikiname, and I tried to respond to the requests both by creating a discussion on the "Discussion" page associated with that book and by upgrading the content. The upgrades included adding the "Introduction" chapter by revising an article on Wikiversity that convinced me to start this Wikibook. I have other articles that I plan to rewrite to create 9 of the remaining 11 chapters in the current table of contents, as indicated in this table of contents. ??? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 02:23, 8 February 2026 (UTC) :Hi @[[User:DavidMCEddy|DavidMCEddy]]! I removed the query flag, since this is clearly not a test page. I do have concerns about the suitability of this book for Wikibooks, since it seems to be more in line with essays and original research/analysis (which are [[Wikibooks:WIW|out of scope here]]). Wikiversity seems like a very suitable place for them—is there a specific reason you want to move them here? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:24, 8 February 2026 (UTC) ::{{re|Kittycataclysm}} ::This book is intended to accelerate the diffusion of [[w:Media literacy|media literacy]] by making it easier for humans to (a) access training materials and (b) connect with research on the most important issues that concern them and (c) discuss those issues with others who may believe differently in a nonthreatening context that encourages dialogue and a shared search for what can honestly be said about any particular issue. This is an extension of "The wisdom of polarized crowds" discussed in [[Wikipedia:Reliability of Wikipedia]]. ::I don't know about you, but I'm frightened by the collapse of nuclear arms control agreements since the year 2000, by global warming, by the threats of the Trump administration to invade Canada and Greenland, etc. If this book project is successful, it will make a material contribution to reversing these trends -- unless this kind of dialogue is [[v:Responding to a nuclear attack|interrupted by a nuclear war]]. === Who is DavidMCEddy === ::I'm a [[w:Vietnam veteran|Vietnam-era veteran]] with a PhD in statistics and a publication record for which [https://www.researchgate.net/profile/Spencer-Graves-3 ReserchGate has found over 1,200 academic publications that have cited my work.] Since [https://xtools.wmcloud.org/ec/en.wikipedia.org/DavidMCEddy 2010 I have logged] * 6,000+ edits in each of Wikipedia and Wikiversity, * 1,000+ in Wikimedia Commons, * 30,000+ in Wikidata, and * almost 1,000 in other Wikimedia Foundation projects like Wikiquote and edits to the Spanish, French and German Wikipedias. This includes dozens of research reports posted to Wikiversity under [[v:Category:Freedom and abundance]] and 44 posts under [[v:Category:Media reform to improve democracy]] that provide a platform for documenting and discussing 44 episodes of a fortnightly "Media & Democracy" series of 29:00 mm:ss podcasts syndicated for the [https://pacificanetwork.org/stations-2/ Pacifica Radio Network] featuring the opinions of leading experts on the increase in political polarization and violence and what those experts think should be done about this. I've just posted another chapter to [[Media Literacy and You/The impact of the media on political economy since the time of the Pharaohs]]. I hope you will agree that this book can make a positive contribution to Wikibooks and to [[w:Jimmy Wales|Jimbo Wales]]' [[w:Wikipedia:Prime objective|Prime Directive]] to create "a world in which every single person on the planet is given free access to the sum of all human knowledge." Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 01:19, 9 February 2026 (UTC) :@[[User:DavidMCEddy|DavidMCEddy]] Thank you and I understand this, but I am asking why you think this material is more suitable at Wikibooks rather than at Wikiversity. From what I can see, Wikiversity seems like the more appropriate home for it given our [[Wikibooks:WIW|scope]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:59, 9 February 2026 (UTC) ::{{re|Kittycataclysm}} ::"Media Literacy and You" is textbook to support both self study and classes on media literacy. ::I have been posting content to Wikiversity since 2014 and have not encountered support there for books. A search just now turned up a hint of a book on Wikiversity, but I could not easily find anything on how to do it, etc. ::I think this "Media Literacy and You" project would lose the vast majority of its potential if it were not on Wikibooks. ::??? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 02:22, 9 February 2026 (UTC) {{outdent}} {{re|Kittycataclysm}} Will you please help me with the protocols of creating a book on Wikiversity? 1. I have found documentation that claims that Wikiversity supports such. However, the documentation seems incomplete, potentially out of date, etc. For example, I could not see how to follow the instructions for [[Wikiversity:Help:Books#Step 1: Enable the "Book creator" tool]]. So I posted a question to [[Wikiversity:Help talk:Books]]. 2. What do you suggest I do next? :I can create an article on Wikiversity titled, "Media Literacy and You", and port everything I've posted to Wikibooks there, then replace the pages on Wikibooks with redirects to [[Wikiversity:Media Literacy and You]], [[Wikiversity:Media Literacy and You/Introduction]], and [[Wikiversity:Media Literacy and You/The impact of the media on political economy since the time of the Pharaohs]]. :If you think that's the best way to build this book project, great. It would actually be easier for me, because there would be less translation between what I already have on Wikiversity and a version for Wikibooks. (Also, Wikiversity supports <nowiki>{{cite Q|...}}</nowiki>, which I have used extensively for years.) :Thanks for your help. [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 13:26, 9 February 2026 (UTC) :@[[User:DavidMCEddy|DavidMCEddy]] Unfortunately, I am not familiar with the exact workings of Wikiversity, so I can't be much help there. My personal recommendation is that you ask there for help on how best to structure your materials to match the WV requirements. If you'd like some additional opinions/insight, please feel free to also check in at the [[Wikibooks:Reading room/General|reading room]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:22, 10 February 2026 (UTC) ::{{re|Kittycataclysm}} I believe I have finished migrating all of ''Media Literacy and You'' to Wikiversity and replacing the parts of it on Wikibooks with redirects. Comments? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 17:32, 10 February 2026 (UTC) == Thank you! == Heya, thanks for reviewing my stuff! Just to note, the first lesson page was done and so that'll need moving. If you want to discuss anything with me, I am easily reachable on Discord @ xiluosi233. I can explain philosophy, approach, and so on from my teaching experience if you want anything regarding that. [[User:Shira the Mogul|Shira the Mogul]] ([[User talk:Shira the Mogul|discuss]] • [[Special:Contributions/Shira the Mogul|contribs]]) 19:48, 17 February 2026 (UTC) :It appears [[An Introduction to the Han Script]] was moved wrong - should it not be [[General Literary Chinese from Scratch/An Introduction to the Han Script]]? [[User:Shira the Mogul|Shira the Mogul]] ([[User talk:Shira the Mogul|discuss]] • [[Special:Contributions/Shira the Mogul|contribs]]) 19:52, 17 February 2026 (UTC) ::@[[User:Shira the Mogul|Shira the Mogul]] good catch! I accidentally removed more of the title than intended. I've fixed this now. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:18, 18 February 2026 (UTC) == A test request == Just to see whether a recent Luna update turned out as intended, could you briefly revert your [[User:Kittycataclysm/lunaoptions.json|Luna preferences page]] to the first revision? Since you don't appear to have any custom preferences in the first place, I don't think there should be any conflicts. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 01:49, 30 March 2026 (UTC) :Done! But, it seems to have perhaps auto-updated again immediately afterwards. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 15:39, 10 April 2026 (UTC) == Linking == Hi,<br> For my edification, why is a link from [[Cookbook:nettle|nettle]] to [[w:Urtica_dioica|Urtica dioica]] not appropriate? The Wikipedia article has more information & seems relevant.<br> Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 01:53, 24 April 2026 (UTC) :@[[User:PeterEasthope|PeterEasthope]] good question! Wikibooks discourages outlinking, since books should be self-contained units. Instead of linking to [[w:Urtica dioica]], the correct approach would be to flesh out the actual chapter here at Wikibooks. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:34, 24 April 2026 (UTC) ::Should all material in the Wikipedia article about Urtica dioica relevant to cooking be duplicated into the nettle article in the cookbook? Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 02:30, 2 May 2026 (UTC) :::@[[User:PeterEasthope|PeterEasthope]] you could do that, although you should only include information that is sourced. However, I recommend that you wait, because I am coincidentally working on the page right now and fleshing it out significantly. I should publish today. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:40, 2 May 2026 (UTC) ::::The nettle page is better now. Thanks. ::::I still wonder, given that the link to ''The Complete Guide to Edible Wild Plants, ...'' is permitted, why not a link to the botanically oriented page in Wikipedia. What if someone reads the Cookbook article and is interested in the toxin for example? Seems that non-Wikimedia references are more privileged than Wikimedia references. ::::Also, by chance, just noticed the [[w:Nettle_soup|Nettle soup]] article in Wikipedia. Better in the Cookbook? ::::Thx, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 19:10, 5 May 2026 (UTC) :::::Another good question. The reason those books are linked is because they are reputable and topical sources for the subject matter (nettles as used in cooking from an instructional perspective), and the links are part of the citations—this makes it different from a simple outlink to a Wikipedia page. Wikipedia pages should also not be cited themselves as sources. Regarding nettle soup, I don't think it makes sense to have that as a standalone page here in the cookbook due to its encyclopedic tone, and I don't see any recipes there. Does this make sense? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:21, 6 May 2026 (UTC) ::::::Somewhat. Certainly a recipe wouldn't be incongruous in a cookbook. Still seems unhelpful that relevant information in Wikipedia is inaccessible from a Wikibook. In effect there's a "Berlin Wall" between two Wikimedia projects. Would a "See also" section be permissible? ::::::Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 14:00, 7 May 2026 (UTC) == You may be an eligible candidate for the U4C election == <div lang="en" dir="ltr" class="mw-content-ltr"> Greetings, The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] seeks candidates for the 2026 election. The U4C is the global committee responsible for overseeing enforcement of the [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct|Universal Code of Conduct]]. Elections are held annually, if elected a committee member serves for two years. This year the U4C requires candidates to hold administrator rights on at least one wiki, which is why you are being contacted as you appear to hold this right. There are other requirements, such as candidates must be at least 18 years old and may not be employed by the Wikimedia Foundation or other related chapters and affiliates. You can find more information in the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026#Call_for_Candidates|call for candidates on Meta-wiki]]. Additionally, the committee's working language is English; some ability to communicate in English is required. The election opens on 18 May, if you are eligible and interested you have until 10 May to submit your candidacy. There will week between for candidates to answer questions from the community. Voting takes place privately in [[m:Special:MyLanguage/SecurePoll|SecurePoll]], successful candidates must receive at least 60% support. More information is available on [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|the 2026 Elections page]], including timelines and other candidacy information. If you read over the material and consider yourself qualified, please consider submitting your name to run for the committee. If you think someone else in your community might be interested and qualified, please encourage them to run. In partnership with the U4C -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 18:32, 28 April 2026 (UTC) </div> <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/test&oldid=30471751 --> == Undeletion request == Hello, I am writing to request an undeletion of the page Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad. You stated you are a frequent visitor of the Lentis page and are thus familiar with it. This page was part of a class assignment and was in progress at the time of deletion. The work deleted is what we will be graded on for our class, so we would appreciate the restoration. [[User:Yqj3km|Yqj3km]] ([[User talk:Yqj3km|discuss]] • [[Special:Contributions/Yqj3km|contribs]]) 19:36, 4 May 2026 (UTC) :@[[User:Yqj3km|Yqj3km]] see my response below regarding undeletion. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:15, 4 May 2026 (UTC) == Undeletion request == About the page on Lentis called Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad: I, too, request undeletion, please. If the authors made any msitakes, the fault is 100 percent mine, for failing to guide them correctly. Like all chapters in this book, this team's chapter is a class assignment. I will be interested also in the reason for deletion so that I can guide authors better. I want to help my students be constructive contributors. Many thanks! [[User:Norton|Norton]] ([[User talk:Norton|discuss]] • [[Special:Contributions/Norton|contribs]]) 20:03, 4 May 2026 (UTC) :Hi @[[User:Norton|Norton]] and thanks for the ping! I deleted it because it was not titled/filed correctly, so I didn't realize it was part of [[Lentis]]. I have undeleted it and moved it to [[Lentis/Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:14, 4 May 2026 (UTC) ::Many, many thanks, @[[User:Kittycataclysm|Kittycataclysm]]! I am very grateful as always for everything you do for Wikibooks! ::[[User:Norton|Norton]] ([[User talk:Norton|discuss]] • [[Special:Contributions/Norton|contribs]]) 22:27, 4 May 2026 (UTC) == Log in issues == Hi, messaging you as you seem to be the most active admin at the moment. I can't log in (as posted at <bdi>[[Wikibooks:Reading room/Administrative Assistance]] and also on my WP page at</bdi> [[w:User_talk:Xania]]). Seems to be an issue with extra security for admins? I am asked to use my authenticator app (which I can't as I have never set it up for Wikibooks) or a recovery code (which I don't have). Any idea what I should do in this situation? Xania [[Special:Contributions/&#126;2026-28255-89|&#126;2026-28255-89]] ([[User talk:&#126;2026-28255-89|talk]]) 18:21, 10 May 2026 (UTC) :Apologies for missing this yesterday! It seems like we have a few people working on it over in the reading room, and I'll keep track there. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:37, 11 May 2026 (UTC) == Splitting pages == FYI, I untagged [[Art Print Production Methods]] as for splitting: the page is rather small with its 20 KB and does not need splitting, in my view. Ideally, there would be an operationalized, fairly detailed policy on the matter, but I do not know of one. Single-page books are in [[:Category:One-page books]]. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:45, 20 May 2026 (UTC) == <s>Slander</s> == <S>Your tag is slanderous and very easily proven wrong.</s>[https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654455] Given you likely didn't bother to look at the edit history, I would remind you that your given reason that you think it was AI is because you see the chapter is "numbered". That however was 100% my own personal decision after I reviewed my work and thought to myself that I later wrote in the introduction that there is a first to fourth chapter. However I thought to myself that the readers would not be easily made aware of what is meant by first to fourth as I didn't number them - so is why I dedicated an entire edit to make it less ambiguous [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654328]. I should not have to be falsely penalized because I wanted to be more considerate and ensure better clarity. I do however request AI to help me figure out coding like this - [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654329] as I don't know how to link. But I intentionally take great efforts to not rely on AI to write that book and find your wrongful presumptions troubling. [[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 06:00, 15 July 2026 (UTC) :@[[User:JaredMcKenzie|JaredMcKenzie]] thank you for clarifying! I flagged it for review because it matched a common pattern we see associated with LLM use here. If that is not the case, then nothing needs to happen in that respect; however, you will likely want to fix the lists so that they are correctly formatted in the Wikitext and not hard-written—let me know if you have any questions about that. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:14, 16 July 2026 (UTC) ::Yeah, I don't instantly understand what you mean by "correctly formatted" list. At first, I assumed you were referring to chapter 4 - (''Further reading'')? But I think I know what you mean. I made this edit here [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654738] to align with how I see wikibooks typically do lists. Did I fix it? If not, feel free to clarify.[[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 18:35, 16 July 2026 (UTC) ::I thought about how I responded earlier. Even tho I still disagree, I probably shouldn't have used such a tone. I imagine admins like yourself do a lot of work overseeing wiki and the project owes a lot to you guys. So I take back my harsh words, and I hope we're good.[[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 03:38, 17 July 2026 (UTC) :::@[[User:JaredMcKenzie|JaredMcKenzie]] I appreciate that—thank you! And thank you for [[Special:Diff/4654738|making those changes to the lists]], which was indeed what I was referring to. Happy editing! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:31, 17 July 2026 (UTC) == The Geoguide == I literally wrote all of this myself I used no AI if you want to you can highlight the areas that seem way too formal and ill fix them [[User:Kayden Swanson|Kayden Swanson]] ([[User talk:Kayden Swanson|discuss]] • [[Special:Contributions/Kayden Swanson|contribs]]) 04:22, 18 July 2026 (UTC) :Thank you! I have removed the flag. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:41, 20 July 2026 (UTC) == Vandalism == your recent changes may not be constructive. {{Warning}} [[User:Duodeca 12|Duodeca 12]] ([[User talk:Duodeca 12|discuss]] • [[Special:Contributions/Duodeca 12|contribs]]) 20:39, 2 August 2026 (UTC) == Your recent revert == Could you explain [[Special:Diff/4670314]]? This seems to be you ''restoring'' vandalism, which was originally introduced by [[Special:Diff/4669920]]. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 20:06, 15 September 2026 (UTC) :Good catch! Somehow I didn't have the most recent version of a page loaded, and it seems like Luna reverts the most recent edit of a page and not the specific edit you're viewing. The edit in question should be fixed now. Thanks! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:11, 15 September 2026 (UTC) ::Sorry {{PAGENAME}} for butting in here, I hope you don't mind. ::Just wanted to mention that I have had a few similar experiences when editing (not having the most recent version of a page loaded). Once this caused me friction with an admin who was convinced I was willfully undoing their edit. This happened years ago on another wikimedia project. ::Ottawahitech [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 01:18, 16 September 2026 (UTC) == Confirmed user == <s>If this is one, could I perhaps be a confirmed user? The software has not granted me autoconfirmed, despite me having the requirements.</s> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:50, 22 September 2026 (UTC) :This is not needed anymore, thank you! [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:58, 22 September 2026 (UTC) e1ox29h2zznnghat4fk22cfv52j79p2 4671997 4671990 2026-09-23T19:05:59Z ~2026-51353-76 3626695 Undid revision [[Special:Diff/4671990|4671990]] by [[Special:Contributions/Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]]) 4671997 wikitext text/x-wiki {| class="wikitable" |+ ! colspan="3" |Talk Page Archives |- |[[User talk:Kittycataclysm/Archive 2022|2022]] |[[User talk:Kittycataclysm/Archive 2023|2023]] |[[User talk:Kittycataclysm/Archive 2024|2024]] |} == That IP range calculator == Following [[phab:T381138|T381138]], I have now become the maintainer of the IP range calculator you like. You can find it [[toolforge:ftools/general/ip-range-calc.html|here]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 23:10, 9 January 2025 (UTC) :Thank you for the heads-up! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:56, 10 January 2025 (UTC) == A merge and unmerge from two years ago == I was browsing through the history merge log when I saw that you merged [[Cookbook:Chicken Bog]] into [[Cookbook:Chicken Bog I]], and then promptly reverted it. What happened here exactly? Could I correct it? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 15:55, 10 January 2025 (UTC) :Good question! I can't remember what I was trying to do, but it looks like I didn't succeed at what I wanted based on the log comment. You're just trying to history merge to get [[Cookbook:Chicken Bog I]] to have continuity of history? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:35, 10 January 2025 (UTC) ::I think I figured out your mistake: it outright moved the revisions from the first page to the second, rather than copying them. This would have caused the other two [[Cookbook:Chicken Bog]] pages to have incomplete histories. I think the only solution would be to XML import the pre-April 2023 revisions from the first page to the other three, and I'm not sure if that's the best idea, and I am technically unable to do so. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 16:49, 10 January 2025 (UTC) == Undeletion request == I wouldn't be surprised if you expected this, but I'd like to ask you to undelete the subpages of [[Rotorcraft Fundamentals]] you just deleted with the summary "Use of copyrighted work without permission. Please read Terms of Use: page needs to be imported for attribution", so that I can do that. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 19:54, 14 January 2025 (UTC) :Done! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:57, 14 January 2025 (UTC) ::Upon further investigation, this might actually be a rare case where an [[WB:UT|unmerged transwiki]] is ''preferred'' (this is part of why I stopped calling them "bad transwikis"), since only a small portion of the Wikipedia article (with over 2,000 revisions) was copied over. Importation is generally only needed if the ''majority'' of the page is copied across wikis. I'll just leave a null edit providing attribution and add {{tlx|Copied}}. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 21:19, 14 January 2025 (UTC) == Reusing [[Cookbook:8 Desserts in 1 Pan]] on wikiHow == Hi, I am a user on wikiHow, see [[wikihow:User:Xeverything11]]. I would like to create a new recipe on wikiHow. I wanted to let us know if I can give permission to reuse your contributions to this recipe from Wikibooks to wikiHow. I (as a copyright holder) created this recipe on Wikibooks, but you contributed to this recipe. If not, I'll use the revision before you contributed since I was the only author. Wikibooks uses CC-BY-SA 4.0 while wikiHow uses CC-BY-NC-SA 3.0, which both licenses are incompatible due to ShareAlike conditions. Thanks [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 08:27, 15 January 2025 (UTC) :@[[User:Xeverything11|Xeverything11]] I'm personally fine with this as long as proper attribution is given back to the original recipe page here. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:52, 20 January 2025 (UTC) ::I adapted this [[wikihow:Make-8-Desserts-in-1-Pan|recipe]] on wikiHow with attribution, and got a Rising Star (an achievement used for best new articles on wikiHow). Thank you! [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 19:49, 24 January 2025 (UTC) == Wikibooks community == Hi, @[[User:Kittycataclysm|Kittycataclysm]]! I am trying to contribute more to English Wikibooks. My main contributions will focus on the Cookbook, especially on Indonesian recipes. Do you have a community group where we can discuss and share ideas together? I am looking forward to join. Thank you! [[User:Raflinoer32|Raflinoer32]] ([[User talk:Raflinoer32|discuss]] • [[Special:Contributions/Raflinoer32|contribs]]) 08:47, 16 January 2025 (UTC) :@[[User:Raflinoer32|Raflinoer32]] Sorry I missed this, and welcome! Are you asking about a Cookbook-specific area for discussion? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:39, 20 January 2025 (UTC) ::Yes. Do you know place for this? ::Thank you ::[[User:Raflinoer32|Raflinoer32]] ([[User talk:Raflinoer32|discuss]] • [[Special:Contributions/Raflinoer32|contribs]]) 09:41, 21 January 2025 (UTC) :::Honestly, there's not a centralized Cookbook-specific discussion space, especially since there aren't currently a ton of active contributors. Some people ask questions at [[Cookbook talk:Table of Contents]]. I'm currently the most consistently active and involved Cookbook editor, so feel free to ask me questions! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:46, 22 January 2025 (UTC) == Congratulations! == [[File:Admin T-shirt.svg|thumb|You get this now.]] You are now a permanent administrator. Welcome to the team (I am entitled to say this because I technically got the extension a few hours before you did)!{{FBDB}} [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 10:33, 29 January 2025 (UTC) :Thanks :) —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:29, 29 January 2025 (UTC) == Is there a way to contact a Steward on WikiBooks? == Hi {{PAGENAME}}, Is there a way to contact a Steward on WB? I tried to find who the active Stewards are here at [[Special:ActiveUsers?username=&groups%5B%5D=steward&wpFormIdentifier=specialactiveusers]] but nothing shows up. The reason I am asking is that I believe that all individual Wikimania-wikis should have a backward link to the [[Wikimania-wiki]], but I just visited the [[wikimania 2014 wiki]] and could not find this backward link. I tried to ask about this on the [[Wikimania 2014 main-page talk]] but disovered that the Stewards have protected it. Is there a way wikibookians can communicate with Stewards at WB? Thanks in advance for answering this non-urgent question, and apologies for all the red-links which I can bluify if needed. Cheers [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 16:37, 7 February 2025 (UTC) :@[[User:Ottawahitech|Ottawahitech]] You can ask this on somewhere like [[metawiki:Steward requests/Miscellaneous]]. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 17:01, 7 February 2025 (UTC) <s>:@[[User:Ottawahitech|Ottawahitech]] seconding what Leaderboard said—we no longer have any active stewards at enWB.</s> Had a brain fade there and mixed up stewards with bureaucrats. Yes, meta is the place for this. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 7 February 2025 (UTC) ::@Kittycataclysm,@[[User:Leaderboard|Leaderboard]], or anyone else: ::Some wikibookians prefer for various reasons to post only at wb. I myself am indef-blocked at META so could not participate at [[metawiki:Steward requests/Miscellaneous]] even if I waned to. ::Since [[Wikimania]] is a topic of interest to all members of the [[wikimedia movement]] why can't wikibookians talk to thier elected representatives here? [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 20:56, 7 February 2025 (UTC) :::@[[User:Ottawahitech|Ottawahitech]] I can check with the blocking admin to see if they'd be willing to unblock you, if you'd like. The reason things like these are done at Meta is that Meta is a cross-project coordination platform - stewards ''cannot'' be expected to watch every project after all. Now you could message any steward here on Wikibooks if you really wanted to, but that is not normally a good idea. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 02:26, 8 February 2025 (UTC) ::::Wikimania is the annual conference celebrating all the free knowledge projects hosted by the Wikimedia Foundation (WMF). It is a wikimedia initiative which is meant to help all of our projects (including wikibooks), gain more readership, educate more wiki-editors, foster better communications, and much more. The wmf has been hosting a Wikimania-wiki dedicated to each Wikimania annual event since 2004. These wikis contain a wealth of information, but can benefit from wiki-improvements, starting from spelling and grammar errors that detract from their to appeal to the general membership. It would be nice if Stewards paid more attention to it. ::::@[[User:Leaderboard|Leaderboard]], I truly appreciate your offer, but I posted this here not in order to get someone to advocate for one unblocking at META. As I said earlier: ::::* "Some wikibookians prefer for various reasons to post only at wb" ::::* "The reason I am asking is that I believe that all individual Wikimania-wikis should have a backward link to the Wikimania-wiki, but I just visited the wikimania 2014 wiki and could not find this backward link. I tried to ask about this on the Wikimania 2014 main-page talk but disovered that the Stewards have protected it" ::::I would much rather see more wikimedia members question blocking in general at META. One cannot run such large movement of people from different backgrounds and nationalities simply by silencing minorities IMIO. [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 20:12, 8 February 2025 (UTC) == [[Crystal ball]] == That page appears to be a mixture of isolated paragraphs from [[w:Crystal ball|Crystal ball]], hence my tag. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 03:04, 9 February 2025 (UTC) :Yep, that seems correct! I also queried it simply because it does not seem suitable for inclusion at all. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:09, 9 February 2025 (UTC) == Question about an edit suggestion == Hi Kittycataclysm, Thanks for the great work you do as an admin! I wanted to clarify a suggestion you made on a recently published page I’m working on. You recommended splitting it into smaller sections—would you suggest creating separate pages for these sections, or would a higher-level header for some topics be sufficient? Any specific recommendations you have would be greatly appreciated! Here’s the link to the page I’m referring to: [[Funding and Finance of Transportation Projects in the United States of America]] Thank you! [[User:Svrmustafa|Svrmustafa]] ([[User talk:Svrmustafa|discuss]] • [[Special:Contributions/Svrmustafa|contribs]]) 18:19, 18 February 2025 (UTC) :Hi @[[User:Svrmustafa|Svrmustafa]], and thanks for asking! Splitting refers to creating new pages, each with a smaller amount of content. The main page should then contain a table of contents, and each page can contain a navigation template for easier navigation. I'll create the table of contents based on the current work and move some content to one of those pages as an example for you; then, you can do the rest. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:26, 19 February 2025 (UTC) ::Following up on this—I noticed that you use the term "paper". However, technically Wikibooks hosts books not papers, so you should probably change this wording. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:38, 19 February 2025 (UTC) == Talkback == {{Talkback|Cookbook talk:Chilli Crab|Recipe Questions}} [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 09:54, 19 February 2025 (UTC) :@[[User:Kittycataclysm|Kittycataclysm]] I also made [[Cookbook:Prata|this]] [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 10:15, 19 February 2025 (UTC) == Hello == Can you look at my latest recipe? [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 00:10, 28 February 2025 (UTC) :I saw it! It needs a few corrections, which I'll note. What's the origin of the recipe? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:23, 28 February 2025 (UTC) ::@[[User:Kittycataclysm|Kittycataclysm]] How do you write recipe summary, correct headers [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 06:04, 28 February 2025 (UTC) :::Please see [[Cookbook:Policy/Recipe template]]. What's the origin of the recipe? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:08, 28 February 2025 (UTC) ::::ok [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 02:33, 1 March 2025 (UTC) == Cookbook == Hi there, Kittycataclysm. I wandered over here from Wikipedia, and I'm quite enamoured with this cookbook. I noticed you seem to be the one maintaining it, and I thought I'd reach out. Can I really just start cranking out recipes from public domain cookbooks and my family recipes? It's that simple? I was also wondering about the featured recipes section. There's not very many in there, and I imagine there's not very many folks around to do reviews compared to GAR on Wikipedia. How do you handle content review? Thanks. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 01:51, 1 March 2025 (UTC) :Hi @[[User:MediaKyle|MediaKyle]] and welcome! For some context, the Cookbook has been around since the very beginning of Wikibooks, but it had gotten into a bit of disarray over the course of about two decades by the time I found it. I started the long process of overhauling, standardizing, and expanding it just over four years ago—I finished standardizing the recipe formatting and quality a while back and am currently working my way through the ingredient pages before moving on to equipment, techniques, and cuisines. You can absolutely add any public domain recipes as well as your own recipes—they just need to conform to the [[Cookbook:Policy/Recipe template|recipe template]] and [[Cookbook:Policy|Cookbook policy overall]]. It's even better if you've made the recipe and can contribute a nice picture and specific guidance/instructions/notes! Please feel free to ask me any questions. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:27, 1 March 2025 (UTC) ::Oh, and regarding the featured recipes section, I actually haven't gotten around to looking into that yet—there's been a lot to do! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:28, 1 March 2025 (UTC) ::That's great, thanks a lot for your response. This is just delightful. Maybe content review is something that we could collaborate on. There's a lot of recipes in here and it would be nice to know which ones are the best. Question for you, [[:Category:Brown sauces]] is really bothering me. How can I move that to Brown sauce recipes? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:29, 1 March 2025 (UTC) :::Good catch on that category! It seems like it was created two decades ago and never got corrected—feel free to recategorize those recipes. Thank you also for introducing the hideprefix parameter to the category trees—I didn't realize that was an option, and it reduces the visual clutter! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:38, 1 March 2025 (UTC) ::::My pleasure! As I continue to look at the categories, this is actually worse than I thought. We have both [[:Category:Sauce recipes]] and [[:Category:Recipes for condiments]] and I suspect that's just the beginning. I want to go through and categorize everything properly, but the bones aren't even there... How long do I have to be here before it'll let me create and move around categories? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:40, 1 March 2025 (UTC) :::::Regarding the categories, the category overhauling is in progress, since I address the category when I overhaul the associated page. The variation in titling is actually somewhat deliberate—I started changing it from "____ recipes" in certain cases to solve a particular categorization problem. Sometimes, there is an item that is used in recipes as an ingredient but for which there are also recipes. For example, [[:Category:Recipes for bread]] versus [[:Category:Recipes using bread]]. The different naming scheme is necessary to properly delineate the categories, and I'm working on implementing it a bit more consistently as I go. While you're still getting started, it would be great if you could check with me when something looks odd or out of place—that way I can take a look and weigh in on whether that's normal or not and maybe provide some context. Just off the top of my head, I think you will have to wait for autoreview status to make move changes. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:56, 1 March 2025 (UTC) ::::::I see what you're saying, I've been trying to wrap my head around that. Maybe it would be beneficial to try to put together some sort of a Cookbook MOS regarding category structure? It's kind of all over the place right now. Using your bread example, would it perhaps make more sense to have [[:Category:Bread recipes]] and [[:Category:Recipes using bread]]? There would be no ambiguity with just those two categories, but when you add the extra [[:Category:Recipes for bread]], that's when things start getting a little whacky. What do you think? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:05, 1 March 2025 (UTC) :::::::Either that or get rid of [[:Category:Bread recipes]] and keep the other two. But one of these categories gotta go, I reckon. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:07, 1 March 2025 (UTC) ::::::::I see you already had the same thought as me. I think all categories should include "for" or "using". Take for example, [[:Category:Recipes for pancakes]] as opposed to [[:Category:Pancake recipes]]. Well obviously there's no recipes using pancakes. But for something like [[:Category:Recipes for gravy]], there may also be a need for [[:Category:Recipes using gravy]]. The lack of consistency in this regard means the only way to achieve consistency across the categories is by changing them over to that format. Sorry for clogging up your talk page! [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:18, 1 March 2025 (UTC) :::::::::Same heads-up as below—migrating this over to [[Cookbook talk:Table of Contents]] —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:10, 4 March 2025 (UTC) :Also, on [[Cookbook:Table of Contents]], could you please add a wikilink for [[Cookbook:Breakfast]], and maybe add cooknav to the top for seamless navigation between all the top level articles? Can't edit that article yet. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:47, 1 March 2025 (UTC) == More Table of Content Edits == Hello again. I've been going through everything and this is my list of suggestions for edits to the table of contents. Unfortunately there's not much else I can do for now, because without autoconfirmed my ability to change anything is very limited. I was going to ask for someone to check off the confirmed box for me at RfP but I can't post there either, so I guess I'll be back in four days. * Fix Bread wikilink * Remove "Creaming" from techniques, redirected to Mixing * [[Cookbook:History of Food and Cooking]] points to redirect, needs capitalized * [[Cookbook:Low-Carb]] points to redirect, needs capitalized * [[Cookbook:Cuisine of the Mediterranean]] to [[Cookbook:Mediterranean Cuisine]] for parity * Remove the S from the cuisine wikilinks on ToC, currently redirecting * Create [[:Category:Lunch recipes]], wikilink to ToC * Wikilink [[Cookbook:Dessert]] under Meals * Get rid of "Brunch"; will just be confusing alongside a breakfast and lunch category * Create [[Cookbook:East Asian Cuisine]] so I can add the recipes from [[:Category:East Asian recipes]] to it; currently is a redlink on the ToC * Change "Introductory Matter" header to just "Introduction" * Appendix and Equipment sections switch places Cheers, [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:46, 1 March 2025 (UTC) :I took the liberty of doing it myself in my userspace. You can just copy it over from [[User:MediaKyle/sandbox]]. Figured I'd save you the trouble of trying to figure out what I'm talking about. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 14:15, 1 March 2025 (UTC) :Circling back to this! It seems like your suggestions are getting at a couple different things. I'll try to go through them point-by-point below: :* {{xt|Fix Bread wikilink}} {{done}} :* {{xt|Remove "Creaming" from techniques, redirected to Mixing}} see below comments on TOC. :* {{xt|Cookbook:History of Food and Cooking points to redirect, needs capitalized}} {{not done}} for now because I don't fully understand the urgency and I want to triage/prioritize things for you, but please feel free to make this change yourself once you can! :* {{xt|Cookbook:Low-Carb points to redirect, needs capitalized}} {{not done}} for same reason as above. :* {{xt|Cookbook:Cuisine of the Mediterranean to Cookbook:Mediterranean Cuisine for parity}} {{not done}} for now just because we do have a lot of cuisine pages that follow the form "Cuisine of ____". It could be good to standardize, and I had been planning to do that once I got around to the cuisines. :* {{xt|Remove the S from the cuisine wikilinks on ToC, currently redirecting}} {{not done}} for same reason as other redirects :* {{xt|Create Category:Lunch recipes, wikilink to ToC}} Not quite sure what you mean here, and I didn't see what it corresponded to in your linked sandbox page :* {{xt|Wikilink Cookbook:Dessert under Meals}} {{done}} :* {{xt|Get rid of "Brunch"; will just be confusing alongside a breakfast and lunch category}} I'm not sure about this—brunch is in many places considered a separate entity, and I don't necessarily think it would cause confusion. But, overall it's hard to determine whether it should have its own page and TOC link because I haven't actually gotten around to evaluating the meal pages and what role they should play. See also the TOC notes below. :* {{xt|Create Cookbook:East Asian Cuisine so I can add the recipes from Category:East Asian recipes to it; currently is a redlink on the ToC}} {{done}} for now; however, I'm not sure yet whether it will ultimately make sense to keep that as a content page. I think content pages should be reasonably focused, and it may not be the best to have a cuisine page that is so broad. This is something I planned to consider once I made my way around the overhauling the cuisines. :* {{xt|Change "Introductory Matter" header to just "Introduction"}} The reason I made it "Introductory Matter" instead of "Introduction" is because there's already a chapter itself titled "Introduction"—it felt odd to have the entire section titled that as well. Happy to discuss other header options (e.g. "Front Matter", which is a generally accepted book term) :* {{xt|Appendix and Equipment sections switch places}} see below comments on TOC. :* '''Comments on the TOC:''' So, I think a fundamental issue with the current TOC is that it somewhat arbitrarily picks and chooses individual pages to link. It also sometimes direct-links to categories and sometimes to content pages, which I don't think we should do. Because the cookbook is so expansive, it's been established that manual indices intending to capture detail in large areas don't really make sense and quickly get bulky and out-of-date. This is why categorytree is such a useful tool! After thinking on it for a while and making some small tweaks, I think I'd ultimately like to overhaul the TOC and come to a solution that keeps a few broad headers/links to the small handful of the primary content pages while perhaps stashing away more detailed and self-updating lists in a collapsible way to reduce clutter but allow for customizable user navigation. Much to think about, and I'll probably workshop some things on the side to see how they feel. :Let me know if I've misunderstood anything! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:24, 3 March 2025 (UTC) ::Thanks for the notes! Here's my thoughts: ::* On the Cuisine titling, it actually seems like [[Cookbook:Cuisine of the Mediterranean]] and [[Cookbook:East Asian cuisines]] are the only ones that don't follow the naming scheme, i.e. "[[Cookbook:African Cuisine]]", and I think that shorter titles are preferable where it makes sense. ::* On your note about East Asian Cuisine, I actually had the same thought after going through the cuisine pages. Having three separate pages for different kinds of Asian cuisine does seem a little silly, doesn't it? Do you think it might be better to combine all of them under one "Asian Cuisine", but put the different locales under separate headers? ::* On Brunch - I honestly think there's way too much ambiguity around what exactly constitutes as "brunch" to keep that in. I feel as though the term brunch more applies to the time you're eating, rather than the kind of food. I think it would be easier to keep meals that include commonly accepted breakfast foods in the Breakfast category, and things that don't fit neatly into that, into the Lunch category. This would prevent any dilemmas in the future where we can't decide whether something is breakfast or brunch. ::* You're right that it looks a little awkward to have the header as Introduction when there's a page called introduction. I still think that to say "Introductory Matter", or "Front Matter" as you mentioned, is a little long-winded and reflects a more academic tone than needed for a cookbook. Upon further reflection, I think maybe rather than worrying about the header at this point, we should perhaps think about trying to compile all of those short introductory type pages into one comprehensive introductory page. Then we likely won't even need a header for it on the ToC. ::* The ToC is definitely a bit cluttered, and it bothers me too that there's a real lack of consistency across whether the wikilinks lead to a page or a category. I'm not sure how I would feel about cutting away too much of the navigation from it, though, because just about every page on there does have a reason to be there, it's just that they're not presented very nicely. Some of it can certainly get nested or combined though. I'll play around with it over the next few days in my sandbox as well and let you know if I come up with anything. ::* As an aside, the first thing on my to-do list once my autoconfirmed comes through is to start subcategorizing all of the recipes so that they're all nicely sorted in the category trees. When you have a chance, I'd love to hear your thoughts on what we should use as the standard naming for categories. Once we determine this, I think we can also take the liberty of updating the cookbook MoS to reflect it. ::Cheers, [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:33, 3 March 2025 (UTC) :::Note: After writing this, I realized what you were getting at about slashing away some of the subpages. Maybe we can come up with a system where all of those subpages are under their main subpage rather than on the ToC. For example, all the Cuisines are under [[Cookbook:Cuisines]], all techniques under [[Cookbook:Cooking Techniques]], to keep the subpages off the main ToC. Also, I wonder if maybe we should try to make a centralized discussion for this somewhere, in case anyone else wants to join in at some point? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:45, 3 March 2025 (UTC) ::::Heads-up: to make it easier to keep track of these and since I think they deserve their own discussions, I'm going to gradually migrate them over individually to [[Cookbook talk:Table of Contents]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:52, 4 March 2025 (UTC) :::::Good idea. Can you remove the semi-protection from that talk page? I see no reason why it should be protected. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 23:23, 4 March 2025 (UTC) == Cookbook ToC == Hi [[User:Kittycataclysm|Kittycataclysm]]. I was just wondering why you didn't respond to my above message, and started a separate sandbox for the ToC instead? It seems as though you don't really want to collaborate. It would be nice if we could work on this together. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 22:43, 2 March 2025 (UTC) :@[[User:MediaKyle|MediaKyle]] thanks for the ping! I'm sorry you feel like I don't want to collaborate—the opposite is true, and please understand that this is good-faith editing. The reason I haven't responded to the above points is mostly since you've been modifying a bunch of content and adding suggestions lately, and I've been working my way through these while continuing with my routine contributions and real life as well—things happen a little more slowly here than on other projects, and I'm the one person dedicated to the cookbook right now. The reason I created that sandbox was because I saw [[Wikibooks:Reading room/General#Modernize the shelves|your comment]] at the reading room and wanted to play around and think about your suggestion without touching the actual TOC. You're right that it's not the best, and it's been something I've been thinking about for a bit now. Please understand also that it can be overwhelming when a new editor unfamiliar with the Cookbook begins making a high volume of edits and suggestions without having much experience with it or its history—this isn't to say that you don't have good ideas or things worth contributing. In fact, you have already made a few helpful changes, as I've mentioned. I just want to do this properly and take the time to evaluate your suggestions together with the current efforts that are underway, and that can take a bit. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:03, 2 March 2025 (UTC) ::Thanks for getting back to me. While I may be new to Wikibooks, I'm certainly not new to MediaWiki, and I've been working with small wiki projects for a number of years. Perhaps it's been a misunderstanding to some degree, but I've found my reception here to be unusually unwelcoming. The way to do this properly, as you said, would be to have discussions and form consensus. Yesterday, when you reached out to me about adding hideroot to the pages, I gave you my rationale and was more than happy to have a discussion about it, but you did not reply. I noticed a similar situation happened with [https://en.wikibooks.org/wiki/User_talk:Ottawahitech#Category_sorting Ottawahitech], regarding category sorting. I'm aware that you're the main person looking after the cookbook right now, which is why I reached out to you right from the get go. ::I understand why you would want to create your own sandbox to play around with options for the ToC, but I'm sure you can understand why it would draw my attention that you would do this without implementing any of the wikilink fixes I mentioned, or making an attempt to discuss it further. This came across to me as not wanting my help. ::I invite you to check out my page on Wikipedia. I've made contributions across quite a wide area of topics there, as well as the other Wikimedia projects, and this is the first time I've encountered any sort of resistance to my contributions. I think Wikibooks has enormous potential, and I'm very excited to contribute to helping it grow. On most projects, this would be something to be encouraged. I don't feel like "I'm sorry that you feel that way" was really an appropriate response. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 23:59, 2 March 2025 (UTC) :::I think you're right that this has been a mix of misunderstanding and miscommunication, and I think I can understand how things came across as unwelcoming! For whatever it's worth, I absolutely plan on circling back to the various discussions at hand (I have all the relevant pages open to return to), but it seems like the order I did things made it seem like I was ignoring you (if I'm understanding correctly). I am pretty busy, so sometimes items on my to-do list do get lost/shunted or it takes me a bit to get around to something—please don't hesitate to give me a ping if it seems like I'm taking a while to get back to something. Looking forward to more collaboration! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:49, 3 March 2025 (UTC) ::::I'm glad you can understand where I'm coming from. To clarify, my intent is not to try to rush you, or to try to push you to make changes that you don't agree with. It's really easy to misinterpret things over the Internet, and I think a short message can go a long way. I apologize if I've caused you any undue stress by coming into the cookbook and unleashing a flurry of alterations, but do rest assured that I'm not married to any of my changes, I'm always open for discussion, and I want to see the cookbook improve just like you do. The great thing about wikis is that no change is permanent. I think we'll have it in tip-top shape in no time! [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 01:19, 3 March 2025 (UTC) == [[Cookbook:Polish Doughnuts (Paczki)]] == Do you see any reason not to just add this to Featured Recipes? At least we know this one works, and it seems like this is now one of the few recipes to have a picture that actually aligns with the recipe used. I was thinking later on we'll come up with a content review system where a couple editors will actually try the recipes nominated for FR, but in the absence of that I'd just add it to the list. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 12:25, 4 March 2025 (UTC) :I'm fine with adding it to the featured recipes. You're right that we'll want to come up with a good system for this going forward, though it's lower down on my personal priority list at moment. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:15, 4 March 2025 (UTC) == [[Cookbook:Cream Cheese American Buttercream]] == Hi! I am a wikiHow user and I am planning to adapt this recipe to wikiHow. Since you contributed to this recipe, I wanted to know if I can get permission to reuse your contributions to this recipe. Thanks. [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 21:41, 4 March 2025 (UTC) :@[[User:Xeverything11|Xeverything11]] that's fine with me as long as proper attribution and linking back to the original recipe page here are included at the top. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:28, 4 March 2025 (UTC) == [[A Companion to Our Literary Journey]] == Hi! I feel that we have started to outline the scope in a clearer and more precise way and that’s the work we are going to do with the students this and for the next years, adding more sections and content. Do you think that would be enough? [[User:Ferdi2005|Ferdi2005]] ([[User talk:Ferdi2005|discuss]] • [[Special:Contributions/Ferdi2005|contribs]]) 22:43, 6 March 2025 (UTC) :Hi @[[User:Ferdi2005|Ferdi2005]]! Yes, this seems to be reasonably outlined. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:51, 7 March 2025 (UTC) == Exercising care with copyright == When deleting a page as a copyright violation, it is important that you '''do not quote any content from the deleted page'''. If you do, then your log entry is itself a copyright violation. I have redacted a recent deletion that you performed because of this. If you want to make sure that none of your past deletions have been problematic for this reason, you can [[quarry:query/90444|run this SQL query]] to get a list of every deletion that could be eligible for redaction. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 18:32, 21 March 2025 (UTC) :Hi @[[User:JJPMaster|JJPMaster]] and thank you for the message. In the most recent instance that I think you're referencing, I do not see any material in the edit summary that posed a significant risk—I don't believe the few listed words would be a copyright concern. However, I do understand your concern! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:31, 21 March 2025 (UTC) == Splitting Pages == Hi I have recently made the book on the [[History of the Nawabs of Bengal]] and you gave a notice on how you believe it should be split into smaller bits. As I am still new to wikibooks I don't know how to do this. Can you please assist me on renaming the page so I can split the page into multiple pages? @[[User:Kittycataclysm|Kittycataclysm]] [[User:Greatswrd|Greatswrd]] ([[User talk:Greatswrd|discuss]] • [[Special:Contributions/Greatswrd|contribs]]) 19:47, 29 March 2025 (UTC) :@[[User:Greatswrd|Greatswrd]]: You did it. I've removed the tag. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 22:44, 29 March 2025 (UTC) :Like @[[User:JJPMaster|JJPMaster]] said, you're all set! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:53, 29 March 2025 (UTC) ::Thanks! @[[User:JJPMaster|JJPMaster]] @[[User:Kittycataclysm|Kittycataclysm]] [[User:Greatswrd|Greatswrd]] ([[User talk:Greatswrd|discuss]] • [[Special:Contributions/Greatswrd|contribs]]) 10:24, 30 March 2025 (UTC) == Minecraft book == Is it good creating pages like this, [[Minecraft#Husk]]? [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 12:43, 9 May 2025 (UTC) :@[[User:Cactusisme|Cactusisme]] what do you mean? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:18, 10 May 2025 (UTC) ::are we allowed to create pages like that? like for every mob [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 10:02, 11 May 2025 (UTC) :::To be honest, I don't think the structure and formatting of the book is very good. Several of the mob pages, for example, have very little information and aren't particularly helpful on their own. If I were working on it, I would restructure the book. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 14:09, 11 May 2025 (UTC) ::::I am planning to do that. [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 04:19, 12 May 2025 (UTC) == Request to Review Adjusted User Page (XoriantTeam) == Hello [[User:Kittycataclysm|Kittycataclysm]], I hope you're well. I noticed that my user page ([[User:XoriantTeam]]) was recently deleted for appearing promotional or inappropriate for Wikibooks. Thank you for keeping the community standards in check. I’ve since revised the content with closer attention to neutrality and compliance with Wikibooks guidelines. My intent is to participate constructively, especially in areas related to digital engineering and educational content creation. If possible, I’d appreciate your help reviewing the revised version. I'm happy to share it or upload it as a file if there’s a preferred method. Please let me know how best to proceed. I welcome any suggestions and will gladly make further adjustments. Best regards, XoriantTeam [[User:XoriantTeam|XoriantTeam]] ([[User talk:XoriantTeam|discuss]] • [[Special:Contributions/XoriantTeam|contribs]]) 11:02, 15 May 2025 (UTC) :Hi there—you can publish an updated user page, but I'd caution you against talking about your company. Keep it limited to your involvement with Wikibooks. You may contribute productively here, but further promotional materials are grounds for an indefinite block. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:30, 15 May 2025 (UTC) == Planning to use AWB to update categories on the cookbook == Hello. I noticed in recent changes that you were moving some categories using HotCat (e.g. moving Category:Chile recipes to Category:Recipes using chile), which can be time-consuming. Therefore, I plan to help you with moving the cookbook categories by adding myself to enabledusers and enabledbots in [[Wikibooks:AutoWikiBrowser/CheckPageJSON]]. Would this be fine if I assist you and to add myself to the check page? I am familiar with using AWB after testing on a non-Wikimedia project. Thank you. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 04:42, 8 June 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—thank you for the tip! I just installed JWB, so this should make my mass cat changes much faster. Thanks again! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:11, 8 June 2025 (UTC) :: Thank you for the information. Also, is it okay if I change (for example) [[:Category:Vinegar recipes]] to [[:Category:Recipes using vinegar]] (I can redirect the former category to the latter), given that we should move {{tq|Category:[ingredient] recipes}} to {{tq|Category:Recipes using [ingredient]}} for consistency? [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:57, 8 June 2025 (UTC) :::Sure thing—go ahead! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:53, 8 June 2025 (UTC) == Tool for even faster category changes == See [[:c:Help:Gadget-Cat-a-lot#As_your_user_gadget]]. I just [https://en.wikibooks.org/w/index.php?title=User:Koavf/common.js&action=history installed it] and used it dozens of times in a click. Let me know if you need any help. —[[User:Koavf|Justin (<span style="color:grey">ko'''a'''vf</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 00:36, 19 June 2025 (UTC) :@[[User:Koavf|Koavf]] Thanks! I'm having a little trouble activating it, but I'll keep trying. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:54, 19 June 2025 (UTC) ::A lot of times, a purge will do the trick. See [[:mw:Purge]]. Usually just <kbd>Ctrl+Shift+R</kbd> once or twice. —[[User:Koavf|Justin (<span style="color:grey">ko'''a'''vf</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 00:55, 19 June 2025 (UTC) :::Took several purges, but we're set now! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:16, 19 June 2025 (UTC) == Advice on when I should run for adminship == Hi, I hope you are doing well. I am asking for some advice on when I should run for enwikibooks adminship, given the following below: Currently, I am doing some optimizations for dark mode on this project, and some of the message box/MediaWiki interface/template pages might be outdated, fully protected, or can use a little help using mw-parser-output. These unfortunately might hinder the process of updating these pages/templates for Vector 2022's dark mode.<br> Additionally, I have a solid expertise with edit filters, as I have requested some administrators to update deprecated filter variables, switching filters from warn and disallow to disallow only, and I can also monitor the filter log for potential false positives (from local or global filters). A fellow English Wikibooks administrator also said to me that they are willing to support me in a few months when I run for adminship, as I am generally trusted. I hold two advanced global permissions, and I hold an edit filter helper permission on the English Wikipedia, to be sure. Thank you for your consideration. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 01:02, 23 June 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—good question! I agree that you are a trusted user, and I think it would be reasonable for you to run for adminship, especially given our need to fix up technical aspects of the project. If you don't plan to commit to Wikibooks long-term (i.e. you have some projects you'd like to take a few months to complete and then be done), you can always request temporary adminship. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:30, 23 June 2025 (UTC) :: Thank you for your feedback, but I also plan to monitor for vandalism/spam, and to commit to reduce the administrative assistance reading room backlog, should I be elected for adminship (and I forgot to mention those). Anyway, regarding your feedback, I might run by August or even July, given that I've lately started contributing more often to Wikibooks. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:29, 23 June 2025 (UTC) ::: [[User:Kittycataclysm|Kittycataclysm]], I am pinging you one more time to see if you have read my response above yours. Thank you. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:34, 26 June 2025 (UTC) ::::Hi @[[User:Codename Noreste|Codename Noreste]]! I'm not sure what you mean—was there an additional question you had? Everything you've outlined seems quite reasonable. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:26, 26 June 2025 (UTC) ::::: Apologies for the confusion, I don't have any questions to ask. I was clarifying that I can help with implementing edit requests and to block obvious vandals and spammers, aside from the skills I mentioned earlier. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:32, 26 June 2025 (UTC) == how is it you feel able to interfere in my sandbox? == you deleted a page in my sandbox that was my way of providing my response to a request from an OpenSCAD dev team leader for a couple of text blurbs for use on a web page of the OpenSCAD site. now that you have deleted my page i have to recreate the texts from a screenshot to be able to offer the suggestions, which i will This kind of high handed treatment is what keeps me from being a wiki-anything contributor .. If it is Wiki policy to interfere in the documentation of an open source project because it is hosted on Wikibooks then i will take up the task of moving our online docs to a site where you cannot interfere. -- [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 21:56, 29 June 2025 (UTC) :Hi @[[User:VulcanWikiEdit|VulcanWikiEdit]]—thanks for bringing this to my attention. I now understand that this was intended to be in your user namespace—I've undeleted it and moved it to the correct namespace for you. Let me know if anything else comes up! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:05, 30 June 2025 (UTC) ::ah .. err .. umm .. well that is a gentle answer to my ire. Thanks for being so gracious [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 20:29, 30 June 2025 (UTC) ::and .. isn't my sandbox in my namespace by default? [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 20:30, 30 June 2025 (UTC) :::No worries—it looks like you didn't add the prefix "User:" before writing out the full page titles, so the pages you created were technically in the project's Main space with the official published materials. Going forward, you can just double-check that the page title starts with "'''User:'''VulcanWikiEdit/sandbox", and that should keep everything in the right place! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:36, 30 June 2025 (UTC) ::::BTW .. i love the play on cat lover name [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 15:35, 1 July 2025 (UTC) :::::Thank you! That's very kind. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:46, 1 July 2025 (UTC) == Regarding the user Codename Tameirao == Could this be Matthew again (the Unicode LTA)? I believe it might be him based on his usage of edit summaries, and his usual edits to [[Unicode/Versions]]. I just blocked his recent account, and then I protected and stabilized that Unicode book. <span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 23:51, 12 August 2025 (UTC) :I suspect you're right! That seems like a reasonable course of action. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:56, 13 August 2025 (UTC) :: I recently encountered another possible LTA, see [[Special:Contributions/~2025-55706-6]] (as well as [[Unicode/Roadmap Blocks]]). I can email you more details if you want. <span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 16:30, 9 September 2025 (UTC) :::I think this is the same LTA, yes! I've protected [[Unicode/Roadmap Blocks]], but I think it would be a good idea if we could automate this monitoring somewhat using the edit filter. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:07, 9 September 2025 (UTC) :::: I don't think that was Matthew, as he typically uses edit summaries. The deleted page was not protected, as it was protected before you deleted it; I salted it from creation for one year. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 20:22, 9 September 2025 (UTC) ::::: You might want to look at [[Special:Contributions/Freddy Fazbearing Others]]. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 04:18, 26 October 2025 (UTC) ::::::Thank you! I went ahead and blocked them. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:54, 28 October 2025 (UTC) == IP block exempt == Hi Kitty, I currently have IP block exemption on enwiki, Commons and Wikidata as I use VPNs connected to my internet security software. Can you please grant me the right on wikibooks. I have a strong password and use two factor authentication. ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 10:51, 22 August 2025 (UTC) :Hi @[[User:TarnishedPath|TarnishedPath]]! This doesn't sound unreasonable to me, but I think it would be good if you requested at [[Wikibooks:Requests for permissions]] so we can have a discussion—I have not granted this right before. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:50, 23 August 2025 (UTC) ::Kitty, thanks for pointing me in the right direction. ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 03:25, 23 August 2025 (UTC) ::See [[Wikibooks:Requests_for_permissions#TarnishedPath_(discuss_·_contribs_·_count_·_logs_·_block_log_·_rfp_·_rights)_(IP_Block_Exemption)]] ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 03:35, 23 August 2025 (UTC) == You've got mail! == {{You've got mail|sig=<span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 00:20, 6 September 2025 (UTC)}} :Thank you! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:06, 6 September 2025 (UTC) == Are you able to import? == I made a few requests over at https://en.wikibooks.org/wiki/Wikibooks:Requests_for_import . [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 22:32, 4 October 2025 (UTC) : [[User:2005-Fan|2005-Fan]], I'll go ahead and start the imports. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:29, 5 October 2025 (UTC) ::Thank you for your help [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 16:51, 5 October 2025 (UTC) ::: My apologies for not doing this sooner, because some database error appears when I am trying to mass import. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:39, 5 October 2025 (UTC) ::::I also tried to make this import earlier and ran into issues with the software. I was hoping it was a temporary bug, but it seems to be persisting. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:01, 6 October 2025 (UTC) :::::This seems like I should get involved. {{working}}... [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:11, 6 October 2025 (UTC) :::::: I believe there are five pages that have massive page histories they fail to import here. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 15:13, 6 October 2025 (UTC) :::::::I backed up the XMLs of them locally but im unsure how much that'd do. [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 15:18, 6 October 2025 (UTC) ::::::::Just became an importer. The reason is prob understandable but I cannot upload the XML file to here locally. [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 17:23, 10 October 2025 (UTC) == About the category parameter in the recipe summary template == When it uses a "recipe by type" category, should it use a "[type/food] recipes" name or "Recipes for [type/food]"? I recently operated JWB to change from [[:Category:Dessert recipes]] to [[:Category:Recipes for dessert]] in multiple Cookbook recipes, and from what I've said before, I've changed to ''Recipes for dessert'' in the category parameter of Cookbook recipes. Hope you don't mind that this was over more than 250 changes (not counting the recent category changes after moving some recipe categories). Thanks. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 02:07, 27 October 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—those JWB changes you made seem fine to me! I'm not quite sure what you're asking in your first sentence, though. Assuming I understand correctly: in general, I think the default format should be whatever the actual category name is. BUT if there is a redirect, it ultimately shouldn't matter too much. And, because I'm not convinced of the utility of that infobox parameter in the first place (thinking of removing it), I'm not hugely concerned about it for the time being. Does this help? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:21, 27 October 2025 (UTC) :: Probably, but I will say the following below (for my first sentence) to clarify: :: On the <code>|category =</code> parameter, when placing a recipe category name, should it either be {{tq|Sandwich recipes}} or {{tq|Recipes for sandwiches}}? I hope this clears the confusion. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:39, 27 October 2025 (UTC) == Please no more Unicode LTA == Please don't block me again. I promise I will edit Unicode stuff and add correct information. [[Special:Contributions/&#126;2025-30839-28|&#126;2025-30839-28]] ([[User talk:&#126;2025-30839-28|talk]]) 20:54, 1 November 2025 (UTC) :<small>I am a bit out of the loop, so correct me if I'm wrong - I'm assuming here</small> I think the point is that they want you to ''not'' edit the Unicode stuff? Also hi kitty, it's been a ... very long time.. <sup>&#8212; [[User:L10nM4st3r|<span style="color:#c71300">L10nM4st3r</span>]]</sup> / <sub>[[User talk:L10nM4st3r|<span style="color:#ce3f00">'''ROAR''' at me!</span>]]</sub> 01:13, 5 November 2025 (UTC) ::Ok so apparently not as long as I thought, but it feels like I've been away for at least a year lol <sup>&#8212; [[User:L10nM4st3r|<span style="color:#c71300">L10nM4st3r</span>]]</sup> / <sub>[[User talk:L10nM4st3r|<span style="color:#ce3f00">'''ROAR''' at me!</span>]]</sub> 01:23, 5 November 2025 (UTC) :::Nice to see you! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 15:41, 5 November 2025 (UTC) == Administrator and reviewer user right combinations are not needed anymore == Given that administrators can review edits in addition to reviewers, I would suggest for you (and other administrators) to kindly remove the reviewer permission from (own) accounts. What I'm saying is that if one holds administrator and reviewer permissions together, they can remove the reviewer permission from their own account and retain their administrator permission. Thanks. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:06, 11 November 2025 (UTC) :Gotcha—is there a reason it's bad for one user to have both these rights? If so, I can remove my reviewer right. Otherwise, it seems fairly harmless? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:26, 11 November 2025 (UTC) :: The thing is, administrators have the <code>review</code> user right, as well as some permissions in the reviewer user group in the administrator toolset. That means that having the reviewer user group together with the admin user group is redundant. Hope this explains it. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 19:59, 11 November 2025 (UTC) ::: @[[User:Kittycataclysm|Kittycataclysm]] <s>I'll do this tomorrow morning, as well as to remove autoreviewed user permissions from users who are reviewers.</s> ({{doing}}) [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 03:24, 12 November 2025 (UTC) : I have removed the autoreviewed user permission from users who are reviewers. As for administrators, I will do so later today. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 03:40, 13 November 2025 (UTC) == Nesting in Open Book of Ecovillages and Eco Communities == Hi Kittycataclysm, I am editor of wikipedia since 2004. We have the habit if we have a concern using the talk page to clarify the case. I am not sure to delete meaningful content without previous notification and doing major redirection without agreeing the main contributor(s) is an adequate admin act and sign of good manner of host (see [[W:Wikipedia:Etiquette|Wikipedia:Etiquette]].) Yes, It will be not an average book but above the regular. This is the exact case: ''"this may be appropriate, such as with large textbooks that contain subsections with a lot of content."'' ''for to establish good structural and stylistic practices'' I have a data management certification. If you asking it will have 4 nest level on strict purpose. If you saw the introduction of the [[Open Book of Ecovillages and Eco Communities]] is/will be a global collection making effective collaboration over borders and continents. One structured + categorized(!) page for each community willing to show up. The Postal addresses has also same or larger deepness, this is unavoidable (Country/Postal Code/Location/Street/House/floor/door). Here will looks like: '''Eco-comm/Continent/Regio code/Community name''' The goal of this system to open bridge + experience highway for the communities using the same permaculture technics what collected parallelly in [[Open Book of Permaculture]]. That is also part of this knowledge base please dont do simplification steps on that without discussion. I am kindly asking to revert your edits in this book. After that I will put a notification template about "This book is under construction with major changes. Before contributing, please discuss and align your work with at least one of the main contributors listed in the Page History. Common clarifications/ guides are on the primary talk page." Thanks: [[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 02:22, 12 November 2025 (UTC) :Hi @[[User:Rodrigo|Rodrigo]], and thank you both for your contributions and for reaching out! Yes, I did make the following changes to [[Open Book of Ecovillages and Eco Communities]]: :* I moved the pages from the [[Eco-comm]] namespace to the [[Open Book of Ecovillages and Eco Communities]] namespace, since the table of contents and pages for a given book should be under that book's namespace. :* I removed the links to Wikipedia that were on [[Open Book of Ecovillages and Eco Communities]], since outlinking has been discouraged at en.Wikibooks as a matter of practice. Compilations of links may not fall into WB scope as an instructional text, and [[Wikibooks:Requests for deletion/Piano Solo Music: An Encyclopedia|there is precedent for deleting them]]. But, I do see that the tool I used didn't just remove links to enWP, so I will restore the prior revision and ping the tool developer. :* I flagged it as needing denesting—you're right that nested entries can sometimes be appropriate. In this case, I was primarily flagging for a denest because the table of contents needs to be moved onto the main page, and it shouldn't have hidden navigation within the nested portions. :Could you clarify which of these edits you do not agree with so I can make sure they are individually addressed? As an aside, it could be helpful to create a [[Help:Local manuals of style|local manual of style]] for the book in order to clearly outline the expectations. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:59, 12 November 2025 (UTC) ::My main concern not about moving and flagging but '''deleting''' [[Eco-comm]] against [[Wikibooks:Deletion policy]] and not mentioning in the clarification even after my notification. Should I note all administrators [[Wikibooks:Please do not bite the newcomers]] - or will they do speedy deleting one by one until I make them individually addressed? :::The <u> local manual of style</u> development is ongoing together with the sample pages. ::'''MAIN PAGE''' ::The '''Main page''' and '''Namespace''' is the [[Eco-comm]]. The '''Full Title''' or '''Cover''' is [[Open Book of Ecovillages and Eco Communities]]. Because of the high level of nesting the below extra-long-full-text-title to be avoided the Cover page is a redirection with preface/intro etc. ::'''NESTING ''' :::Featured book with 3 level nesting: [[Social and Cultural Foundations of American Education/Educational Change/Theory]] :::5 level nesting example: [[Development Cooperation Handbook/Designing and Executing Projects/Communication Management/Communication Planning/Develop a Conflict Management Strategy]] ::'''Categories''' The [[:Category:Eco-comm]] will let the users make practical sub-categories e.g. [[:Category:Eco-comm/Project/numundo]] [[:Category:Eco-comm/]] ::: ::[[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 03:44, 18 November 2025 (UTC) :::Thank you for elaborating! I'm unfortunately not sure what you mean about deleting [[Eco-comm]]—are you referring to the fact that I moved it without leaving a redirect? Regarding the nesting, I do honestly think those other books you linked should have their navigation denested since I find their format difficult to parse, and they have some navigation issues. Looping in some other active admins (@[[User:Leaderboard|Leaderboard]] @[[User:MarcGarver|MarcGarver]] @[[User:JJPMaster|JJPMaster]] @[[User:Codename Noreste|Codename Noreste]] (@[[User:SHB2000|SHB2000]]) so they can get eyes on this and voice anything they think is important. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 04:12, 18 November 2025 (UTC) ::::It makes no sense to have some crazy abbreviation as a "main page" or "namespace" (whatever that means in this context) for a book in order to allow it to be deep nested. Nobody needs to type the whole name of the nesting because that's what navigation templates do, and it is a simple matter to override the page title. I also take issue with the statement, above, "Before contributing, please discuss and align your work with at least one of the main contributors listed in the Page History." Anybody can edit, and nobody gets to own and control any work. Taken together, this complaint looks like a case of attempting to assert ownership and to operate against the normal practices of Wikibooks. As such, I am completely aligned with the changes made. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 12:49, 18 November 2025 (UTC) :::::That. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 14:59, 18 November 2025 (UTC) ::::Thanks @[[User:MarcGarver|MarcGarver]]@[[User:Leaderboard|Leaderboard]] for the contribution, btw the [[Development Cooperation Handbook/Designing and Executing Projects/Communication Management/Communication Planning/Develop a Conflict Management Strategy]] also looks crazy long, is'nt it? Lets continue in the [[Wikibooks:Reading_room/General]] keeping this page for personal messages. [[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 23:07, 20 November 2025 (UTC) == Deletions of Wikibook subpages == Hello @[[User:Kittycataclysm|Kittycataclysm]], regarding the [[Thesis Writing Guide]] subpage deletions, should I just recreate them when I keep working on them or was there an automatic deletion that we could undo? This document will grow, but really slowly. Best, Tim [[User:TimBorgNetzWerk|TimBorgNetzWerk]] ([[User talk:TimBorgNetzWerk|discuss]] • [[Special:Contributions/TimBorgNetzWerk|contribs]]) 11:37, 16 December 2025 (UTC) :Hi @[[User:TimBorgNetzWerk|TimBorgNetzWerk]]! Since there was so little content on the deleted pages, my recommendation would just be for you to gradually recreate the chapters as you go. Does that make sense? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:54, 17 December 2025 (UTC) ::Makes sense, not my ideal solution, but also not far from it :) The end result will be the same, the in-between will just feel a little bit weird from time to time. ::Thank you for taking time to curate and quality-control Wikibooks - wishing wonderful holidays and a happy new year! [[User:TimBorgNetzWerk|TimBorgNetzWerk]] ([[User talk:TimBorgNetzWerk|discuss]] • [[Special:Contributions/TimBorgNetzWerk|contribs]]) 20:43, 17 December 2025 (UTC) :::Thank you, and happy holidays to you as well :) —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:13, 17 December 2025 (UTC) == help with "Media Literacy and You" == {{re|Kittycataclysm}} What do I need to do to get a quality review of ''[[Media Literacy and You]]'', or whatever is needed to remove <nowiki>{{Qr-em|not clear how this is to be structured as a book}}</nowiki>? I ask, because you added that flag just over 2 hours after I created it. I later found that I had accidentally created it as an anonymous user. I've since started using my standard Wikiname, and I tried to respond to the requests both by creating a discussion on the "Discussion" page associated with that book and by upgrading the content. The upgrades included adding the "Introduction" chapter by revising an article on Wikiversity that convinced me to start this Wikibook. I have other articles that I plan to rewrite to create 9 of the remaining 11 chapters in the current table of contents, as indicated in this table of contents. ??? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 02:23, 8 February 2026 (UTC) :Hi @[[User:DavidMCEddy|DavidMCEddy]]! I removed the query flag, since this is clearly not a test page. I do have concerns about the suitability of this book for Wikibooks, since it seems to be more in line with essays and original research/analysis (which are [[Wikibooks:WIW|out of scope here]]). Wikiversity seems like a very suitable place for them—is there a specific reason you want to move them here? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:24, 8 February 2026 (UTC) ::{{re|Kittycataclysm}} ::This book is intended to accelerate the diffusion of [[w:Media literacy|media literacy]] by making it easier for humans to (a) access training materials and (b) connect with research on the most important issues that concern them and (c) discuss those issues with others who may believe differently in a nonthreatening context that encourages dialogue and a shared search for what can honestly be said about any particular issue. This is an extension of "The wisdom of polarized crowds" discussed in [[Wikipedia:Reliability of Wikipedia]]. ::I don't know about you, but I'm frightened by the collapse of nuclear arms control agreements since the year 2000, by global warming, by the threats of the Trump administration to invade Canada and Greenland, etc. If this book project is successful, it will make a material contribution to reversing these trends -- unless this kind of dialogue is [[v:Responding to a nuclear attack|interrupted by a nuclear war]]. === Who is DavidMCEddy === ::I'm a [[w:Vietnam veteran|Vietnam-era veteran]] with a PhD in statistics and a publication record for which [https://www.researchgate.net/profile/Spencer-Graves-3 ReserchGate has found over 1,200 academic publications that have cited my work.] Since [https://xtools.wmcloud.org/ec/en.wikipedia.org/DavidMCEddy 2010 I have logged] * 6,000+ edits in each of Wikipedia and Wikiversity, * 1,000+ in Wikimedia Commons, * 30,000+ in Wikidata, and * almost 1,000 in other Wikimedia Foundation projects like Wikiquote and edits to the Spanish, French and German Wikipedias. This includes dozens of research reports posted to Wikiversity under [[v:Category:Freedom and abundance]] and 44 posts under [[v:Category:Media reform to improve democracy]] that provide a platform for documenting and discussing 44 episodes of a fortnightly "Media & Democracy" series of 29:00 mm:ss podcasts syndicated for the [https://pacificanetwork.org/stations-2/ Pacifica Radio Network] featuring the opinions of leading experts on the increase in political polarization and violence and what those experts think should be done about this. I've just posted another chapter to [[Media Literacy and You/The impact of the media on political economy since the time of the Pharaohs]]. I hope you will agree that this book can make a positive contribution to Wikibooks and to [[w:Jimmy Wales|Jimbo Wales]]' [[w:Wikipedia:Prime objective|Prime Directive]] to create "a world in which every single person on the planet is given free access to the sum of all human knowledge." Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 01:19, 9 February 2026 (UTC) :@[[User:DavidMCEddy|DavidMCEddy]] Thank you and I understand this, but I am asking why you think this material is more suitable at Wikibooks rather than at Wikiversity. From what I can see, Wikiversity seems like the more appropriate home for it given our [[Wikibooks:WIW|scope]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:59, 9 February 2026 (UTC) ::{{re|Kittycataclysm}} ::"Media Literacy and You" is textbook to support both self study and classes on media literacy. ::I have been posting content to Wikiversity since 2014 and have not encountered support there for books. A search just now turned up a hint of a book on Wikiversity, but I could not easily find anything on how to do it, etc. ::I think this "Media Literacy and You" project would lose the vast majority of its potential if it were not on Wikibooks. ::??? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 02:22, 9 February 2026 (UTC) {{outdent}} {{re|Kittycataclysm}} Will you please help me with the protocols of creating a book on Wikiversity? 1. I have found documentation that claims that Wikiversity supports such. However, the documentation seems incomplete, potentially out of date, etc. For example, I could not see how to follow the instructions for [[Wikiversity:Help:Books#Step 1: Enable the "Book creator" tool]]. So I posted a question to [[Wikiversity:Help talk:Books]]. 2. What do you suggest I do next? :I can create an article on Wikiversity titled, "Media Literacy and You", and port everything I've posted to Wikibooks there, then replace the pages on Wikibooks with redirects to [[Wikiversity:Media Literacy and You]], [[Wikiversity:Media Literacy and You/Introduction]], and [[Wikiversity:Media Literacy and You/The impact of the media on political economy since the time of the Pharaohs]]. :If you think that's the best way to build this book project, great. It would actually be easier for me, because there would be less translation between what I already have on Wikiversity and a version for Wikibooks. (Also, Wikiversity supports <nowiki>{{cite Q|...}}</nowiki>, which I have used extensively for years.) :Thanks for your help. [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 13:26, 9 February 2026 (UTC) :@[[User:DavidMCEddy|DavidMCEddy]] Unfortunately, I am not familiar with the exact workings of Wikiversity, so I can't be much help there. My personal recommendation is that you ask there for help on how best to structure your materials to match the WV requirements. If you'd like some additional opinions/insight, please feel free to also check in at the [[Wikibooks:Reading room/General|reading room]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:22, 10 February 2026 (UTC) ::{{re|Kittycataclysm}} I believe I have finished migrating all of ''Media Literacy and You'' to Wikiversity and replacing the parts of it on Wikibooks with redirects. Comments? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 17:32, 10 February 2026 (UTC) == Thank you! == Heya, thanks for reviewing my stuff! Just to note, the first lesson page was done and so that'll need moving. If you want to discuss anything with me, I am easily reachable on Discord @ xiluosi233. I can explain philosophy, approach, and so on from my teaching experience if you want anything regarding that. [[User:Shira the Mogul|Shira the Mogul]] ([[User talk:Shira the Mogul|discuss]] • [[Special:Contributions/Shira the Mogul|contribs]]) 19:48, 17 February 2026 (UTC) :It appears [[An Introduction to the Han Script]] was moved wrong - should it not be [[General Literary Chinese from Scratch/An Introduction to the Han Script]]? [[User:Shira the Mogul|Shira the Mogul]] ([[User talk:Shira the Mogul|discuss]] • [[Special:Contributions/Shira the Mogul|contribs]]) 19:52, 17 February 2026 (UTC) ::@[[User:Shira the Mogul|Shira the Mogul]] good catch! I accidentally removed more of the title than intended. I've fixed this now. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:18, 18 February 2026 (UTC) == A test request == Just to see whether a recent Luna update turned out as intended, could you briefly revert your [[User:Kittycataclysm/lunaoptions.json|Luna preferences page]] to the first revision? Since you don't appear to have any custom preferences in the first place, I don't think there should be any conflicts. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 01:49, 30 March 2026 (UTC) :Done! But, it seems to have perhaps auto-updated again immediately afterwards. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 15:39, 10 April 2026 (UTC) == Linking == Hi,<br> For my edification, why is a link from [[Cookbook:nettle|nettle]] to [[w:Urtica_dioica|Urtica dioica]] not appropriate? The Wikipedia article has more information & seems relevant.<br> Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 01:53, 24 April 2026 (UTC) :@[[User:PeterEasthope|PeterEasthope]] good question! Wikibooks discourages outlinking, since books should be self-contained units. Instead of linking to [[w:Urtica dioica]], the correct approach would be to flesh out the actual chapter here at Wikibooks. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:34, 24 April 2026 (UTC) ::Should all material in the Wikipedia article about Urtica dioica relevant to cooking be duplicated into the nettle article in the cookbook? Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 02:30, 2 May 2026 (UTC) :::@[[User:PeterEasthope|PeterEasthope]] you could do that, although you should only include information that is sourced. However, I recommend that you wait, because I am coincidentally working on the page right now and fleshing it out significantly. I should publish today. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:40, 2 May 2026 (UTC) ::::The nettle page is better now. Thanks. ::::I still wonder, given that the link to ''The Complete Guide to Edible Wild Plants, ...'' is permitted, why not a link to the botanically oriented page in Wikipedia. What if someone reads the Cookbook article and is interested in the toxin for example? Seems that non-Wikimedia references are more privileged than Wikimedia references. ::::Also, by chance, just noticed the [[w:Nettle_soup|Nettle soup]] article in Wikipedia. Better in the Cookbook? ::::Thx, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 19:10, 5 May 2026 (UTC) :::::Another good question. The reason those books are linked is because they are reputable and topical sources for the subject matter (nettles as used in cooking from an instructional perspective), and the links are part of the citations—this makes it different from a simple outlink to a Wikipedia page. Wikipedia pages should also not be cited themselves as sources. Regarding nettle soup, I don't think it makes sense to have that as a standalone page here in the cookbook due to its encyclopedic tone, and I don't see any recipes there. Does this make sense? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:21, 6 May 2026 (UTC) ::::::Somewhat. Certainly a recipe wouldn't be incongruous in a cookbook. Still seems unhelpful that relevant information in Wikipedia is inaccessible from a Wikibook. In effect there's a "Berlin Wall" between two Wikimedia projects. Would a "See also" section be permissible? ::::::Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 14:00, 7 May 2026 (UTC) == You may be an eligible candidate for the U4C election == <div lang="en" dir="ltr" class="mw-content-ltr"> Greetings, The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] seeks candidates for the 2026 election. The U4C is the global committee responsible for overseeing enforcement of the [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct|Universal Code of Conduct]]. Elections are held annually, if elected a committee member serves for two years. This year the U4C requires candidates to hold administrator rights on at least one wiki, which is why you are being contacted as you appear to hold this right. There are other requirements, such as candidates must be at least 18 years old and may not be employed by the Wikimedia Foundation or other related chapters and affiliates. You can find more information in the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026#Call_for_Candidates|call for candidates on Meta-wiki]]. Additionally, the committee's working language is English; some ability to communicate in English is required. The election opens on 18 May, if you are eligible and interested you have until 10 May to submit your candidacy. There will week between for candidates to answer questions from the community. Voting takes place privately in [[m:Special:MyLanguage/SecurePoll|SecurePoll]], successful candidates must receive at least 60% support. More information is available on [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|the 2026 Elections page]], including timelines and other candidacy information. If you read over the material and consider yourself qualified, please consider submitting your name to run for the committee. If you think someone else in your community might be interested and qualified, please encourage them to run. In partnership with the U4C -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 18:32, 28 April 2026 (UTC) </div> <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/test&oldid=30471751 --> == Undeletion request == Hello, I am writing to request an undeletion of the page Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad. You stated you are a frequent visitor of the Lentis page and are thus familiar with it. This page was part of a class assignment and was in progress at the time of deletion. The work deleted is what we will be graded on for our class, so we would appreciate the restoration. [[User:Yqj3km|Yqj3km]] ([[User talk:Yqj3km|discuss]] • [[Special:Contributions/Yqj3km|contribs]]) 19:36, 4 May 2026 (UTC) :@[[User:Yqj3km|Yqj3km]] see my response below regarding undeletion. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:15, 4 May 2026 (UTC) == Undeletion request == About the page on Lentis called Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad: I, too, request undeletion, please. If the authors made any msitakes, the fault is 100 percent mine, for failing to guide them correctly. Like all chapters in this book, this team's chapter is a class assignment. I will be interested also in the reason for deletion so that I can guide authors better. I want to help my students be constructive contributors. Many thanks! [[User:Norton|Norton]] ([[User talk:Norton|discuss]] • [[Special:Contributions/Norton|contribs]]) 20:03, 4 May 2026 (UTC) :Hi @[[User:Norton|Norton]] and thanks for the ping! I deleted it because it was not titled/filed correctly, so I didn't realize it was part of [[Lentis]]. I have undeleted it and moved it to [[Lentis/Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:14, 4 May 2026 (UTC) ::Many, many thanks, @[[User:Kittycataclysm|Kittycataclysm]]! I am very grateful as always for everything you do for Wikibooks! ::[[User:Norton|Norton]] ([[User talk:Norton|discuss]] • [[Special:Contributions/Norton|contribs]]) 22:27, 4 May 2026 (UTC) == Log in issues == Hi, messaging you as you seem to be the most active admin at the moment. I can't log in (as posted at <bdi>[[Wikibooks:Reading room/Administrative Assistance]] and also on my WP page at</bdi> [[w:User_talk:Xania]]). Seems to be an issue with extra security for admins? I am asked to use my authenticator app (which I can't as I have never set it up for Wikibooks) or a recovery code (which I don't have). Any idea what I should do in this situation? Xania [[Special:Contributions/&#126;2026-28255-89|&#126;2026-28255-89]] ([[User talk:&#126;2026-28255-89|talk]]) 18:21, 10 May 2026 (UTC) :Apologies for missing this yesterday! It seems like we have a few people working on it over in the reading room, and I'll keep track there. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:37, 11 May 2026 (UTC) == Splitting pages == FYI, I untagged [[Art Print Production Methods]] as for splitting: the page is rather small with its 20 KB and does not need splitting, in my view. Ideally, there would be an operationalized, fairly detailed policy on the matter, but I do not know of one. Single-page books are in [[:Category:One-page books]]. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:45, 20 May 2026 (UTC) == <s>Slander</s> == <S>Your tag is slanderous and very easily proven wrong.</s>[https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654455] Given you likely didn't bother to look at the edit history, I would remind you that your given reason that you think it was AI is because you see the chapter is "numbered". That however was 100% my own personal decision after I reviewed my work and thought to myself that I later wrote in the introduction that there is a first to fourth chapter. However I thought to myself that the readers would not be easily made aware of what is meant by first to fourth as I didn't number them - so is why I dedicated an entire edit to make it less ambiguous [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654328]. I should not have to be falsely penalized because I wanted to be more considerate and ensure better clarity. I do however request AI to help me figure out coding like this - [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654329] as I don't know how to link. But I intentionally take great efforts to not rely on AI to write that book and find your wrongful presumptions troubling. [[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 06:00, 15 July 2026 (UTC) :@[[User:JaredMcKenzie|JaredMcKenzie]] thank you for clarifying! I flagged it for review because it matched a common pattern we see associated with LLM use here. If that is not the case, then nothing needs to happen in that respect; however, you will likely want to fix the lists so that they are correctly formatted in the Wikitext and not hard-written—let me know if you have any questions about that. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:14, 16 July 2026 (UTC) ::Yeah, I don't instantly understand what you mean by "correctly formatted" list. At first, I assumed you were referring to chapter 4 - (''Further reading'')? But I think I know what you mean. I made this edit here [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654738] to align with how I see wikibooks typically do lists. Did I fix it? If not, feel free to clarify.[[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 18:35, 16 July 2026 (UTC) ::I thought about how I responded earlier. Even tho I still disagree, I probably shouldn't have used such a tone. I imagine admins like yourself do a lot of work overseeing wiki and the project owes a lot to you guys. So I take back my harsh words, and I hope we're good.[[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 03:38, 17 July 2026 (UTC) :::@[[User:JaredMcKenzie|JaredMcKenzie]] I appreciate that—thank you! And thank you for [[Special:Diff/4654738|making those changes to the lists]], which was indeed what I was referring to. Happy editing! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:31, 17 July 2026 (UTC) == The Geoguide == I literally wrote all of this myself I used no AI if you want to you can highlight the areas that seem way too formal and ill fix them [[User:Kayden Swanson|Kayden Swanson]] ([[User talk:Kayden Swanson|discuss]] • [[Special:Contributions/Kayden Swanson|contribs]]) 04:22, 18 July 2026 (UTC) :Thank you! I have removed the flag. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:41, 20 July 2026 (UTC) == Vandalism == your recent changes may not be constructive. {{Warning}} [[User:Duodeca 12|Duodeca 12]] ([[User talk:Duodeca 12|discuss]] • [[Special:Contributions/Duodeca 12|contribs]]) 20:39, 2 August 2026 (UTC) == Your recent revert == Could you explain [[Special:Diff/4670314]]? This seems to be you ''restoring'' vandalism, which was originally introduced by [[Special:Diff/4669920]]. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 20:06, 15 September 2026 (UTC) :Good catch! Somehow I didn't have the most recent version of a page loaded, and it seems like Luna reverts the most recent edit of a page and not the specific edit you're viewing. The edit in question should be fixed now. Thanks! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:11, 15 September 2026 (UTC) ::Sorry {{PAGENAME}} for butting in here, I hope you don't mind. ::Just wanted to mention that I have had a few similar experiences when editing (not having the most recent version of a page loaded). Once this caused me friction with an admin who was convinced I was willfully undoing their edit. This happened years ago on another wikimedia project. ::Ottawahitech [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 01:18, 16 September 2026 (UTC) == Confirmed user == <s>If this is one, could I perhaps be a confirmed user? The software has not granted me autoconfirmed, despite me having the requirements.</s> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:50, 22 September 2026 (UTC) :This is not needed anymore, thank you! [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:58, 22 September 2026 (UTC) == Message == Mom, I want to start by saying I am truly sorry for buying this behind your back and for begging you so much to wear it. I know it wasn’t right to go around you like that, and I promise this is the final time I will ever ask you about it. I know you’ve rejected it before, but I want to ask you to consider rebuying it and trying it on. Sometimes in life, even when someone gives us something we don’t love right away, accepting the gesture with gratitude is what matters most. It's about accepting things because of the love behind them, putting aside the feeling that it's not right, and finding a way to appreciate the thought instead of pretending it's garbage. Even when we don't completely like a gift, we can still accept it and wear it out of love. It reminds me of the time I bought an Ouija board under a WSSRA’s back. When they found out on the day it was supposed to arrive, they cancelled it at first. But they ultimately decided to bring it the next day anyway, just to show they accepted my gift. I didn't even end up playing with it all that much in the end, but the fact that he accepted it meant the world to me. I want you to feel entirely comfortable and safe, and I hope we can just focus on creating joyful memories together. If you're willing to wear it again and try it on, the costume details can be found here: <nowiki>https://www.amazon.com/JcHrmers-Halloween-Costume-Include-Feather/dp/B0H4TW2JTB/ref=sr_1_1?crid=3ISSEP0SNAYF9&dib=eyJ2IjoiMSJ9.D_HPqczOK5orx2YVl1cl_GPVlZ7croscLKyo4iccXzE.t9TNwLmVp1Cd45_WTNvTKXAMQva-p9ENV0n_8oAqHYs&dib_tag=se&keywords=JcHrmers+6+Pcs+Halloween+Macaw+Costume+Include+Fringe+Belly+Dance+Outfit+with+Halter+Top%2CSkirt%2C+Bird+Hat%2CFaux+Feather+Wings+and+Wrist+Cuffs+for+Women+Party+Dress+Up&nsdOptOutParam=true&qid=1789058320&sprefix=jchrmers+6+pcs+halloween+macaw+costume+include+fringe+belly+dance+outfit+with+halter+top%2Cskirt%2C+bird+hat%2Cfaux+feather+wings+and+wrist+cuffs+for+women+party+dress+up%2Caps%2C235&sr=8-1</nowiki> [[Special:Contributions/~2026-51006-30|~2026-51006-30]] ([[User talk:~2026-51006-30|talk]]) 01:56, 23 September 2026 (UTC) od5yuwlk739h850vcu7cqhvuqkaoml9 4672023 4671997 2026-09-24T02:56:58Z Kittycataclysm 3371989 Rollback 1 edit by [[Special:Contributions/~2026-51353-76|~2026-51353-76]]: Vandalism 4671822 wikitext text/x-wiki {| class="wikitable" |+ ! colspan="3" |Talk Page Archives |- |[[User talk:Kittycataclysm/Archive 2022|2022]] |[[User talk:Kittycataclysm/Archive 2023|2023]] |[[User talk:Kittycataclysm/Archive 2024|2024]] |} == That IP range calculator == Following [[phab:T381138|T381138]], I have now become the maintainer of the IP range calculator you like. You can find it [[toolforge:ftools/general/ip-range-calc.html|here]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 23:10, 9 January 2025 (UTC) :Thank you for the heads-up! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:56, 10 January 2025 (UTC) == A merge and unmerge from two years ago == I was browsing through the history merge log when I saw that you merged [[Cookbook:Chicken Bog]] into [[Cookbook:Chicken Bog I]], and then promptly reverted it. What happened here exactly? Could I correct it? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 15:55, 10 January 2025 (UTC) :Good question! I can't remember what I was trying to do, but it looks like I didn't succeed at what I wanted based on the log comment. You're just trying to history merge to get [[Cookbook:Chicken Bog I]] to have continuity of history? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:35, 10 January 2025 (UTC) ::I think I figured out your mistake: it outright moved the revisions from the first page to the second, rather than copying them. This would have caused the other two [[Cookbook:Chicken Bog]] pages to have incomplete histories. I think the only solution would be to XML import the pre-April 2023 revisions from the first page to the other three, and I'm not sure if that's the best idea, and I am technically unable to do so. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 16:49, 10 January 2025 (UTC) == Undeletion request == I wouldn't be surprised if you expected this, but I'd like to ask you to undelete the subpages of [[Rotorcraft Fundamentals]] you just deleted with the summary "Use of copyrighted work without permission. Please read Terms of Use: page needs to be imported for attribution", so that I can do that. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 19:54, 14 January 2025 (UTC) :Done! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:57, 14 January 2025 (UTC) ::Upon further investigation, this might actually be a rare case where an [[WB:UT|unmerged transwiki]] is ''preferred'' (this is part of why I stopped calling them "bad transwikis"), since only a small portion of the Wikipedia article (with over 2,000 revisions) was copied over. Importation is generally only needed if the ''majority'' of the page is copied across wikis. I'll just leave a null edit providing attribution and add {{tlx|Copied}}. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 21:19, 14 January 2025 (UTC) == Reusing [[Cookbook:8 Desserts in 1 Pan]] on wikiHow == Hi, I am a user on wikiHow, see [[wikihow:User:Xeverything11]]. I would like to create a new recipe on wikiHow. I wanted to let us know if I can give permission to reuse your contributions to this recipe from Wikibooks to wikiHow. I (as a copyright holder) created this recipe on Wikibooks, but you contributed to this recipe. If not, I'll use the revision before you contributed since I was the only author. Wikibooks uses CC-BY-SA 4.0 while wikiHow uses CC-BY-NC-SA 3.0, which both licenses are incompatible due to ShareAlike conditions. Thanks [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 08:27, 15 January 2025 (UTC) :@[[User:Xeverything11|Xeverything11]] I'm personally fine with this as long as proper attribution is given back to the original recipe page here. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:52, 20 January 2025 (UTC) ::I adapted this [[wikihow:Make-8-Desserts-in-1-Pan|recipe]] on wikiHow with attribution, and got a Rising Star (an achievement used for best new articles on wikiHow). Thank you! [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 19:49, 24 January 2025 (UTC) == Wikibooks community == Hi, @[[User:Kittycataclysm|Kittycataclysm]]! I am trying to contribute more to English Wikibooks. My main contributions will focus on the Cookbook, especially on Indonesian recipes. Do you have a community group where we can discuss and share ideas together? I am looking forward to join. Thank you! [[User:Raflinoer32|Raflinoer32]] ([[User talk:Raflinoer32|discuss]] • [[Special:Contributions/Raflinoer32|contribs]]) 08:47, 16 January 2025 (UTC) :@[[User:Raflinoer32|Raflinoer32]] Sorry I missed this, and welcome! Are you asking about a Cookbook-specific area for discussion? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:39, 20 January 2025 (UTC) ::Yes. Do you know place for this? ::Thank you ::[[User:Raflinoer32|Raflinoer32]] ([[User talk:Raflinoer32|discuss]] • [[Special:Contributions/Raflinoer32|contribs]]) 09:41, 21 January 2025 (UTC) :::Honestly, there's not a centralized Cookbook-specific discussion space, especially since there aren't currently a ton of active contributors. Some people ask questions at [[Cookbook talk:Table of Contents]]. I'm currently the most consistently active and involved Cookbook editor, so feel free to ask me questions! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:46, 22 January 2025 (UTC) == Congratulations! == [[File:Admin T-shirt.svg|thumb|You get this now.]] You are now a permanent administrator. Welcome to the team (I am entitled to say this because I technically got the extension a few hours before you did)!{{FBDB}} [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 10:33, 29 January 2025 (UTC) :Thanks :) —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:29, 29 January 2025 (UTC) == Is there a way to contact a Steward on WikiBooks? == Hi {{PAGENAME}}, Is there a way to contact a Steward on WB? I tried to find who the active Stewards are here at [[Special:ActiveUsers?username=&groups%5B%5D=steward&wpFormIdentifier=specialactiveusers]] but nothing shows up. The reason I am asking is that I believe that all individual Wikimania-wikis should have a backward link to the [[Wikimania-wiki]], but I just visited the [[wikimania 2014 wiki]] and could not find this backward link. I tried to ask about this on the [[Wikimania 2014 main-page talk]] but disovered that the Stewards have protected it. Is there a way wikibookians can communicate with Stewards at WB? Thanks in advance for answering this non-urgent question, and apologies for all the red-links which I can bluify if needed. Cheers [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 16:37, 7 February 2025 (UTC) :@[[User:Ottawahitech|Ottawahitech]] You can ask this on somewhere like [[metawiki:Steward requests/Miscellaneous]]. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 17:01, 7 February 2025 (UTC) <s>:@[[User:Ottawahitech|Ottawahitech]] seconding what Leaderboard said—we no longer have any active stewards at enWB.</s> Had a brain fade there and mixed up stewards with bureaucrats. Yes, meta is the place for this. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 7 February 2025 (UTC) ::@Kittycataclysm,@[[User:Leaderboard|Leaderboard]], or anyone else: ::Some wikibookians prefer for various reasons to post only at wb. I myself am indef-blocked at META so could not participate at [[metawiki:Steward requests/Miscellaneous]] even if I waned to. ::Since [[Wikimania]] is a topic of interest to all members of the [[wikimedia movement]] why can't wikibookians talk to thier elected representatives here? [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 20:56, 7 February 2025 (UTC) :::@[[User:Ottawahitech|Ottawahitech]] I can check with the blocking admin to see if they'd be willing to unblock you, if you'd like. The reason things like these are done at Meta is that Meta is a cross-project coordination platform - stewards ''cannot'' be expected to watch every project after all. Now you could message any steward here on Wikibooks if you really wanted to, but that is not normally a good idea. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 02:26, 8 February 2025 (UTC) ::::Wikimania is the annual conference celebrating all the free knowledge projects hosted by the Wikimedia Foundation (WMF). It is a wikimedia initiative which is meant to help all of our projects (including wikibooks), gain more readership, educate more wiki-editors, foster better communications, and much more. The wmf has been hosting a Wikimania-wiki dedicated to each Wikimania annual event since 2004. These wikis contain a wealth of information, but can benefit from wiki-improvements, starting from spelling and grammar errors that detract from their to appeal to the general membership. It would be nice if Stewards paid more attention to it. ::::@[[User:Leaderboard|Leaderboard]], I truly appreciate your offer, but I posted this here not in order to get someone to advocate for one unblocking at META. As I said earlier: ::::* "Some wikibookians prefer for various reasons to post only at wb" ::::* "The reason I am asking is that I believe that all individual Wikimania-wikis should have a backward link to the Wikimania-wiki, but I just visited the wikimania 2014 wiki and could not find this backward link. I tried to ask about this on the Wikimania 2014 main-page talk but disovered that the Stewards have protected it" ::::I would much rather see more wikimedia members question blocking in general at META. One cannot run such large movement of people from different backgrounds and nationalities simply by silencing minorities IMIO. [[User:Ottawahitech|Ottawahitech]] ([[User talk:Ottawahitech|discuss]] • [[Special:Contributions/Ottawahitech|contribs]]) 20:12, 8 February 2025 (UTC) == [[Crystal ball]] == That page appears to be a mixture of isolated paragraphs from [[w:Crystal ball|Crystal ball]], hence my tag. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 03:04, 9 February 2025 (UTC) :Yep, that seems correct! I also queried it simply because it does not seem suitable for inclusion at all. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:09, 9 February 2025 (UTC) == Question about an edit suggestion == Hi Kittycataclysm, Thanks for the great work you do as an admin! I wanted to clarify a suggestion you made on a recently published page I’m working on. You recommended splitting it into smaller sections—would you suggest creating separate pages for these sections, or would a higher-level header for some topics be sufficient? Any specific recommendations you have would be greatly appreciated! Here’s the link to the page I’m referring to: [[Funding and Finance of Transportation Projects in the United States of America]] Thank you! [[User:Svrmustafa|Svrmustafa]] ([[User talk:Svrmustafa|discuss]] • [[Special:Contributions/Svrmustafa|contribs]]) 18:19, 18 February 2025 (UTC) :Hi @[[User:Svrmustafa|Svrmustafa]], and thanks for asking! Splitting refers to creating new pages, each with a smaller amount of content. The main page should then contain a table of contents, and each page can contain a navigation template for easier navigation. I'll create the table of contents based on the current work and move some content to one of those pages as an example for you; then, you can do the rest. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:26, 19 February 2025 (UTC) ::Following up on this—I noticed that you use the term "paper". However, technically Wikibooks hosts books not papers, so you should probably change this wording. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:38, 19 February 2025 (UTC) == Talkback == {{Talkback|Cookbook talk:Chilli Crab|Recipe Questions}} [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 09:54, 19 February 2025 (UTC) :@[[User:Kittycataclysm|Kittycataclysm]] I also made [[Cookbook:Prata|this]] [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 10:15, 19 February 2025 (UTC) == Hello == Can you look at my latest recipe? [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 00:10, 28 February 2025 (UTC) :I saw it! It needs a few corrections, which I'll note. What's the origin of the recipe? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:23, 28 February 2025 (UTC) ::@[[User:Kittycataclysm|Kittycataclysm]] How do you write recipe summary, correct headers [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 06:04, 28 February 2025 (UTC) :::Please see [[Cookbook:Policy/Recipe template]]. What's the origin of the recipe? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:08, 28 February 2025 (UTC) ::::ok [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 02:33, 1 March 2025 (UTC) == Cookbook == Hi there, Kittycataclysm. I wandered over here from Wikipedia, and I'm quite enamoured with this cookbook. I noticed you seem to be the one maintaining it, and I thought I'd reach out. Can I really just start cranking out recipes from public domain cookbooks and my family recipes? It's that simple? I was also wondering about the featured recipes section. There's not very many in there, and I imagine there's not very many folks around to do reviews compared to GAR on Wikipedia. How do you handle content review? Thanks. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 01:51, 1 March 2025 (UTC) :Hi @[[User:MediaKyle|MediaKyle]] and welcome! For some context, the Cookbook has been around since the very beginning of Wikibooks, but it had gotten into a bit of disarray over the course of about two decades by the time I found it. I started the long process of overhauling, standardizing, and expanding it just over four years ago—I finished standardizing the recipe formatting and quality a while back and am currently working my way through the ingredient pages before moving on to equipment, techniques, and cuisines. You can absolutely add any public domain recipes as well as your own recipes—they just need to conform to the [[Cookbook:Policy/Recipe template|recipe template]] and [[Cookbook:Policy|Cookbook policy overall]]. It's even better if you've made the recipe and can contribute a nice picture and specific guidance/instructions/notes! Please feel free to ask me any questions. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:27, 1 March 2025 (UTC) ::Oh, and regarding the featured recipes section, I actually haven't gotten around to looking into that yet—there's been a lot to do! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:28, 1 March 2025 (UTC) ::That's great, thanks a lot for your response. This is just delightful. Maybe content review is something that we could collaborate on. There's a lot of recipes in here and it would be nice to know which ones are the best. Question for you, [[:Category:Brown sauces]] is really bothering me. How can I move that to Brown sauce recipes? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:29, 1 March 2025 (UTC) :::Good catch on that category! It seems like it was created two decades ago and never got corrected—feel free to recategorize those recipes. Thank you also for introducing the hideprefix parameter to the category trees—I didn't realize that was an option, and it reduces the visual clutter! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:38, 1 March 2025 (UTC) ::::My pleasure! As I continue to look at the categories, this is actually worse than I thought. We have both [[:Category:Sauce recipes]] and [[:Category:Recipes for condiments]] and I suspect that's just the beginning. I want to go through and categorize everything properly, but the bones aren't even there... How long do I have to be here before it'll let me create and move around categories? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:40, 1 March 2025 (UTC) :::::Regarding the categories, the category overhauling is in progress, since I address the category when I overhaul the associated page. The variation in titling is actually somewhat deliberate—I started changing it from "____ recipes" in certain cases to solve a particular categorization problem. Sometimes, there is an item that is used in recipes as an ingredient but for which there are also recipes. For example, [[:Category:Recipes for bread]] versus [[:Category:Recipes using bread]]. The different naming scheme is necessary to properly delineate the categories, and I'm working on implementing it a bit more consistently as I go. While you're still getting started, it would be great if you could check with me when something looks odd or out of place—that way I can take a look and weigh in on whether that's normal or not and maybe provide some context. Just off the top of my head, I think you will have to wait for autoreview status to make move changes. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:56, 1 March 2025 (UTC) ::::::I see what you're saying, I've been trying to wrap my head around that. Maybe it would be beneficial to try to put together some sort of a Cookbook MOS regarding category structure? It's kind of all over the place right now. Using your bread example, would it perhaps make more sense to have [[:Category:Bread recipes]] and [[:Category:Recipes using bread]]? There would be no ambiguity with just those two categories, but when you add the extra [[:Category:Recipes for bread]], that's when things start getting a little whacky. What do you think? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:05, 1 March 2025 (UTC) :::::::Either that or get rid of [[:Category:Bread recipes]] and keep the other two. But one of these categories gotta go, I reckon. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:07, 1 March 2025 (UTC) ::::::::I see you already had the same thought as me. I think all categories should include "for" or "using". Take for example, [[:Category:Recipes for pancakes]] as opposed to [[:Category:Pancake recipes]]. Well obviously there's no recipes using pancakes. But for something like [[:Category:Recipes for gravy]], there may also be a need for [[:Category:Recipes using gravy]]. The lack of consistency in this regard means the only way to achieve consistency across the categories is by changing them over to that format. Sorry for clogging up your talk page! [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 03:18, 1 March 2025 (UTC) :::::::::Same heads-up as below—migrating this over to [[Cookbook talk:Table of Contents]] —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:10, 4 March 2025 (UTC) :Also, on [[Cookbook:Table of Contents]], could you please add a wikilink for [[Cookbook:Breakfast]], and maybe add cooknav to the top for seamless navigation between all the top level articles? Can't edit that article yet. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 02:47, 1 March 2025 (UTC) == More Table of Content Edits == Hello again. I've been going through everything and this is my list of suggestions for edits to the table of contents. Unfortunately there's not much else I can do for now, because without autoconfirmed my ability to change anything is very limited. I was going to ask for someone to check off the confirmed box for me at RfP but I can't post there either, so I guess I'll be back in four days. * Fix Bread wikilink * Remove "Creaming" from techniques, redirected to Mixing * [[Cookbook:History of Food and Cooking]] points to redirect, needs capitalized * [[Cookbook:Low-Carb]] points to redirect, needs capitalized * [[Cookbook:Cuisine of the Mediterranean]] to [[Cookbook:Mediterranean Cuisine]] for parity * Remove the S from the cuisine wikilinks on ToC, currently redirecting * Create [[:Category:Lunch recipes]], wikilink to ToC * Wikilink [[Cookbook:Dessert]] under Meals * Get rid of "Brunch"; will just be confusing alongside a breakfast and lunch category * Create [[Cookbook:East Asian Cuisine]] so I can add the recipes from [[:Category:East Asian recipes]] to it; currently is a redlink on the ToC * Change "Introductory Matter" header to just "Introduction" * Appendix and Equipment sections switch places Cheers, [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:46, 1 March 2025 (UTC) :I took the liberty of doing it myself in my userspace. You can just copy it over from [[User:MediaKyle/sandbox]]. Figured I'd save you the trouble of trying to figure out what I'm talking about. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 14:15, 1 March 2025 (UTC) :Circling back to this! It seems like your suggestions are getting at a couple different things. I'll try to go through them point-by-point below: :* {{xt|Fix Bread wikilink}} {{done}} :* {{xt|Remove "Creaming" from techniques, redirected to Mixing}} see below comments on TOC. :* {{xt|Cookbook:History of Food and Cooking points to redirect, needs capitalized}} {{not done}} for now because I don't fully understand the urgency and I want to triage/prioritize things for you, but please feel free to make this change yourself once you can! :* {{xt|Cookbook:Low-Carb points to redirect, needs capitalized}} {{not done}} for same reason as above. :* {{xt|Cookbook:Cuisine of the Mediterranean to Cookbook:Mediterranean Cuisine for parity}} {{not done}} for now just because we do have a lot of cuisine pages that follow the form "Cuisine of ____". It could be good to standardize, and I had been planning to do that once I got around to the cuisines. :* {{xt|Remove the S from the cuisine wikilinks on ToC, currently redirecting}} {{not done}} for same reason as other redirects :* {{xt|Create Category:Lunch recipes, wikilink to ToC}} Not quite sure what you mean here, and I didn't see what it corresponded to in your linked sandbox page :* {{xt|Wikilink Cookbook:Dessert under Meals}} {{done}} :* {{xt|Get rid of "Brunch"; will just be confusing alongside a breakfast and lunch category}} I'm not sure about this—brunch is in many places considered a separate entity, and I don't necessarily think it would cause confusion. But, overall it's hard to determine whether it should have its own page and TOC link because I haven't actually gotten around to evaluating the meal pages and what role they should play. See also the TOC notes below. :* {{xt|Create Cookbook:East Asian Cuisine so I can add the recipes from Category:East Asian recipes to it; currently is a redlink on the ToC}} {{done}} for now; however, I'm not sure yet whether it will ultimately make sense to keep that as a content page. I think content pages should be reasonably focused, and it may not be the best to have a cuisine page that is so broad. This is something I planned to consider once I made my way around the overhauling the cuisines. :* {{xt|Change "Introductory Matter" header to just "Introduction"}} The reason I made it "Introductory Matter" instead of "Introduction" is because there's already a chapter itself titled "Introduction"—it felt odd to have the entire section titled that as well. Happy to discuss other header options (e.g. "Front Matter", which is a generally accepted book term) :* {{xt|Appendix and Equipment sections switch places}} see below comments on TOC. :* '''Comments on the TOC:''' So, I think a fundamental issue with the current TOC is that it somewhat arbitrarily picks and chooses individual pages to link. It also sometimes direct-links to categories and sometimes to content pages, which I don't think we should do. Because the cookbook is so expansive, it's been established that manual indices intending to capture detail in large areas don't really make sense and quickly get bulky and out-of-date. This is why categorytree is such a useful tool! After thinking on it for a while and making some small tweaks, I think I'd ultimately like to overhaul the TOC and come to a solution that keeps a few broad headers/links to the small handful of the primary content pages while perhaps stashing away more detailed and self-updating lists in a collapsible way to reduce clutter but allow for customizable user navigation. Much to think about, and I'll probably workshop some things on the side to see how they feel. :Let me know if I've misunderstood anything! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 03:24, 3 March 2025 (UTC) ::Thanks for the notes! Here's my thoughts: ::* On the Cuisine titling, it actually seems like [[Cookbook:Cuisine of the Mediterranean]] and [[Cookbook:East Asian cuisines]] are the only ones that don't follow the naming scheme, i.e. "[[Cookbook:African Cuisine]]", and I think that shorter titles are preferable where it makes sense. ::* On your note about East Asian Cuisine, I actually had the same thought after going through the cuisine pages. Having three separate pages for different kinds of Asian cuisine does seem a little silly, doesn't it? Do you think it might be better to combine all of them under one "Asian Cuisine", but put the different locales under separate headers? ::* On Brunch - I honestly think there's way too much ambiguity around what exactly constitutes as "brunch" to keep that in. I feel as though the term brunch more applies to the time you're eating, rather than the kind of food. I think it would be easier to keep meals that include commonly accepted breakfast foods in the Breakfast category, and things that don't fit neatly into that, into the Lunch category. This would prevent any dilemmas in the future where we can't decide whether something is breakfast or brunch. ::* You're right that it looks a little awkward to have the header as Introduction when there's a page called introduction. I still think that to say "Introductory Matter", or "Front Matter" as you mentioned, is a little long-winded and reflects a more academic tone than needed for a cookbook. Upon further reflection, I think maybe rather than worrying about the header at this point, we should perhaps think about trying to compile all of those short introductory type pages into one comprehensive introductory page. Then we likely won't even need a header for it on the ToC. ::* The ToC is definitely a bit cluttered, and it bothers me too that there's a real lack of consistency across whether the wikilinks lead to a page or a category. I'm not sure how I would feel about cutting away too much of the navigation from it, though, because just about every page on there does have a reason to be there, it's just that they're not presented very nicely. Some of it can certainly get nested or combined though. I'll play around with it over the next few days in my sandbox as well and let you know if I come up with anything. ::* As an aside, the first thing on my to-do list once my autoconfirmed comes through is to start subcategorizing all of the recipes so that they're all nicely sorted in the category trees. When you have a chance, I'd love to hear your thoughts on what we should use as the standard naming for categories. Once we determine this, I think we can also take the liberty of updating the cookbook MoS to reflect it. ::Cheers, [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:33, 3 March 2025 (UTC) :::Note: After writing this, I realized what you were getting at about slashing away some of the subpages. Maybe we can come up with a system where all of those subpages are under their main subpage rather than on the ToC. For example, all the Cuisines are under [[Cookbook:Cuisines]], all techniques under [[Cookbook:Cooking Techniques]], to keep the subpages off the main ToC. Also, I wonder if maybe we should try to make a centralized discussion for this somewhere, in case anyone else wants to join in at some point? [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:45, 3 March 2025 (UTC) ::::Heads-up: to make it easier to keep track of these and since I think they deserve their own discussions, I'm going to gradually migrate them over individually to [[Cookbook talk:Table of Contents]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:52, 4 March 2025 (UTC) :::::Good idea. Can you remove the semi-protection from that talk page? I see no reason why it should be protected. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 23:23, 4 March 2025 (UTC) == Cookbook ToC == Hi [[User:Kittycataclysm|Kittycataclysm]]. I was just wondering why you didn't respond to my above message, and started a separate sandbox for the ToC instead? It seems as though you don't really want to collaborate. It would be nice if we could work on this together. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 22:43, 2 March 2025 (UTC) :@[[User:MediaKyle|MediaKyle]] thanks for the ping! I'm sorry you feel like I don't want to collaborate—the opposite is true, and please understand that this is good-faith editing. The reason I haven't responded to the above points is mostly since you've been modifying a bunch of content and adding suggestions lately, and I've been working my way through these while continuing with my routine contributions and real life as well—things happen a little more slowly here than on other projects, and I'm the one person dedicated to the cookbook right now. The reason I created that sandbox was because I saw [[Wikibooks:Reading room/General#Modernize the shelves|your comment]] at the reading room and wanted to play around and think about your suggestion without touching the actual TOC. You're right that it's not the best, and it's been something I've been thinking about for a bit now. Please understand also that it can be overwhelming when a new editor unfamiliar with the Cookbook begins making a high volume of edits and suggestions without having much experience with it or its history—this isn't to say that you don't have good ideas or things worth contributing. In fact, you have already made a few helpful changes, as I've mentioned. I just want to do this properly and take the time to evaluate your suggestions together with the current efforts that are underway, and that can take a bit. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:03, 2 March 2025 (UTC) ::Thanks for getting back to me. While I may be new to Wikibooks, I'm certainly not new to MediaWiki, and I've been working with small wiki projects for a number of years. Perhaps it's been a misunderstanding to some degree, but I've found my reception here to be unusually unwelcoming. The way to do this properly, as you said, would be to have discussions and form consensus. Yesterday, when you reached out to me about adding hideroot to the pages, I gave you my rationale and was more than happy to have a discussion about it, but you did not reply. I noticed a similar situation happened with [https://en.wikibooks.org/wiki/User_talk:Ottawahitech#Category_sorting Ottawahitech], regarding category sorting. I'm aware that you're the main person looking after the cookbook right now, which is why I reached out to you right from the get go. ::I understand why you would want to create your own sandbox to play around with options for the ToC, but I'm sure you can understand why it would draw my attention that you would do this without implementing any of the wikilink fixes I mentioned, or making an attempt to discuss it further. This came across to me as not wanting my help. ::I invite you to check out my page on Wikipedia. I've made contributions across quite a wide area of topics there, as well as the other Wikimedia projects, and this is the first time I've encountered any sort of resistance to my contributions. I think Wikibooks has enormous potential, and I'm very excited to contribute to helping it grow. On most projects, this would be something to be encouraged. I don't feel like "I'm sorry that you feel that way" was really an appropriate response. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 23:59, 2 March 2025 (UTC) :::I think you're right that this has been a mix of misunderstanding and miscommunication, and I think I can understand how things came across as unwelcoming! For whatever it's worth, I absolutely plan on circling back to the various discussions at hand (I have all the relevant pages open to return to), but it seems like the order I did things made it seem like I was ignoring you (if I'm understanding correctly). I am pretty busy, so sometimes items on my to-do list do get lost/shunted or it takes me a bit to get around to something—please don't hesitate to give me a ping if it seems like I'm taking a while to get back to something. Looking forward to more collaboration! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:49, 3 March 2025 (UTC) ::::I'm glad you can understand where I'm coming from. To clarify, my intent is not to try to rush you, or to try to push you to make changes that you don't agree with. It's really easy to misinterpret things over the Internet, and I think a short message can go a long way. I apologize if I've caused you any undue stress by coming into the cookbook and unleashing a flurry of alterations, but do rest assured that I'm not married to any of my changes, I'm always open for discussion, and I want to see the cookbook improve just like you do. The great thing about wikis is that no change is permanent. I think we'll have it in tip-top shape in no time! [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 01:19, 3 March 2025 (UTC) == [[Cookbook:Polish Doughnuts (Paczki)]] == Do you see any reason not to just add this to Featured Recipes? At least we know this one works, and it seems like this is now one of the few recipes to have a picture that actually aligns with the recipe used. I was thinking later on we'll come up with a content review system where a couple editors will actually try the recipes nominated for FR, but in the absence of that I'd just add it to the list. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 12:25, 4 March 2025 (UTC) :I'm fine with adding it to the featured recipes. You're right that we'll want to come up with a good system for this going forward, though it's lower down on my personal priority list at moment. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:15, 4 March 2025 (UTC) == [[Cookbook:Cream Cheese American Buttercream]] == Hi! I am a wikiHow user and I am planning to adapt this recipe to wikiHow. Since you contributed to this recipe, I wanted to know if I can get permission to reuse your contributions to this recipe. Thanks. [[User:Xeverything11|Xeverything11]] ([[User talk:Xeverything11|discuss]] • [[Special:Contributions/Xeverything11|contribs]]) 21:41, 4 March 2025 (UTC) :@[[User:Xeverything11|Xeverything11]] that's fine with me as long as proper attribution and linking back to the original recipe page here are included at the top. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:28, 4 March 2025 (UTC) == [[A Companion to Our Literary Journey]] == Hi! I feel that we have started to outline the scope in a clearer and more precise way and that’s the work we are going to do with the students this and for the next years, adding more sections and content. Do you think that would be enough? [[User:Ferdi2005|Ferdi2005]] ([[User talk:Ferdi2005|discuss]] • [[Special:Contributions/Ferdi2005|contribs]]) 22:43, 6 March 2025 (UTC) :Hi @[[User:Ferdi2005|Ferdi2005]]! Yes, this seems to be reasonably outlined. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:51, 7 March 2025 (UTC) == Exercising care with copyright == When deleting a page as a copyright violation, it is important that you '''do not quote any content from the deleted page'''. If you do, then your log entry is itself a copyright violation. I have redacted a recent deletion that you performed because of this. If you want to make sure that none of your past deletions have been problematic for this reason, you can [[quarry:query/90444|run this SQL query]] to get a list of every deletion that could be eligible for redaction. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 18:32, 21 March 2025 (UTC) :Hi @[[User:JJPMaster|JJPMaster]] and thank you for the message. In the most recent instance that I think you're referencing, I do not see any material in the edit summary that posed a significant risk—I don't believe the few listed words would be a copyright concern. However, I do understand your concern! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:31, 21 March 2025 (UTC) == Splitting Pages == Hi I have recently made the book on the [[History of the Nawabs of Bengal]] and you gave a notice on how you believe it should be split into smaller bits. As I am still new to wikibooks I don't know how to do this. Can you please assist me on renaming the page so I can split the page into multiple pages? @[[User:Kittycataclysm|Kittycataclysm]] [[User:Greatswrd|Greatswrd]] ([[User talk:Greatswrd|discuss]] • [[Special:Contributions/Greatswrd|contribs]]) 19:47, 29 March 2025 (UTC) :@[[User:Greatswrd|Greatswrd]]: You did it. I've removed the tag. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 22:44, 29 March 2025 (UTC) :Like @[[User:JJPMaster|JJPMaster]] said, you're all set! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:53, 29 March 2025 (UTC) ::Thanks! @[[User:JJPMaster|JJPMaster]] @[[User:Kittycataclysm|Kittycataclysm]] [[User:Greatswrd|Greatswrd]] ([[User talk:Greatswrd|discuss]] • [[Special:Contributions/Greatswrd|contribs]]) 10:24, 30 March 2025 (UTC) == Minecraft book == Is it good creating pages like this, [[Minecraft#Husk]]? [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 12:43, 9 May 2025 (UTC) :@[[User:Cactusisme|Cactusisme]] what do you mean? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:18, 10 May 2025 (UTC) ::are we allowed to create pages like that? like for every mob [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 10:02, 11 May 2025 (UTC) :::To be honest, I don't think the structure and formatting of the book is very good. Several of the mob pages, for example, have very little information and aren't particularly helpful on their own. If I were working on it, I would restructure the book. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 14:09, 11 May 2025 (UTC) ::::I am planning to do that. [[User:Cactusisme|Cactusisme]] ([[User talk:Cactusisme|discuss]] • [[Special:Contributions/Cactusisme|contribs]]) 04:19, 12 May 2025 (UTC) == Request to Review Adjusted User Page (XoriantTeam) == Hello [[User:Kittycataclysm|Kittycataclysm]], I hope you're well. I noticed that my user page ([[User:XoriantTeam]]) was recently deleted for appearing promotional or inappropriate for Wikibooks. Thank you for keeping the community standards in check. I’ve since revised the content with closer attention to neutrality and compliance with Wikibooks guidelines. My intent is to participate constructively, especially in areas related to digital engineering and educational content creation. If possible, I’d appreciate your help reviewing the revised version. I'm happy to share it or upload it as a file if there’s a preferred method. Please let me know how best to proceed. I welcome any suggestions and will gladly make further adjustments. Best regards, XoriantTeam [[User:XoriantTeam|XoriantTeam]] ([[User talk:XoriantTeam|discuss]] • [[Special:Contributions/XoriantTeam|contribs]]) 11:02, 15 May 2025 (UTC) :Hi there—you can publish an updated user page, but I'd caution you against talking about your company. Keep it limited to your involvement with Wikibooks. You may contribute productively here, but further promotional materials are grounds for an indefinite block. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:30, 15 May 2025 (UTC) == Planning to use AWB to update categories on the cookbook == Hello. I noticed in recent changes that you were moving some categories using HotCat (e.g. moving Category:Chile recipes to Category:Recipes using chile), which can be time-consuming. Therefore, I plan to help you with moving the cookbook categories by adding myself to enabledusers and enabledbots in [[Wikibooks:AutoWikiBrowser/CheckPageJSON]]. Would this be fine if I assist you and to add myself to the check page? I am familiar with using AWB after testing on a non-Wikimedia project. Thank you. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 04:42, 8 June 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—thank you for the tip! I just installed JWB, so this should make my mass cat changes much faster. Thanks again! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:11, 8 June 2025 (UTC) :: Thank you for the information. Also, is it okay if I change (for example) [[:Category:Vinegar recipes]] to [[:Category:Recipes using vinegar]] (I can redirect the former category to the latter), given that we should move {{tq|Category:[ingredient] recipes}} to {{tq|Category:Recipes using [ingredient]}} for consistency? [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:57, 8 June 2025 (UTC) :::Sure thing—go ahead! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:53, 8 June 2025 (UTC) == Tool for even faster category changes == See [[:c:Help:Gadget-Cat-a-lot#As_your_user_gadget]]. I just [https://en.wikibooks.org/w/index.php?title=User:Koavf/common.js&action=history installed it] and used it dozens of times in a click. Let me know if you need any help. —[[User:Koavf|Justin (<span style="color:grey">ko'''a'''vf</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 00:36, 19 June 2025 (UTC) :@[[User:Koavf|Koavf]] Thanks! I'm having a little trouble activating it, but I'll keep trying. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:54, 19 June 2025 (UTC) ::A lot of times, a purge will do the trick. See [[:mw:Purge]]. Usually just <kbd>Ctrl+Shift+R</kbd> once or twice. —[[User:Koavf|Justin (<span style="color:grey">ko'''a'''vf</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 00:55, 19 June 2025 (UTC) :::Took several purges, but we're set now! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:16, 19 June 2025 (UTC) == Advice on when I should run for adminship == Hi, I hope you are doing well. I am asking for some advice on when I should run for enwikibooks adminship, given the following below: Currently, I am doing some optimizations for dark mode on this project, and some of the message box/MediaWiki interface/template pages might be outdated, fully protected, or can use a little help using mw-parser-output. These unfortunately might hinder the process of updating these pages/templates for Vector 2022's dark mode.<br> Additionally, I have a solid expertise with edit filters, as I have requested some administrators to update deprecated filter variables, switching filters from warn and disallow to disallow only, and I can also monitor the filter log for potential false positives (from local or global filters). A fellow English Wikibooks administrator also said to me that they are willing to support me in a few months when I run for adminship, as I am generally trusted. I hold two advanced global permissions, and I hold an edit filter helper permission on the English Wikipedia, to be sure. Thank you for your consideration. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 01:02, 23 June 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—good question! I agree that you are a trusted user, and I think it would be reasonable for you to run for adminship, especially given our need to fix up technical aspects of the project. If you don't plan to commit to Wikibooks long-term (i.e. you have some projects you'd like to take a few months to complete and then be done), you can always request temporary adminship. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:30, 23 June 2025 (UTC) :: Thank you for your feedback, but I also plan to monitor for vandalism/spam, and to commit to reduce the administrative assistance reading room backlog, should I be elected for adminship (and I forgot to mention those). Anyway, regarding your feedback, I might run by August or even July, given that I've lately started contributing more often to Wikibooks. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:29, 23 June 2025 (UTC) ::: [[User:Kittycataclysm|Kittycataclysm]], I am pinging you one more time to see if you have read my response above yours. Thank you. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:34, 26 June 2025 (UTC) ::::Hi @[[User:Codename Noreste|Codename Noreste]]! I'm not sure what you mean—was there an additional question you had? Everything you've outlined seems quite reasonable. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:26, 26 June 2025 (UTC) ::::: Apologies for the confusion, I don't have any questions to ask. I was clarifying that I can help with implementing edit requests and to block obvious vandals and spammers, aside from the skills I mentioned earlier. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:32, 26 June 2025 (UTC) == how is it you feel able to interfere in my sandbox? == you deleted a page in my sandbox that was my way of providing my response to a request from an OpenSCAD dev team leader for a couple of text blurbs for use on a web page of the OpenSCAD site. now that you have deleted my page i have to recreate the texts from a screenshot to be able to offer the suggestions, which i will This kind of high handed treatment is what keeps me from being a wiki-anything contributor .. If it is Wiki policy to interfere in the documentation of an open source project because it is hosted on Wikibooks then i will take up the task of moving our online docs to a site where you cannot interfere. -- [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 21:56, 29 June 2025 (UTC) :Hi @[[User:VulcanWikiEdit|VulcanWikiEdit]]—thanks for bringing this to my attention. I now understand that this was intended to be in your user namespace—I've undeleted it and moved it to the correct namespace for you. Let me know if anything else comes up! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:05, 30 June 2025 (UTC) ::ah .. err .. umm .. well that is a gentle answer to my ire. Thanks for being so gracious [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 20:29, 30 June 2025 (UTC) ::and .. isn't my sandbox in my namespace by default? [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 20:30, 30 June 2025 (UTC) :::No worries—it looks like you didn't add the prefix "User:" before writing out the full page titles, so the pages you created were technically in the project's Main space with the official published materials. Going forward, you can just double-check that the page title starts with "'''User:'''VulcanWikiEdit/sandbox", and that should keep everything in the right place! Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:36, 30 June 2025 (UTC) ::::BTW .. i love the play on cat lover name [[User:VulcanWikiEdit|VulcanWikiEdit]] ([[User talk:VulcanWikiEdit|discuss]] • [[Special:Contributions/VulcanWikiEdit|contribs]]) 15:35, 1 July 2025 (UTC) :::::Thank you! That's very kind. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:46, 1 July 2025 (UTC) == Regarding the user Codename Tameirao == Could this be Matthew again (the Unicode LTA)? I believe it might be him based on his usage of edit summaries, and his usual edits to [[Unicode/Versions]]. I just blocked his recent account, and then I protected and stabilized that Unicode book. <span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 23:51, 12 August 2025 (UTC) :I suspect you're right! That seems like a reasonable course of action. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:56, 13 August 2025 (UTC) :: I recently encountered another possible LTA, see [[Special:Contributions/~2025-55706-6]] (as well as [[Unicode/Roadmap Blocks]]). I can email you more details if you want. <span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 16:30, 9 September 2025 (UTC) :::I think this is the same LTA, yes! I've protected [[Unicode/Roadmap Blocks]], but I think it would be a good idea if we could automate this monitoring somewhat using the edit filter. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:07, 9 September 2025 (UTC) :::: I don't think that was Matthew, as he typically uses edit summaries. The deleted page was not protected, as it was protected before you deleted it; I salted it from creation for one year. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 20:22, 9 September 2025 (UTC) ::::: You might want to look at [[Special:Contributions/Freddy Fazbearing Others]]. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 04:18, 26 October 2025 (UTC) ::::::Thank you! I went ahead and blocked them. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:54, 28 October 2025 (UTC) == IP block exempt == Hi Kitty, I currently have IP block exemption on enwiki, Commons and Wikidata as I use VPNs connected to my internet security software. Can you please grant me the right on wikibooks. I have a strong password and use two factor authentication. ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 10:51, 22 August 2025 (UTC) :Hi @[[User:TarnishedPath|TarnishedPath]]! This doesn't sound unreasonable to me, but I think it would be good if you requested at [[Wikibooks:Requests for permissions]] so we can have a discussion—I have not granted this right before. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:50, 23 August 2025 (UTC) ::Kitty, thanks for pointing me in the right direction. ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 03:25, 23 August 2025 (UTC) ::See [[Wikibooks:Requests_for_permissions#TarnishedPath_(discuss_·_contribs_·_count_·_logs_·_block_log_·_rfp_·_rights)_(IP_Block_Exemption)]] ''[[User:TarnishedPath|<b style="color:#ff0000;">Tar</b><b style="color:#ff7070;">nis</b><b style="color:#ffa0a0;">hed</b><b style="color:#420000;">Path</b>]]''<sup>[[User talk:TarnishedPath|<b style="color:#bd4004;">talk</b>]]</sup> 03:35, 23 August 2025 (UTC) == You've got mail! == {{You've got mail|sig=<span style="font-family:Verdana">[[User:Codename Noreste|<span style="color:#0024FF">'''''Codename Noreste'''''</span>]] ([[User talk:Codename Noreste|<span style="color:#A1000E">talk</span>]])</span> 00:20, 6 September 2025 (UTC)}} :Thank you! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:06, 6 September 2025 (UTC) == Are you able to import? == I made a few requests over at https://en.wikibooks.org/wiki/Wikibooks:Requests_for_import . [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 22:32, 4 October 2025 (UTC) : [[User:2005-Fan|2005-Fan]], I'll go ahead and start the imports. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:29, 5 October 2025 (UTC) ::Thank you for your help [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 16:51, 5 October 2025 (UTC) ::: My apologies for not doing this sooner, because some database error appears when I am trying to mass import. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:39, 5 October 2025 (UTC) ::::I also tried to make this import earlier and ran into issues with the software. I was hoping it was a temporary bug, but it seems to be persisting. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:01, 6 October 2025 (UTC) :::::This seems like I should get involved. {{working}}... [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:11, 6 October 2025 (UTC) :::::: I believe there are five pages that have massive page histories they fail to import here. [[User:Codename Noreste|Codename Noreste]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 15:13, 6 October 2025 (UTC) :::::::I backed up the XMLs of them locally but im unsure how much that'd do. [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 15:18, 6 October 2025 (UTC) ::::::::Just became an importer. The reason is prob understandable but I cannot upload the XML file to here locally. [[User:2005-Fan|2005-Fan]] ([[User talk:2005-Fan|discuss]] • [[Special:Contributions/2005-Fan|contribs]]) 17:23, 10 October 2025 (UTC) == About the category parameter in the recipe summary template == When it uses a "recipe by type" category, should it use a "[type/food] recipes" name or "Recipes for [type/food]"? I recently operated JWB to change from [[:Category:Dessert recipes]] to [[:Category:Recipes for dessert]] in multiple Cookbook recipes, and from what I've said before, I've changed to ''Recipes for dessert'' in the category parameter of Cookbook recipes. Hope you don't mind that this was over more than 250 changes (not counting the recent category changes after moving some recipe categories). Thanks. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 02:07, 27 October 2025 (UTC) :Hi @[[User:Codename Noreste|Codename Noreste]]—those JWB changes you made seem fine to me! I'm not quite sure what you're asking in your first sentence, though. Assuming I understand correctly: in general, I think the default format should be whatever the actual category name is. BUT if there is a redirect, it ultimately shouldn't matter too much. And, because I'm not convinced of the utility of that infobox parameter in the first place (thinking of removing it), I'm not hugely concerned about it for the time being. Does this help? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:21, 27 October 2025 (UTC) :: Probably, but I will say the following below (for my first sentence) to clarify: :: On the <code>|category =</code> parameter, when placing a recipe category name, should it either be {{tq|Sandwich recipes}} or {{tq|Recipes for sandwiches}}? I hope this clears the confusion. '''[[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]]''' ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 18:39, 27 October 2025 (UTC) == Please no more Unicode LTA == Please don't block me again. I promise I will edit Unicode stuff and add correct information. [[Special:Contributions/&#126;2025-30839-28|&#126;2025-30839-28]] ([[User talk:&#126;2025-30839-28|talk]]) 20:54, 1 November 2025 (UTC) :<small>I am a bit out of the loop, so correct me if I'm wrong - I'm assuming here</small> I think the point is that they want you to ''not'' edit the Unicode stuff? Also hi kitty, it's been a ... very long time.. <sup>&#8212; [[User:L10nM4st3r|<span style="color:#c71300">L10nM4st3r</span>]]</sup> / <sub>[[User talk:L10nM4st3r|<span style="color:#ce3f00">'''ROAR''' at me!</span>]]</sub> 01:13, 5 November 2025 (UTC) ::Ok so apparently not as long as I thought, but it feels like I've been away for at least a year lol <sup>&#8212; [[User:L10nM4st3r|<span style="color:#c71300">L10nM4st3r</span>]]</sup> / <sub>[[User talk:L10nM4st3r|<span style="color:#ce3f00">'''ROAR''' at me!</span>]]</sub> 01:23, 5 November 2025 (UTC) :::Nice to see you! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 15:41, 5 November 2025 (UTC) == Administrator and reviewer user right combinations are not needed anymore == Given that administrators can review edits in addition to reviewers, I would suggest for you (and other administrators) to kindly remove the reviewer permission from (own) accounts. What I'm saying is that if one holds administrator and reviewer permissions together, they can remove the reviewer permission from their own account and retain their administrator permission. Thanks. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 16:06, 11 November 2025 (UTC) :Gotcha—is there a reason it's bad for one user to have both these rights? If so, I can remove my reviewer right. Otherwise, it seems fairly harmless? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:26, 11 November 2025 (UTC) :: The thing is, administrators have the <code>review</code> user right, as well as some permissions in the reviewer user group in the administrator toolset. That means that having the reviewer user group together with the admin user group is redundant. Hope this explains it. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 19:59, 11 November 2025 (UTC) ::: @[[User:Kittycataclysm|Kittycataclysm]] <s>I'll do this tomorrow morning, as well as to remove autoreviewed user permissions from users who are reviewers.</s> ({{doing}}) [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 03:24, 12 November 2025 (UTC) : I have removed the autoreviewed user permission from users who are reviewers. As for administrators, I will do so later today. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 03:40, 13 November 2025 (UTC) == Nesting in Open Book of Ecovillages and Eco Communities == Hi Kittycataclysm, I am editor of wikipedia since 2004. We have the habit if we have a concern using the talk page to clarify the case. I am not sure to delete meaningful content without previous notification and doing major redirection without agreeing the main contributor(s) is an adequate admin act and sign of good manner of host (see [[W:Wikipedia:Etiquette|Wikipedia:Etiquette]].) Yes, It will be not an average book but above the regular. This is the exact case: ''"this may be appropriate, such as with large textbooks that contain subsections with a lot of content."'' ''for to establish good structural and stylistic practices'' I have a data management certification. If you asking it will have 4 nest level on strict purpose. If you saw the introduction of the [[Open Book of Ecovillages and Eco Communities]] is/will be a global collection making effective collaboration over borders and continents. One structured + categorized(!) page for each community willing to show up. The Postal addresses has also same or larger deepness, this is unavoidable (Country/Postal Code/Location/Street/House/floor/door). Here will looks like: '''Eco-comm/Continent/Regio code/Community name''' The goal of this system to open bridge + experience highway for the communities using the same permaculture technics what collected parallelly in [[Open Book of Permaculture]]. That is also part of this knowledge base please dont do simplification steps on that without discussion. I am kindly asking to revert your edits in this book. After that I will put a notification template about "This book is under construction with major changes. Before contributing, please discuss and align your work with at least one of the main contributors listed in the Page History. Common clarifications/ guides are on the primary talk page." Thanks: [[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 02:22, 12 November 2025 (UTC) :Hi @[[User:Rodrigo|Rodrigo]], and thank you both for your contributions and for reaching out! Yes, I did make the following changes to [[Open Book of Ecovillages and Eco Communities]]: :* I moved the pages from the [[Eco-comm]] namespace to the [[Open Book of Ecovillages and Eco Communities]] namespace, since the table of contents and pages for a given book should be under that book's namespace. :* I removed the links to Wikipedia that were on [[Open Book of Ecovillages and Eco Communities]], since outlinking has been discouraged at en.Wikibooks as a matter of practice. Compilations of links may not fall into WB scope as an instructional text, and [[Wikibooks:Requests for deletion/Piano Solo Music: An Encyclopedia|there is precedent for deleting them]]. But, I do see that the tool I used didn't just remove links to enWP, so I will restore the prior revision and ping the tool developer. :* I flagged it as needing denesting—you're right that nested entries can sometimes be appropriate. In this case, I was primarily flagging for a denest because the table of contents needs to be moved onto the main page, and it shouldn't have hidden navigation within the nested portions. :Could you clarify which of these edits you do not agree with so I can make sure they are individually addressed? As an aside, it could be helpful to create a [[Help:Local manuals of style|local manual of style]] for the book in order to clearly outline the expectations. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:59, 12 November 2025 (UTC) ::My main concern not about moving and flagging but '''deleting''' [[Eco-comm]] against [[Wikibooks:Deletion policy]] and not mentioning in the clarification even after my notification. Should I note all administrators [[Wikibooks:Please do not bite the newcomers]] - or will they do speedy deleting one by one until I make them individually addressed? :::The <u> local manual of style</u> development is ongoing together with the sample pages. ::'''MAIN PAGE''' ::The '''Main page''' and '''Namespace''' is the [[Eco-comm]]. The '''Full Title''' or '''Cover''' is [[Open Book of Ecovillages and Eco Communities]]. Because of the high level of nesting the below extra-long-full-text-title to be avoided the Cover page is a redirection with preface/intro etc. ::'''NESTING ''' :::Featured book with 3 level nesting: [[Social and Cultural Foundations of American Education/Educational Change/Theory]] :::5 level nesting example: [[Development Cooperation Handbook/Designing and Executing Projects/Communication Management/Communication Planning/Develop a Conflict Management Strategy]] ::'''Categories''' The [[:Category:Eco-comm]] will let the users make practical sub-categories e.g. [[:Category:Eco-comm/Project/numundo]] [[:Category:Eco-comm/]] ::: ::[[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 03:44, 18 November 2025 (UTC) :::Thank you for elaborating! I'm unfortunately not sure what you mean about deleting [[Eco-comm]]—are you referring to the fact that I moved it without leaving a redirect? Regarding the nesting, I do honestly think those other books you linked should have their navigation denested since I find their format difficult to parse, and they have some navigation issues. Looping in some other active admins (@[[User:Leaderboard|Leaderboard]] @[[User:MarcGarver|MarcGarver]] @[[User:JJPMaster|JJPMaster]] @[[User:Codename Noreste|Codename Noreste]] (@[[User:SHB2000|SHB2000]]) so they can get eyes on this and voice anything they think is important. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 04:12, 18 November 2025 (UTC) ::::It makes no sense to have some crazy abbreviation as a "main page" or "namespace" (whatever that means in this context) for a book in order to allow it to be deep nested. Nobody needs to type the whole name of the nesting because that's what navigation templates do, and it is a simple matter to override the page title. I also take issue with the statement, above, "Before contributing, please discuss and align your work with at least one of the main contributors listed in the Page History." Anybody can edit, and nobody gets to own and control any work. Taken together, this complaint looks like a case of attempting to assert ownership and to operate against the normal practices of Wikibooks. As such, I am completely aligned with the changes made. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 12:49, 18 November 2025 (UTC) :::::That. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 14:59, 18 November 2025 (UTC) ::::Thanks @[[User:MarcGarver|MarcGarver]]@[[User:Leaderboard|Leaderboard]] for the contribution, btw the [[Development Cooperation Handbook/Designing and Executing Projects/Communication Management/Communication Planning/Develop a Conflict Management Strategy]] also looks crazy long, is'nt it? Lets continue in the [[Wikibooks:Reading_room/General]] keeping this page for personal messages. [[User:Rodrigo|Rodrigo]] ([[User talk:Rodrigo|discuss]] • [[Special:Contributions/Rodrigo|contribs]]) 23:07, 20 November 2025 (UTC) == Deletions of Wikibook subpages == Hello @[[User:Kittycataclysm|Kittycataclysm]], regarding the [[Thesis Writing Guide]] subpage deletions, should I just recreate them when I keep working on them or was there an automatic deletion that we could undo? This document will grow, but really slowly. Best, Tim [[User:TimBorgNetzWerk|TimBorgNetzWerk]] ([[User talk:TimBorgNetzWerk|discuss]] • [[Special:Contributions/TimBorgNetzWerk|contribs]]) 11:37, 16 December 2025 (UTC) :Hi @[[User:TimBorgNetzWerk|TimBorgNetzWerk]]! Since there was so little content on the deleted pages, my recommendation would just be for you to gradually recreate the chapters as you go. Does that make sense? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:54, 17 December 2025 (UTC) ::Makes sense, not my ideal solution, but also not far from it :) The end result will be the same, the in-between will just feel a little bit weird from time to time. ::Thank you for taking time to curate and quality-control Wikibooks - wishing wonderful holidays and a happy new year! [[User:TimBorgNetzWerk|TimBorgNetzWerk]] ([[User talk:TimBorgNetzWerk|discuss]] • [[Special:Contributions/TimBorgNetzWerk|contribs]]) 20:43, 17 December 2025 (UTC) :::Thank you, and happy holidays to you as well :) —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:13, 17 December 2025 (UTC) == help with "Media Literacy and You" == {{re|Kittycataclysm}} What do I need to do to get a quality review of ''[[Media Literacy and You]]'', or whatever is needed to remove <nowiki>{{Qr-em|not clear how this is to be structured as a book}}</nowiki>? I ask, because you added that flag just over 2 hours after I created it. I later found that I had accidentally created it as an anonymous user. I've since started using my standard Wikiname, and I tried to respond to the requests both by creating a discussion on the "Discussion" page associated with that book and by upgrading the content. The upgrades included adding the "Introduction" chapter by revising an article on Wikiversity that convinced me to start this Wikibook. I have other articles that I plan to rewrite to create 9 of the remaining 11 chapters in the current table of contents, as indicated in this table of contents. ??? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 02:23, 8 February 2026 (UTC) :Hi @[[User:DavidMCEddy|DavidMCEddy]]! I removed the query flag, since this is clearly not a test page. I do have concerns about the suitability of this book for Wikibooks, since it seems to be more in line with essays and original research/analysis (which are [[Wikibooks:WIW|out of scope here]]). Wikiversity seems like a very suitable place for them—is there a specific reason you want to move them here? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:24, 8 February 2026 (UTC) ::{{re|Kittycataclysm}} ::This book is intended to accelerate the diffusion of [[w:Media literacy|media literacy]] by making it easier for humans to (a) access training materials and (b) connect with research on the most important issues that concern them and (c) discuss those issues with others who may believe differently in a nonthreatening context that encourages dialogue and a shared search for what can honestly be said about any particular issue. This is an extension of "The wisdom of polarized crowds" discussed in [[Wikipedia:Reliability of Wikipedia]]. ::I don't know about you, but I'm frightened by the collapse of nuclear arms control agreements since the year 2000, by global warming, by the threats of the Trump administration to invade Canada and Greenland, etc. If this book project is successful, it will make a material contribution to reversing these trends -- unless this kind of dialogue is [[v:Responding to a nuclear attack|interrupted by a nuclear war]]. === Who is DavidMCEddy === ::I'm a [[w:Vietnam veteran|Vietnam-era veteran]] with a PhD in statistics and a publication record for which [https://www.researchgate.net/profile/Spencer-Graves-3 ReserchGate has found over 1,200 academic publications that have cited my work.] Since [https://xtools.wmcloud.org/ec/en.wikipedia.org/DavidMCEddy 2010 I have logged] * 6,000+ edits in each of Wikipedia and Wikiversity, * 1,000+ in Wikimedia Commons, * 30,000+ in Wikidata, and * almost 1,000 in other Wikimedia Foundation projects like Wikiquote and edits to the Spanish, French and German Wikipedias. This includes dozens of research reports posted to Wikiversity under [[v:Category:Freedom and abundance]] and 44 posts under [[v:Category:Media reform to improve democracy]] that provide a platform for documenting and discussing 44 episodes of a fortnightly "Media & Democracy" series of 29:00 mm:ss podcasts syndicated for the [https://pacificanetwork.org/stations-2/ Pacifica Radio Network] featuring the opinions of leading experts on the increase in political polarization and violence and what those experts think should be done about this. I've just posted another chapter to [[Media Literacy and You/The impact of the media on political economy since the time of the Pharaohs]]. I hope you will agree that this book can make a positive contribution to Wikibooks and to [[w:Jimmy Wales|Jimbo Wales]]' [[w:Wikipedia:Prime objective|Prime Directive]] to create "a world in which every single person on the planet is given free access to the sum of all human knowledge." Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 01:19, 9 February 2026 (UTC) :@[[User:DavidMCEddy|DavidMCEddy]] Thank you and I understand this, but I am asking why you think this material is more suitable at Wikibooks rather than at Wikiversity. From what I can see, Wikiversity seems like the more appropriate home for it given our [[Wikibooks:WIW|scope]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:59, 9 February 2026 (UTC) ::{{re|Kittycataclysm}} ::"Media Literacy and You" is textbook to support both self study and classes on media literacy. ::I have been posting content to Wikiversity since 2014 and have not encountered support there for books. A search just now turned up a hint of a book on Wikiversity, but I could not easily find anything on how to do it, etc. ::I think this "Media Literacy and You" project would lose the vast majority of its potential if it were not on Wikibooks. ::??? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 02:22, 9 February 2026 (UTC) {{outdent}} {{re|Kittycataclysm}} Will you please help me with the protocols of creating a book on Wikiversity? 1. I have found documentation that claims that Wikiversity supports such. However, the documentation seems incomplete, potentially out of date, etc. For example, I could not see how to follow the instructions for [[Wikiversity:Help:Books#Step 1: Enable the "Book creator" tool]]. So I posted a question to [[Wikiversity:Help talk:Books]]. 2. What do you suggest I do next? :I can create an article on Wikiversity titled, "Media Literacy and You", and port everything I've posted to Wikibooks there, then replace the pages on Wikibooks with redirects to [[Wikiversity:Media Literacy and You]], [[Wikiversity:Media Literacy and You/Introduction]], and [[Wikiversity:Media Literacy and You/The impact of the media on political economy since the time of the Pharaohs]]. :If you think that's the best way to build this book project, great. It would actually be easier for me, because there would be less translation between what I already have on Wikiversity and a version for Wikibooks. (Also, Wikiversity supports <nowiki>{{cite Q|...}}</nowiki>, which I have used extensively for years.) :Thanks for your help. [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 13:26, 9 February 2026 (UTC) :@[[User:DavidMCEddy|DavidMCEddy]] Unfortunately, I am not familiar with the exact workings of Wikiversity, so I can't be much help there. My personal recommendation is that you ask there for help on how best to structure your materials to match the WV requirements. If you'd like some additional opinions/insight, please feel free to also check in at the [[Wikibooks:Reading room/General|reading room]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 02:22, 10 February 2026 (UTC) ::{{re|Kittycataclysm}} I believe I have finished migrating all of ''Media Literacy and You'' to Wikiversity and replacing the parts of it on Wikibooks with redirects. Comments? Thanks, [[User:DavidMCEddy|DavidMCEddy]] ([[User talk:DavidMCEddy|discuss]] • [[Special:Contributions/DavidMCEddy|contribs]]) 17:32, 10 February 2026 (UTC) == Thank you! == Heya, thanks for reviewing my stuff! Just to note, the first lesson page was done and so that'll need moving. If you want to discuss anything with me, I am easily reachable on Discord @ xiluosi233. I can explain philosophy, approach, and so on from my teaching experience if you want anything regarding that. [[User:Shira the Mogul|Shira the Mogul]] ([[User talk:Shira the Mogul|discuss]] • [[Special:Contributions/Shira the Mogul|contribs]]) 19:48, 17 February 2026 (UTC) :It appears [[An Introduction to the Han Script]] was moved wrong - should it not be [[General Literary Chinese from Scratch/An Introduction to the Han Script]]? [[User:Shira the Mogul|Shira the Mogul]] ([[User talk:Shira the Mogul|discuss]] • [[Special:Contributions/Shira the Mogul|contribs]]) 19:52, 17 February 2026 (UTC) ::@[[User:Shira the Mogul|Shira the Mogul]] good catch! I accidentally removed more of the title than intended. I've fixed this now. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:18, 18 February 2026 (UTC) == A test request == Just to see whether a recent Luna update turned out as intended, could you briefly revert your [[User:Kittycataclysm/lunaoptions.json|Luna preferences page]] to the first revision? Since you don't appear to have any custom preferences in the first place, I don't think there should be any conflicts. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 01:49, 30 March 2026 (UTC) :Done! But, it seems to have perhaps auto-updated again immediately afterwards. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 15:39, 10 April 2026 (UTC) == Linking == Hi,<br> For my edification, why is a link from [[Cookbook:nettle|nettle]] to [[w:Urtica_dioica|Urtica dioica]] not appropriate? The Wikipedia article has more information & seems relevant.<br> Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 01:53, 24 April 2026 (UTC) :@[[User:PeterEasthope|PeterEasthope]] good question! Wikibooks discourages outlinking, since books should be self-contained units. Instead of linking to [[w:Urtica dioica]], the correct approach would be to flesh out the actual chapter here at Wikibooks. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:34, 24 April 2026 (UTC) ::Should all material in the Wikipedia article about Urtica dioica relevant to cooking be duplicated into the nettle article in the cookbook? Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 02:30, 2 May 2026 (UTC) :::@[[User:PeterEasthope|PeterEasthope]] you could do that, although you should only include information that is sourced. However, I recommend that you wait, because I am coincidentally working on the page right now and fleshing it out significantly. I should publish today. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:40, 2 May 2026 (UTC) ::::The nettle page is better now. Thanks. ::::I still wonder, given that the link to ''The Complete Guide to Edible Wild Plants, ...'' is permitted, why not a link to the botanically oriented page in Wikipedia. What if someone reads the Cookbook article and is interested in the toxin for example? Seems that non-Wikimedia references are more privileged than Wikimedia references. ::::Also, by chance, just noticed the [[w:Nettle_soup|Nettle soup]] article in Wikipedia. Better in the Cookbook? ::::Thx, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 19:10, 5 May 2026 (UTC) :::::Another good question. The reason those books are linked is because they are reputable and topical sources for the subject matter (nettles as used in cooking from an instructional perspective), and the links are part of the citations—this makes it different from a simple outlink to a Wikipedia page. Wikipedia pages should also not be cited themselves as sources. Regarding nettle soup, I don't think it makes sense to have that as a standalone page here in the cookbook due to its encyclopedic tone, and I don't see any recipes there. Does this make sense? —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:21, 6 May 2026 (UTC) ::::::Somewhat. Certainly a recipe wouldn't be incongruous in a cookbook. Still seems unhelpful that relevant information in Wikipedia is inaccessible from a Wikibook. In effect there's a "Berlin Wall" between two Wikimedia projects. Would a "See also" section be permissible? ::::::Thanks, ... [[User:PeterEasthope|PeterEasthope]] ([[User talk:PeterEasthope|discuss]] • [[Special:Contributions/PeterEasthope|contribs]]) 14:00, 7 May 2026 (UTC) == You may be an eligible candidate for the U4C election == <div lang="en" dir="ltr" class="mw-content-ltr"> Greetings, The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] seeks candidates for the 2026 election. The U4C is the global committee responsible for overseeing enforcement of the [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct|Universal Code of Conduct]]. Elections are held annually, if elected a committee member serves for two years. This year the U4C requires candidates to hold administrator rights on at least one wiki, which is why you are being contacted as you appear to hold this right. There are other requirements, such as candidates must be at least 18 years old and may not be employed by the Wikimedia Foundation or other related chapters and affiliates. You can find more information in the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026#Call_for_Candidates|call for candidates on Meta-wiki]]. Additionally, the committee's working language is English; some ability to communicate in English is required. The election opens on 18 May, if you are eligible and interested you have until 10 May to submit your candidacy. There will week between for candidates to answer questions from the community. Voting takes place privately in [[m:Special:MyLanguage/SecurePoll|SecurePoll]], successful candidates must receive at least 60% support. More information is available on [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|the 2026 Elections page]], including timelines and other candidacy information. If you read over the material and consider yourself qualified, please consider submitting your name to run for the committee. If you think someone else in your community might be interested and qualified, please encourage them to run. In partnership with the U4C -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 18:32, 28 April 2026 (UTC) </div> <!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/test&oldid=30471751 --> == Undeletion request == Hello, I am writing to request an undeletion of the page Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad. You stated you are a frequent visitor of the Lentis page and are thus familiar with it. This page was part of a class assignment and was in progress at the time of deletion. The work deleted is what we will be graded on for our class, so we would appreciate the restoration. [[User:Yqj3km|Yqj3km]] ([[User talk:Yqj3km|discuss]] • [[Special:Contributions/Yqj3km|contribs]]) 19:36, 4 May 2026 (UTC) :@[[User:Yqj3km|Yqj3km]] see my response below regarding undeletion. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:15, 4 May 2026 (UTC) == Undeletion request == About the page on Lentis called Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad: I, too, request undeletion, please. If the authors made any msitakes, the fault is 100 percent mine, for failing to guide them correctly. Like all chapters in this book, this team's chapter is a class assignment. I will be interested also in the reason for deletion so that I can guide authors better. I want to help my students be constructive contributors. Many thanks! [[User:Norton|Norton]] ([[User talk:Norton|discuss]] • [[Special:Contributions/Norton|contribs]]) 20:03, 4 May 2026 (UTC) :Hi @[[User:Norton|Norton]] and thanks for the ping! I deleted it because it was not titled/filed correctly, so I didn't realize it was part of [[Lentis]]. I have undeleted it and moved it to [[Lentis/Saumya Pandya Thakkar, Shakuntala Pandya and the Pedestrians of Ahmedabad]]. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:14, 4 May 2026 (UTC) ::Many, many thanks, @[[User:Kittycataclysm|Kittycataclysm]]! I am very grateful as always for everything you do for Wikibooks! ::[[User:Norton|Norton]] ([[User talk:Norton|discuss]] • [[Special:Contributions/Norton|contribs]]) 22:27, 4 May 2026 (UTC) == Log in issues == Hi, messaging you as you seem to be the most active admin at the moment. I can't log in (as posted at <bdi>[[Wikibooks:Reading room/Administrative Assistance]] and also on my WP page at</bdi> [[w:User_talk:Xania]]). Seems to be an issue with extra security for admins? I am asked to use my authenticator app (which I can't as I have never set it up for Wikibooks) or a recovery code (which I don't have). Any idea what I should do in this situation? Xania [[Special:Contributions/&#126;2026-28255-89|&#126;2026-28255-89]] ([[User talk:&#126;2026-28255-89|talk]]) 18:21, 10 May 2026 (UTC) :Apologies for missing this yesterday! It seems like we have a few people working on it over in the reading room, and I'll keep track there. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:37, 11 May 2026 (UTC) == Splitting pages == FYI, I untagged [[Art Print Production Methods]] as for splitting: the page is rather small with its 20 KB and does not need splitting, in my view. Ideally, there would be an operationalized, fairly detailed policy on the matter, but I do not know of one. Single-page books are in [[:Category:One-page books]]. --[[User:Dan Polansky|Dan Polansky]] ([[User talk:Dan Polansky|discuss]] • [[Special:Contributions/Dan Polansky|contribs]]) 04:45, 20 May 2026 (UTC) == <s>Slander</s> == <S>Your tag is slanderous and very easily proven wrong.</s>[https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654455] Given you likely didn't bother to look at the edit history, I would remind you that your given reason that you think it was AI is because you see the chapter is "numbered". That however was 100% my own personal decision after I reviewed my work and thought to myself that I later wrote in the introduction that there is a first to fourth chapter. However I thought to myself that the readers would not be easily made aware of what is meant by first to fourth as I didn't number them - so is why I dedicated an entire edit to make it less ambiguous [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654328]. I should not have to be falsely penalized because I wanted to be more considerate and ensure better clarity. I do however request AI to help me figure out coding like this - [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654329] as I don't know how to link. But I intentionally take great efforts to not rely on AI to write that book and find your wrongful presumptions troubling. [[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 06:00, 15 July 2026 (UTC) :@[[User:JaredMcKenzie|JaredMcKenzie]] thank you for clarifying! I flagged it for review because it matched a common pattern we see associated with LLM use here. If that is not the case, then nothing needs to happen in that respect; however, you will likely want to fix the lists so that they are correctly formatted in the Wikitext and not hard-written—let me know if you have any questions about that. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:14, 16 July 2026 (UTC) ::Yeah, I don't instantly understand what you mean by "correctly formatted" list. At first, I assumed you were referring to chapter 4 - (''Further reading'')? But I think I know what you mean. I made this edit here [https://en.wikibooks.org/w/index.php?title=Five_Rules_for_Meaningful_Living&diff=prev&oldid=4654738] to align with how I see wikibooks typically do lists. Did I fix it? If not, feel free to clarify.[[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 18:35, 16 July 2026 (UTC) ::I thought about how I responded earlier. Even tho I still disagree, I probably shouldn't have used such a tone. I imagine admins like yourself do a lot of work overseeing wiki and the project owes a lot to you guys. So I take back my harsh words, and I hope we're good.[[User:JaredMcKenzie|JaredMcKenzie]] ([[User talk:JaredMcKenzie|discuss]] • [[Special:Contributions/JaredMcKenzie|contribs]]) 03:38, 17 July 2026 (UTC) :::@[[User:JaredMcKenzie|JaredMcKenzie]] I appreciate that—thank you! And thank you for [[Special:Diff/4654738|making those changes to the lists]], which was indeed what I was referring to. Happy editing! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:31, 17 July 2026 (UTC) == The Geoguide == I literally wrote all of this myself I used no AI if you want to you can highlight the areas that seem way too formal and ill fix them [[User:Kayden Swanson|Kayden Swanson]] ([[User talk:Kayden Swanson|discuss]] • [[Special:Contributions/Kayden Swanson|contribs]]) 04:22, 18 July 2026 (UTC) :Thank you! I have removed the flag. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:41, 20 July 2026 (UTC) == Vandalism == your recent changes may not be constructive. {{Warning}} [[User:Duodeca 12|Duodeca 12]] ([[User talk:Duodeca 12|discuss]] • [[Special:Contributions/Duodeca 12|contribs]]) 20:39, 2 August 2026 (UTC) == Your recent revert == Could you explain [[Special:Diff/4670314]]? This seems to be you ''restoring'' vandalism, which was originally introduced by [[Special:Diff/4669920]]. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 20:06, 15 September 2026 (UTC) :Good catch! Somehow I didn't have the most recent version of a page loaded, and it seems like Luna reverts the most recent edit of a page and not the specific edit you're viewing. The edit in question should be fixed now. Thanks! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:11, 15 September 2026 (UTC) ::Sorry {{PAGENAME}} for butting in here, I hope you don't mind. ::Just wanted to mention that I have had a few similar experiences when editing (not having the most recent version of a page loaded). Once this caused me friction with an admin who was convinced I was willfully undoing their edit. This happened years ago on another wikimedia project. ::Ottawahitech [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 01:18, 16 September 2026 (UTC) == Confirmed user == <s>If this is one, could I perhaps be a confirmed user? The software has not granted me autoconfirmed, despite me having the requirements.</s> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:50, 22 September 2026 (UTC) :This is not needed anymore, thank you! [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:58, 22 September 2026 (UTC) e1ox29h2zznnghat4fk22cfv52j79p2 Pokémon/Trainer Card 0 447520 4671985 4627378 2026-09-23T17:20:26Z ~2026-51369-14 3626691 4671985 wikitext text/x-wiki In the ''Pokémon'' video games, a '''Trainer Card''' is an ID that all Pokémon Trainers use. The information on the trainer card updates as the trainer progresses in their adventure. The information shown includes, but is not limited to, the IDNo., the name of the trainer and its current money. In addition, a picture of the trainer is shown at the right side. Below the main information, the badges won by the player are displayed. The back of the trainer card, a feature introduced in the third generation, the player can see special achievements he or she has made such as the first time they beat the Pokémon League, the number of link trades and battles with other players, etc. == ''Pokémon Red'', ''Blue'', and ''Yellow'' == During the first generation, the information on the Trainer Card was very basic. It displayed the player's name, money and time he or she has been playing. The player's IDNo. wasn't shown in the trainer card. However, the trainer's Pokémon did have an IDNo. The badges already earned were displayed below this. If a badge hadn't been obtained yet, the gym leader's face would be displayed instead. == ''Pokémon Gold'', ''Silver'' and ''Crystal'' == During the second generation, the Trainer Card didn't change much. The differences between the previous trainer card and this one included the addition of the Trainer's IDNo. in the trainer card, and the badges shown in front of the gym leaders' faces, instead of erasing them. == ''Pokémon Ruby'', ''Sapphire'', and ''Emerald'' == During the third generation, the Trainer Card was improved notably by having more information on the card's back. Apart from battles with other players, it displayed the Hoenn new features, such as Pokémon Contests and Berry Blending. In ''Emerald'', once the player reached the Battle Frontier, the player's symbols earned in the Battle Frontier were displayed, including a map of it. At the corner, the Trainer Card could be zoomed to be watched normally. == ''Pokémon FireRed'' and ''LeafGreen'' == Because these games are also part of the third generation, the Trainer Card resembles the one in ''[[Pokémon Ruby|Ruby]]'', ''[[Pokémon Sapphire|Sapphire]]'', and ''[[Pokémon Emerald|Emerald]]''. However, the information recorded on the back of the card is different. Records saved on the back of the card include the trainer's Hall of Fame debut time, link battles win/loss record, number of Pokémon trades, number of Union Room trades and battles, and the trainer's Berry Crush record. Also, on the back of the Trainer Card, there are three spaces for stickers in the top-left corner. Stickers are applied to the Trainer Card by a man on [[Sevii Islands|Four Island]], when a story about your trainer career is told. They are given for achievements in defeating the [[Elite Four]], egg hatching, and link battle victories. {| class="wikitable" style="text-align:center;" |- ! ! Red sticker ! Blue sticker ! Yellow sticker ! Dark grey / black sticker |- | <b>Elite Four victories</b> | 1 | 40 | 100 | 200 |- | <b>Eggs hatched</b> | 1 | 100 | 200 | 300 |- | <b>Link battle victories</b> | 1 | 20 | 50 | 100 |} == ''Pokémon Diamond'' and ''Pearl'' == In the fourth generation, the front of the Trainer Card improved notably, too. The addition to the trainer card includes, the trainer's time since the game was started, including the time the game hasn't been played. Instead of displaying the badges on the front as usual, the player can look at them in a complete screen. When badges aren't checked for some time, they become dirty and must be cleaned suing the stylus. The back of the Trainer Card in Diamond and Pearl is currently unknown. == Stars == When the player completes a certain requirement in the Advance generation games, a star will appear on their Trainer Card, and it will change its color. A trainer begins its journey with no stars, and is able to obtain up to five. There is no special order for obtaining the stars, and the order won't change the results at all. '''Ruby and Sapphire''' Green Card (0 Stars) - The player has this at the start of the game.<br />Bronze Card (1 Star) - The player gets a star by beating the Elite Four for the first time.<br />Copper Card (2 Stars) - The player gets another star by completing the Hoenn Pokédex (excluding Jirachi and Deoxys).<br />Silver Card (3 Stars) - The player gets another star by winning 100 consecutive times in the Battle Tower.<br />Gold Card (4 Stars) - The last star is acquired by beating all five type of contests at the Master Rank level. '''FireRed and LeafGreen''' Blue Card (0 Stars) - The player has this card when he or she starts the game.<br />Bronze Card (1 Star) - The first star is obtained by beating the Elite Four.<br />Copper Card (2 Stars) - The player gets another star by completing the Kanto Pokédex (excluding Mew).<br />Silver Card (3 Stars) - The third star is obtained after completing the National Pokédex (excluding Mew, Celebi, Jirachi and Deoxys).<br />(Unconfirmed) Gold card (4 stars) - The fourth star is speculated to be obtained by getting 200 points on each of the Two Island minigames with at least three people participating. However, it has not been confirmed. '''Emerald''' Green Card (0 Stars) - The player has this at the start of the game.<br />Bronze Card (1 Star) - The player gets a star by beating the Elite Four for the first time.<br />Copper Card (2 Stars) - The player gets another star by completing the Hoenn Pokédex (excluding Jirachi and Deoxys).<br />Silver Card (3 Stars) - The player gets another star by getting the gold symbols of all Frontier facilities.<br />Gold Card (4 Stars) - The last star is acquired by beating all five type of contests at the Master Rank level. '''Diamond and Pearl''' Red Card (0 Stars) - The player has this card when he or she starts the game.<br />Blue Card (1 Star) - The first star is obtained by beating the Elite Four.<br />Bronze Card (2 Stars) - The second star is acquired by beating all five type of contests at the Master Rank level.<br />Silver Card (3 Stars) - The player get another star by winning 100 consecutive times in the Battle Tower.<br />Gold Card (4 Stars) - The fourth star is obtained after completing the National Pokédex (excluding Mew, Lugia, Ho-oh, Celebi, Jirachi, Deoxys, Phione, Manaphy, Darkrai, Shaymin and Arceus).<br /> Black Card (5 Stars) - This star is acquired after the player has played at least once the Capture the Flag Minigame. ==References== ;Publications *In-game content and the instruction manuals for ''Pokémon FireRed and LeafGreen'' and ''Pokémon Ruby and Sapphire'' *Nintendo Power. ''Official Nintendo Pokémon FireRed & Pokémon LeafGreen Player’s Guide''. Nintendo of America Inc., August 2004. {{#isbn:193020650X}} ;Web *[http://www.serebii.net/pokemon_advance/trainer.shtml Serebii’s Ruby and Sapphire Trainer Card Page] *[http://www.serebii.net/red_green/trainer-card.shtml Serebii’s FireRed and LeafGreen Trainer Card Page] {{Bookcat}} hxfpidencoowacsttwliwcd8c3bmotx History of video games/Platforms/SquareOne 0 451390 4672089 4225470 2026-09-24T09:08:38Z R. Henrik Nilsson 3395618 refrences > references 4672089 wikitext text/x-wiki ==History== The console was developed by the startup Wizama of France.<ref name="ZD">{{cite news |last1=Rubin |first1=Ross |title=Startups remake classic games for the digital era |url=https://www.zdnet.com/article/startups-remake-classic-games-for-the-digital-era/ |access-date=31 December 2022 |work=ZDNET |date=May 20, 2022 |language=en}}</ref><ref name="Elektor">{{cite news |title=SquareOne Returns to CES Las Vegas |url=https://www.elektormagazine.com/news/squareone-returns-to-ces-of-las-vegas |access-date=31 December 2022 |work=Elektor |language=en}}</ref> The console was shown at CES 2019 and CES 2020.<ref name="Elektor"/><ref name="TomGuide">{{cite news |last1=Priday |first1=Richard |title=SquareOne wants to be your all-digital board game collection |url=https://www.tomsguide.com/news/squareone-wants-to-be-your-all-digital-board-game-collection |access-date=31 December 2022 |work=Tom's Guide |date=11 January 2020 |language=en}}</ref> The console was expected to be released in Fall of 2022 for a price of 499 euros.<ref name="ZD"/> ==Technology== ===Compute=== The system was equipped with 2 gigabytes of RAM.<ref name="TomGuide"/> The system could be made with either 64 gigabytes or 128 gigabytes of internal storage.<ref name="TomGuide"/> ===Input=== NFC and Bluetooth are used by the console in conjunction with a touchscreen to simulate the board of a board game.<ref name="Elektor"/><ref name="TomGuide"/> Games were installed via digital download.<ref>{{cite news |last1=Caballero |first1=David |title=Wizama's SquareOne is a digital board game console |url=https://www.gamereactor.eu/wizamas-squareone-is-a-digital-board-game-console/ |access-date=31 December 2022 |work=Gamereactor UK |date=January 8, 2019 |language=en}}</ref> ==Games== ===Chromacy=== A strategy game.<ref name="TomGuide"/> ==References== {{Reflist}} {{Status|25%}} {{Bookcat}} p10d44b2lbzhxz7tny0ynpv11g05spw History of video games/Platforms/Alienware Concept UFO 0 451391 4672090 4225493 2026-09-24T09:09:17Z R. Henrik Nilsson 3395618 refrences > references 4672090 wikitext text/x-wiki ==History== ===Announcement=== The console was first publicly shown on Monday, January 6, 2020 at CES.<ref>{{cite news |last1=Boom |first1=Daniel Van |title=Alienware Concept UFO shows why portable games are better than streaming (for now) |url=https://www.cnet.com/tech/computing/alienware-concept-ufo-shows-why-portable-games-are-better-than-streaming-for-now/ |access-date=31 December 2022 |work=CNET |date=January 7, 2022 |language=en}}</ref> ===Legacy=== By 2022 the console had not been released.<ref>{{cite news |title=It's been two years, the Dell Alienware UFO concept is nowhere to be found |url=https://www.gamingnexus.com/News/48631/Its-been-two-years2c-the-Dell-Alienware-UFO-concept-is-nowhere-to-be-found/ |access-date=31 December 2022 |work=Gaming Nexus |date=January 7, 2022 |language=en}}</ref> The Alienware Concept Nyx was another notable concept device of the era.<ref>{{cite news |last1=Grunin |first1=Lori |title=Alienware Concept Nyx CES prototype would solve a big gaming annoyance |url=https://www.cnet.com/tech/gaming/alienware-concept-nyx-ces-prototype-would-solve-big-gaming-annoyance/ |access-date=31 December 2022 |work=CNET |date=January 4, 2022 |language=en}}</ref> ==Technology== ===Hardware=== The system appeared to use a display with a either a 720P resolution,<ref>{{cite news |last1=Thomas |first1=Bill |title=Hands on: Alienware Concept UFO review |url=https://www.techradar.com/reviews/alienware-concept-ufo |access-date=31 December 2022 |work=TechRadar |date=6 January 2020 |language=en}}</ref> or a 1200P resolution.<ref>{{cite news |last1=Gartenberg |first1=Chaim |title=Alienware’s Concept UFO prototype imagines a gaming PC that’s shaped like a Nintendo Switch |url=https://www.theverge.com/circuitbreaker/2020/1/6/21048262/alienware-concept-ufo-prototype-gaming-pc-nintendo-switch-ces-2020 |access-date=31 December 2022 |work=The Verge |date=6 January 2020}}</ref> ===Software=== The system ran Windows 10 as an operating system.<ref>{{cite news |last1=Smith |first1=Sherri L. |title=Alienware Concept UFO is a Switch killer that plays PC games |url=https://www.tomsguide.com/news/alienware-concept-ufo |access-date=31 December 2022 |work=Tom's Guide |date=6 January 2020 |language=en}}</ref> ==References== {{Reflist}} {{Status|25%}} {{Bookcat}} dbkuc7s09w77pjfr6jmxe3828s0x3t3 Algebra/Chapter 2/Exercises 0 462029 4672062 4651225 2026-09-24T08:30:34Z R. Henrik Nilsson 3395618 Celcius > Celsius 4672062 wikitext text/x-wiki A set of exercises related to concepts from Chapter 2. This set contains 73 problems (8 '''Conceptual Questions''' + 64 '''Exercises''' + 1 '''Project''') ==Conceptual Questions== '''<u>Q2.1</u> (Are they the Same?)''' Is “3 less than a number” the same thing as “the difference of 3 and a number”? What about "3 more than a number" and "the sum of 3 and a number"? Explain your reasoning in both cases. '''<u>Q2.2</u> (Coefficients)''' Does the expression x + 2 have any coefficients for x? What about the expression yx + 2, where any number can take the place of y? If so, identify the coefficient of x in each expression? If not, explain your reasoning. '''<u>Q2.3</u> (Zero as a Constant Term?)''' An expression like x + y can be rewritten as x + y + 0. If this is the case, is it necessarily true that zero is a constant term for any given expression? '''<u>Q2.4</u> (Grammar in Mathematics)''' If mathematical expressions are analogous to "nouns" in a language, what part(s) of a mathematical expression is/are analogous to "verbs"? What part(s) are analogous to "conjunctions"? '''<u>Q2.5</u> (Set of Sets)''' Give three examples of sets whose elements are sets. '''<u>Q2.6</u> (Set of Sets of Sets)''' Give an example of a set whose elements are sets of sets. '''<u>Q2.7</u> (Multiplication and the Distributive Law)''' Point out in what sense the usual arrangement of the multiplication of 365 and 392 is an instance of the Distributive Law. '''<u>Q2.8</u> (Box of Blocks)''' Amanda and Billy stack a pile of blocks to build a box pictured on the left, and would like to figure out how many blocks they used. Since the box is solid, each layer has the same number of blocks as the top layer. Amanda states that there are 4 x 5 = 20 blocks on the top, and since there are 4 layers below it, she says there are 20 x 5 blocks total. Who is correct? ==Exercises== ===Section 2.1=== (★) '''<u>2.1</u> (Writing/Simplifying Expressions)''' Write an expression that best represents the following. '''1.''' The sum of a and 3. (★) '''<u>2.2</u> (Evaluating Expressions)''' Evaluate each expression for the given variable value. {|style="border-spacing: 3em .5em;" |- |<math>1.\ x + 3,\ x = 3</math> |<math>2.\ 10x - 3,\ x = 3</math> |<math>3.\ 4a - 2,\ a = 9</math> |<math>4.\ \frac{-n-1}{3},\ n=11</math> |<math>5.\ \frac{-b-2}{7},\ b=5</math> |- |<math>6.\ </math> |<math>7.\ </math> |<math>8.\ </math> |<math>9.\ </math> |<math>10.\ </math> |- |<math>11.\ </math> |<math>12.\ </math> |<math>13.\ </math> |<math>14.\ </math> |<math>15.\ </math> |- |<math>16.\ </math> |<math>17.\ </math> |<math>18.\ </math> |<math>19.\ </math> |<math>20.\ </math> |- |} (★) '''<u>2.3</u> (Anatomy of a Mathematical Expression)''' Look at the expression below. Define all of the simplified expression's terms, variables, coefficents, and constants. {{center|<math>3x^2 + 4y + y + 6</math>}} (★) '''<u>2.4</u> (Constants and Variables)''' Letters will be given to represent various numbers. Decide if the following quantities should be referred to as variables or constants. <math>a.\ T</math>, the temperature outside of your house.<br> <math>b.\ F</math>, the number of fingers on an average person's hand.<br> <math>c.\ P</math>, the price of a gallon of gas.<br> <math>d.\ L</math>, the number of leaves on a tree.<br> <math>e.\ S</math>, the number of sides on a rectangle.<br> <math>f.\ I</math>, the number of inches in a foot.<br> <math>g.\ Y</math>, the number of years since the last moon landing.<br> <math>h.\ D</math>, the number of donuts in an unopened box of a dozen.<br> <math>i.\ W</math>, the number of windows open on your computer screen.<br> <math>j.\ R</math>, the number of problems in this book you have attempted.<br> ===Section 2.2=== (★) '''<u>2.5</u> (Writing Mathematical Sentences)''' Write a sentence that best represents the following. ===Section 2.3=== (★) '''<u>2.6</u> (Identifying Mathematical Statements)''' Which of the following sentences are statements? '''1.''' Eat your vegetables!<br> '''2.''' Aaron ate his vegetables.<br> '''3.''' Every rectangle is a parallelogram. ===Section 2.4=== ===Section 2.5=== (★★) <nowiki>*</nowiki>'''<u>2.7</u> (Square Root of 3)''' Prove that <math>\sqrt{3}</math> is an irrational number. (★★) <nowiki>*</nowiki>'''<u>2.8</u> (Chess Board I)''' (★★) <nowiki>*</nowiki>'''<u>2.9</u> (Chess Board II)''' (★★★) <nowiki>*</nowiki>'''<u>2.10</u> (Density Property of Real Numbers)''' The ''Density Property of Real Numbers'' states that between any two real numbers, there is another real number. Use this property to prove that there are infinitely many real numbers between 0 and 1. ===Section 2.6=== (★) '''<u>2.11</u> (Element or Not?)''' Determine if the number 10 is an element in the following sets. <b>1.</b> <math>\{4, 5, 6,...,15\}</math><br> <b>2.</b> <math>\{1, 2, 3, 4, 5,...\}</math><br> <b>3.</b> <math>\{1, \frac{1}{2}, \frac{1}{4}, \frac{1}{8},...\}</math><br> <b>4.</b> <math>\{x|x\ is\ a\ whole\ number\ greater\ than\ 11\}</math><br> <b>5.</b> <math>\{x|x\ is\ a\ whole\ even\ number\}</math><br> <b>6.</b> The set <math>C</math> made up of composite numbers<br> (★) '''<u>2.12</u> (Roster Notation)''' Each of the sets below are defined using roster notation. <b>i.</b> <math>\{1, 4, 9, 16, 25...\}</math><br> <b>ii.</b> <math>\{0, 4, 8,...,96, 100\}</math><br> <b>iii.</b> <math>\{3, 9, 15, 21, 27...\}</math><br> <b>iv.</b> <math>\{..., -\pi^4, -\pi^3, -\pi^2, -\pi, 1\}</math><br> <b>1.</b> Determine four other elements that may appear in the sets above.<br> <b>2.</b> Use set builder notation to describe the sets above. (★) '''<u>2.13</u> (Sorting Automobiles)''' Construct a Venn Diagram which illustrates the possible unions and intersections of the following sets relative to the universal set consisting of automobiles made in the United States. <div style="text-align: center;"><math>F: Four door, S: Sunroof, P: Power steering</math></div> (★) '''<u>2.14</u> (Relating Types of Numbers)''' Refer to the section '''Types of Numbers''' in '''Section 1.8'''. Create a Venn Diagram which shows how each of the number types listed are related to each other. (★) '''<u>2.15</u> (Working with Sets I)''' Let <math>U = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13\}</math>, <math>M = \{0, 2, 4, 6, 8\}</math>, <math>N = \{1, 3, 5, 7, 9, 11, 13\}</math>, <math>Q = \{0, 2, 4, 6, 8, 10, 12\}</math>, and <math>R = \{0, 1, 2, 3, 4\}</math>. Use these sets to find the following. (★) '''<u>2.16</u> (Working with Sets II)''' Let <math>U = \{copper, sodium, nitrogen, potassium, uranium, oxygen, zinc\}</math>, <math>A = \{copper, sodium, zinc\}</math>, <math>B = \{sodium, nitrogen, potassium\}</math>, <math>C = \{oxygen\}</math>. Use these sets to find the following. (★★) '''<u>2.17</u> (Working with Sets III)''' If <math>U = \{x|0<x<12\}</math>, <math>M = \{x|1<x<9\}</math>, and <math>N = \{x|0<x<5\}</math>. Use these sets to find the following. (★★) '''<u>2.18</u> (Working with Sets IV)''' Suppose <math>A</math>, <math>B</math>, and <math>C</math> are subsets of the universal set <math>U</math>. Using Venn Diagrams, shade the areas that represent the following. (★) '''<u>2.19</u> (Working with Subscripts)''' For a whole number <math>j</math>, <math>x_j = (-1)^j</math>. Find the value of <math>x_0</math>, <math>x_1</math>, and <math>x_{183}</math>. (★) '''<u>2.20</u> (List of Numbers)''' Refer to the set of numbers below, and use it to answer the following questions. <div style="text-align: center;"><math>x = \{5, 11, 14, 9, 3, 25, 16, 8, 1, 11, 68, 63, 43, 99, 35, 100\}</math></div> '''1.''' In the set, which number is represented by <math>x_3</math>?<br> '''2.''' In the set, which number is represented by <math>x_{10}</math>?<br> '''3.''' What symbol(s) can be used to represent the number 25 in the list?<br> '''4.''' What symbol(s) can be used to represent the number 11 in the list?<br> '''5.''' What number represents <math>n</math> in <math>x_n</math>?<br> '''6.''' What value does <math>x_n</math> take? '''<u>2.21</u> (Average)''' Use subscript notation to write an expression which represents the average of <math>n</math> numbers. ===Section 2.7=== (★★) '''<u>2.22</u> (Gauss's Trick)''' In the late 1700s, the kindergarten class of the mathematician Carl Fredrich Gauss was asked to find the sum of all of the natural numbers between 1 and 100. While most of the class had struggled with this seemingly impossible task, Gauss was able to determine the solution to this problem rather quickly. '''1.''' How was he able to do this? '''2.''' We can use techniques similar to Gauss' in order to find the sum of several numbers. Can you find the following? '''i.''' <math>1 + 2 + 3 + 4 + ... + 201</math><br> '''ii.''' <math>2 + 4 + 6 + 8 + ... + 200</math><br> '''iii.''' <math>101 + 102 + 103 + ... + 998 + 999 + 1000</math><br> '''iv.''' <math>9 + 12 + 15 + ... + 54 + 57 + 60</math> (★) '''<u>2.23</u> (Using the Distributive Property)''' Use the Distributive Property to simplify these expressions. <math>a.\ 2(14x - 26)</math><br> <math>b.\ (2/3)(3x + 9)</math><br> <math>c.\ 3(12x + 4y)</math><br> <math>d.\ 2(5x - 6) + 3(3x + 2)</math><br> <math>e.\ (4x + 7)(2x - 3)</math><br> <math>f.\ (x + 1)(x + 2)(x + 3)</math> (★★) '''<u>2.24</u> (Distribution with Three Terms)''' What is the coefficient of y in the expansion of the expression below? <math>(5x+2y-4)(2x+7y+3)</math> (★) '''<u>2.25</u> (Closure of a Set)''' Two letters from the set <math>\{a, b, c, d, e\}</math> are chosen and multiplied together. The results after doing this are as follows: {| class="wikitable" ! * || a || b || c || d || e |- |'''a''' || b || c || e || a || d |- |'''b''' || d || a || c || b || e |- |'''c''' || c || d || b || e || a |- |'''d''' || a || e || d || c || b |- |'''e''' || e || b || a || d || c |} Is the set closed under multiplication? (★) '''<u>2.26</u> (Closure of Operators)''' Complete the following table which represents the closure properties of operations with different types of numbers. Use a check mark to represent closure, and a cross to represent no closure. {| class="wikitable" ! || Addition || Subtraction || Multiplcation || Division || Exponentiation || Root |- |ℕ || || || || || || |- |𝕎 || || || || || || |- |ℤ || || || || || || |- |ℚ || || || || || || |- |𝕀 || || || || || || |- |ℝ || || || || || || |} '''<u>2.27</u> (Determining Properties of Real Numbers)''' Determine if the following statements are always, sometimes, or never true. If the statement is always true, explain your reasoning. If the statement is not always true, provide a [[Mathematical Proof/Methods of Proof/Counterexamples|counterexample]]. <math>a.\ An\ integer\ is\ a\ whole\ number.</math><br> <math>b.\ If\ a\ number\ is\ whole\ it\ is\ a\ natural\ number.</math><br> <math>c.\ If\ a\ number\ contains\ a\ decimal\ it\ is\ an\ integer.</math><br> <math>d.\ If\ a\ number\ is\ nautural,\ then\ it\ is\ a\ real\ number.</math><br> <math>e.\ The\ product\ of\ two\ irrational\ numbers\ is\ an\ irrational\ number.</math> '''<u>2.28</u> (Identifying Properties of Real Numbers)''' Identify the following properties being expressed. <math>a.\ 4(3x + 4) = 12x + 16</math><br> <math>b.\ 6 + 0 = 6</math><br> <math>c.\ (2 + 7) + 5 = (2 + 5) + 7</math><br> <math>d.\ (3/4)(4/3) = 1</math><br> <math>e.\ To\ divide\ 3072\ by\ 512,\ you\ can\ divide\ 3072\ by\ 16,\ again\ by\ 8,\ and\ again\ by\ 4.</math> '''<u>2.29</u> (Product Pattern)''' Use the Associative Law to explain why the products in each rule are equal. {| style="border-spacing: 3em .5em;" |- |<math>2*2 = 1*4</math> |- |<math>4*3 = 2*6</math> |- |<math>6*4 = 3*8</math> |- |<math>8*5 = 4*10</math> |- |<math>10*6 = 5*12</math> |- |<math>12*7 = 6*14</math> |- |<math>14*8 = 7*16</math> |} '''<u>2.30</u> (Square of Sum/Difference)''' For two numbers <math>a</math> and <math>b</math>, find the following: <math>a.\ (a + b)^2</math><br> <math>b.\ (a - b)^2</math> '''<u>2.31</u> (Secret of 1001)''' A boy claims that he can figure out the product of any three digit number and 1001. A student in his arithmetic class challenges him to find the product of 1001 and 865, and he gets the correct answer immediately. Compute the answer, and determine the boy's secret. ===Section 2.8=== ===Section 2.9=== ===Section 2.10=== (★) '''<u>2.32</u> (Museum Admissions)''' The total cost to get admission to a museum is 25a + 10c + 8s for a adults, c children, and s seniors. How much does it cost for each adult, child, and senior respectively to get admission? If a family of two adults, three children, and one senior wants to gain admission to the museum, how much would they have to pay in total? (★) '''<u>2.33</u> (Cutting Edge)''' A 12 ft long piece of rope was cut into two pieces of different lengths. Use one variable to represent the lengths of the two pieces. (★) '''<u>2.34</u> (Play Ball!)''' The diameter of a basketball is approximately 4 times of that of a baseball. Express the diameter of a basketball in terms of the diameter of a baseball. (★) '''<u>2.35</u> (Pocket Change)''' Suppose have '''d''' dimes and '''n''' nickels in your pocket. Write an expression which represents the total amount of money you have. Use this expression to figure out how much money you would have if you had 9 dimes and 7 nickels. (★) '''<u>2.36</u> (Units of Temperature I)''' The formula {{center|<math>C = \frac{5}{9}(F-32)</math>}} expresses the relationship between Farenheit temperature, '''F''', and Celsius temperature, '''C'''. Use this equation to convert <math>50^\circ F</math>, <math>86^\circ F</math>, <math>32^\circ F</math>, <math>100^\circ F</math>, and <math>-50^\circ F</math> to their equivalent temperature on the Celsius scale. (★) '''<u>2.37</u> (Units of Temperature II)''' The formula {{center|<math>K = C + 273.15</math>}} expresses the relationship between Celsius temperature, '''C''', and Kelvin temperature, '''K'''. Use this equation to convert <math>-273.15^\circ C</math>, <math>30^\circ C</math>, and <math>100^\circ F</math> to their equivalent temperature on the Kelvin scale. (★★) '''<u>2.38</u> (Chemical Formula for Sugar)''' The chemical formula for glucose (sugar) is <math>C_6H_{12}O_6</math>. This formula means there are 12 hydrogen atoms for every 6 carnon atoms and 6 oxygen atoms in each molecule of glucose. If '''x''' represents the number of atoms in oxygen in a pound of sugar, express the number of hydrogen atoms in the the same pound of sugar. (★) '''<u>2.39</u> (Building Blocks)''' Look at the arrangements of building blocks below. How many blocks will appear in diagram 17? (★) '''<u>2.40</u> (Rows of Seats)''' In an auditorium, the first row has 8 seats, and five extra seats are added in each row afterwards. If the auditorium has 20 rows, how many seats are there in total? (★★) '''<u>2.41</u> (Triangles in Polygons)''' In a triangle, there are three sides. We can obviously observe from this that this contains 1 triangle. In a quadrilateral, there are four sides. We can observe from this that two non-overlapping triangles can be made out of this by dividing it along its corners. In a pentagon, there are five sides. We can observe from this that three non-overlapping trianges can be made out of this by dividing it along its corners. Using this information, how many non-overlapping triangles can you make out of a decagon (10-sided polygon) by dividing it along its corners? (★★) '''<u>2.42</u> (Product of Consecutive Numbers)''' Two numbers are consecutive if they follow each other in numerical order. For example, the numbers 4 and 5 are consecutive because 5 comes after 4. What would be an algebraic representation of the product of two such numbers? (★★) '''<u>2.43</u> (Odd Numbers)''' Write an expression that represents the '''n'''th odd number, '''O'''. (First odd number is 1, Second odd number is 3, and so forth) Afterwards, use this expression to find the 143rd odd number. [[File:FDA Nutrition Facts Label 2016.png|thumb|left]] (★★) '''<u>2.44</u> (Weight-Loss Points)''' Several weight-loss programs assign points to prepared or packaged foods that take into account of the food's fat '''F''', carbohydrate '''C''', protein '''P''', and fiber '''B''' content in grams. The point value for a given food item can be represented by the following expression: {{center|<math>W = \frac{F}{4} + \frac{C}{9} + \frac{P}{10} - \frac{B}{12}</math>}} Determine the point value of one serving of the item having the nutrition facts on the left. (★★) '''<u>2.45</u> (Adjusted Poverty Threshold)''' The adjusted poverty threshold for a single person between 1999 and 2013 can be approximated by the formula {{center|<math>y = 2.719x^2 + 196.1x + 8718</math>}} where x is the number of years since 1999, and where y is the average adjusted poverty threshold. According to the model, what was the average adjusted poverty threshold in 2005? In 2012? (★★) '''<u>2.46</u> (Period of a Pendulum)''' The period t, in seconds, of the swing of a pendulum is given by {{center|<math>t = 2\pi\sqrt{\frac{L}{32}}</math>}} where L is the length of the pendulum in feet. Find the period of a pendulum 8 feet long. (★★) '''<u>2.47</u> (Velocity of a Ball)''' A ball is thrown vertically upward. Its velocity t seconds after its release is given by the formula: {{center|<math>v = v_0 - gt </math>}} where v0 is its initial velocity, g is the acceleration due to gravity, and v is the velocity of the ball at time t. '''1.''' Calculate the upward velocity of a ball after 8 seconds on Earth (g = 9.8) after tossing it at a velocity of 5 m/s.<br> '''2.''' Calculate the upward velocity of a ball after 8 seconds on the Moon (g = 1.625) after tossing it at a velocity of 5 m/s. (★★) '''<u>2.48</u> (Isotopes)''' The isotopes of any given chemical element all have the same atomic number (same number of protons), but a differing numbers of neutrons. They are written as the formula: {{center|<math>^{A}_{Z}X^C</math>}} In this notation, X takes the place of the element's symbol, A is its atomic mass, Z is its atomic number, and C is its charge (This number isn't written down if there is a zero charge). From this, we can find: *The number of protons from looking at Z. *The number of electrons from adding Z and C. *The number of neutrons from subtracting Z from A. Use this information to find the number of protons, electrons, and neutrons from the following isotopes. '''1.''' <math>^{19}_{9}F</math><br> '''2.''' <math>^{36}_{17}Cl^{-1}</math><br> ===Section 2.11=== (★) '''<u>2.49</u> (Area of a Rectangle)''' A rectangle has an area of 24 <math>in.^2</math> and a length '''b''' in inches. What does the expression <math>\frac{24}{b}</math> represent? What quantity does the expression <math>2(b + \frac{24}{b})</math> represent? (★) '''<u>2.50</u> (Change in Length)''' Consider an equilateral triangle with sides of length '''s'''. Find the perimeter of the triangle if we increase the lengths of the sides by 5. Find the perimeter if we double the lengths of the sides. (★) '''<u>2.51</u> (Metal Wire)''' A metal wire of length '''x''' is bent into a square. Express the length of a side of the square in terms of x. (★★) '''<u>2.52</u> (Vegetable Garden)''' A rectangular vegetable garden is 12 meters long and 20 meters wide. Surrounding the garden is a gravel path of width '''''w'''''. <br> '''1.''' Write an expression that can be used to find the outer perimeter of the gravel path. <br> '''2.''' If you measure w to be 3 meters, what is the outer perimeter of the path? (★★) '''<u>2.53</u> (Racetrack)''' An Olympic racetrack is made up of two straight sides, each measuring 84.39 meters in length, and two semi-circular curves with a radius of 36.5 meters as pictured. The track has a width of '''w'''.<br> '''1.''' Write an expression that can be used to find the outer perimeter of the racetrack. (Remember that the perimeter of a circle is <math>2\pi r</math>) <br> '''2.''' If you measure that the width of the track is 1.22, what is the outer perimeter of the path? (★★) '''<u>2.54</u> (Cube of p + q)''' As demonstrated in the section, the square of the expression <math>(p + q)</math> can be represented by the diagram below. Use a similar diagram to find the cube of the expression <math>(p + q)</math>. (★★★) '''<u>2.55</u> (Cube of p + q + r)'''<br> '''1.''' Create a diagram that represents the square of <math>(p + q + r)</math>, then use it to find its value.<br> '''2.''' Do the same thing, but for the cube of <math>(p + q + r)</math>. ===Section 2.12=== (★) '''<u>2.56</u> (Evaluating Functions I)''' Evaluate <math>f(x) = x^2</math> at the following values. '''1.''' <math>f(2)</math><br> '''2.''' <math>f(-5)</math><br> (★) '''<u>2.57</u> (Evaluating Functions II)''' Evaluate <math>g(x)</math> at the following values. (★) '''<u>2.58</u> (Evaluating Functions III)''' Evaluate <math>h(x)</math> at the following values. (★) '''<u>2.59</u> (Evaluating Functions IV)''' Evaluate <math>i(x)</math> at the following values. (★) '''<u>2.60</u> (Evaluating Functions V)''' Evaluate <math>j(x)</math> at the following values. (★) '''<u>2.61</u> (Evaluating Functions VI)''' Evaluate <math>k(x)</math> at the following values. (★) '''<u>2.62</u> (Evaluating Functions VII)''' Evaluate <math>l(x)</math> at the following values. (★) '''<u>2.63</u> (Evaluating Functions VIII)''' Evaluate <math>m(x)</math> at the following values. (★) '''<u>2.64</u> (Functions and Relations)''' Which of the following definitions are functions and which are relations: ==Projects== '''<u>P2.1</u> (Pythagorean Triples)''' {{bookcat}} ox6yty6gtvpo960uq1sjkevde3eyind 4672069 4672062 2026-09-24T08:36:43Z R. Henrik Nilsson 3395618 Farenheit > Fahrenheit 4672069 wikitext text/x-wiki A set of exercises related to concepts from Chapter 2. This set contains 73 problems (8 '''Conceptual Questions''' + 64 '''Exercises''' + 1 '''Project''') ==Conceptual Questions== '''<u>Q2.1</u> (Are they the Same?)''' Is “3 less than a number” the same thing as “the difference of 3 and a number”? What about "3 more than a number" and "the sum of 3 and a number"? Explain your reasoning in both cases. '''<u>Q2.2</u> (Coefficients)''' Does the expression x + 2 have any coefficients for x? What about the expression yx + 2, where any number can take the place of y? If so, identify the coefficient of x in each expression? If not, explain your reasoning. '''<u>Q2.3</u> (Zero as a Constant Term?)''' An expression like x + y can be rewritten as x + y + 0. If this is the case, is it necessarily true that zero is a constant term for any given expression? '''<u>Q2.4</u> (Grammar in Mathematics)''' If mathematical expressions are analogous to "nouns" in a language, what part(s) of a mathematical expression is/are analogous to "verbs"? What part(s) are analogous to "conjunctions"? '''<u>Q2.5</u> (Set of Sets)''' Give three examples of sets whose elements are sets. '''<u>Q2.6</u> (Set of Sets of Sets)''' Give an example of a set whose elements are sets of sets. '''<u>Q2.7</u> (Multiplication and the Distributive Law)''' Point out in what sense the usual arrangement of the multiplication of 365 and 392 is an instance of the Distributive Law. '''<u>Q2.8</u> (Box of Blocks)''' Amanda and Billy stack a pile of blocks to build a box pictured on the left, and would like to figure out how many blocks they used. Since the box is solid, each layer has the same number of blocks as the top layer. Amanda states that there are 4 x 5 = 20 blocks on the top, and since there are 4 layers below it, she says there are 20 x 5 blocks total. Who is correct? ==Exercises== ===Section 2.1=== (★) '''<u>2.1</u> (Writing/Simplifying Expressions)''' Write an expression that best represents the following. '''1.''' The sum of a and 3. (★) '''<u>2.2</u> (Evaluating Expressions)''' Evaluate each expression for the given variable value. {|style="border-spacing: 3em .5em;" |- |<math>1.\ x + 3,\ x = 3</math> |<math>2.\ 10x - 3,\ x = 3</math> |<math>3.\ 4a - 2,\ a = 9</math> |<math>4.\ \frac{-n-1}{3},\ n=11</math> |<math>5.\ \frac{-b-2}{7},\ b=5</math> |- |<math>6.\ </math> |<math>7.\ </math> |<math>8.\ </math> |<math>9.\ </math> |<math>10.\ </math> |- |<math>11.\ </math> |<math>12.\ </math> |<math>13.\ </math> |<math>14.\ </math> |<math>15.\ </math> |- |<math>16.\ </math> |<math>17.\ </math> |<math>18.\ </math> |<math>19.\ </math> |<math>20.\ </math> |- |} (★) '''<u>2.3</u> (Anatomy of a Mathematical Expression)''' Look at the expression below. Define all of the simplified expression's terms, variables, coefficents, and constants. {{center|<math>3x^2 + 4y + y + 6</math>}} (★) '''<u>2.4</u> (Constants and Variables)''' Letters will be given to represent various numbers. Decide if the following quantities should be referred to as variables or constants. <math>a.\ T</math>, the temperature outside of your house.<br> <math>b.\ F</math>, the number of fingers on an average person's hand.<br> <math>c.\ P</math>, the price of a gallon of gas.<br> <math>d.\ L</math>, the number of leaves on a tree.<br> <math>e.\ S</math>, the number of sides on a rectangle.<br> <math>f.\ I</math>, the number of inches in a foot.<br> <math>g.\ Y</math>, the number of years since the last moon landing.<br> <math>h.\ D</math>, the number of donuts in an unopened box of a dozen.<br> <math>i.\ W</math>, the number of windows open on your computer screen.<br> <math>j.\ R</math>, the number of problems in this book you have attempted.<br> ===Section 2.2=== (★) '''<u>2.5</u> (Writing Mathematical Sentences)''' Write a sentence that best represents the following. ===Section 2.3=== (★) '''<u>2.6</u> (Identifying Mathematical Statements)''' Which of the following sentences are statements? '''1.''' Eat your vegetables!<br> '''2.''' Aaron ate his vegetables.<br> '''3.''' Every rectangle is a parallelogram. ===Section 2.4=== ===Section 2.5=== (★★) <nowiki>*</nowiki>'''<u>2.7</u> (Square Root of 3)''' Prove that <math>\sqrt{3}</math> is an irrational number. (★★) <nowiki>*</nowiki>'''<u>2.8</u> (Chess Board I)''' (★★) <nowiki>*</nowiki>'''<u>2.9</u> (Chess Board II)''' (★★★) <nowiki>*</nowiki>'''<u>2.10</u> (Density Property of Real Numbers)''' The ''Density Property of Real Numbers'' states that between any two real numbers, there is another real number. Use this property to prove that there are infinitely many real numbers between 0 and 1. ===Section 2.6=== (★) '''<u>2.11</u> (Element or Not?)''' Determine if the number 10 is an element in the following sets. <b>1.</b> <math>\{4, 5, 6,...,15\}</math><br> <b>2.</b> <math>\{1, 2, 3, 4, 5,...\}</math><br> <b>3.</b> <math>\{1, \frac{1}{2}, \frac{1}{4}, \frac{1}{8},...\}</math><br> <b>4.</b> <math>\{x|x\ is\ a\ whole\ number\ greater\ than\ 11\}</math><br> <b>5.</b> <math>\{x|x\ is\ a\ whole\ even\ number\}</math><br> <b>6.</b> The set <math>C</math> made up of composite numbers<br> (★) '''<u>2.12</u> (Roster Notation)''' Each of the sets below are defined using roster notation. <b>i.</b> <math>\{1, 4, 9, 16, 25...\}</math><br> <b>ii.</b> <math>\{0, 4, 8,...,96, 100\}</math><br> <b>iii.</b> <math>\{3, 9, 15, 21, 27...\}</math><br> <b>iv.</b> <math>\{..., -\pi^4, -\pi^3, -\pi^2, -\pi, 1\}</math><br> <b>1.</b> Determine four other elements that may appear in the sets above.<br> <b>2.</b> Use set builder notation to describe the sets above. (★) '''<u>2.13</u> (Sorting Automobiles)''' Construct a Venn Diagram which illustrates the possible unions and intersections of the following sets relative to the universal set consisting of automobiles made in the United States. <div style="text-align: center;"><math>F: Four door, S: Sunroof, P: Power steering</math></div> (★) '''<u>2.14</u> (Relating Types of Numbers)''' Refer to the section '''Types of Numbers''' in '''Section 1.8'''. Create a Venn Diagram which shows how each of the number types listed are related to each other. (★) '''<u>2.15</u> (Working with Sets I)''' Let <math>U = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13\}</math>, <math>M = \{0, 2, 4, 6, 8\}</math>, <math>N = \{1, 3, 5, 7, 9, 11, 13\}</math>, <math>Q = \{0, 2, 4, 6, 8, 10, 12\}</math>, and <math>R = \{0, 1, 2, 3, 4\}</math>. Use these sets to find the following. (★) '''<u>2.16</u> (Working with Sets II)''' Let <math>U = \{copper, sodium, nitrogen, potassium, uranium, oxygen, zinc\}</math>, <math>A = \{copper, sodium, zinc\}</math>, <math>B = \{sodium, nitrogen, potassium\}</math>, <math>C = \{oxygen\}</math>. Use these sets to find the following. (★★) '''<u>2.17</u> (Working with Sets III)''' If <math>U = \{x|0<x<12\}</math>, <math>M = \{x|1<x<9\}</math>, and <math>N = \{x|0<x<5\}</math>. Use these sets to find the following. (★★) '''<u>2.18</u> (Working with Sets IV)''' Suppose <math>A</math>, <math>B</math>, and <math>C</math> are subsets of the universal set <math>U</math>. Using Venn Diagrams, shade the areas that represent the following. (★) '''<u>2.19</u> (Working with Subscripts)''' For a whole number <math>j</math>, <math>x_j = (-1)^j</math>. Find the value of <math>x_0</math>, <math>x_1</math>, and <math>x_{183}</math>. (★) '''<u>2.20</u> (List of Numbers)''' Refer to the set of numbers below, and use it to answer the following questions. <div style="text-align: center;"><math>x = \{5, 11, 14, 9, 3, 25, 16, 8, 1, 11, 68, 63, 43, 99, 35, 100\}</math></div> '''1.''' In the set, which number is represented by <math>x_3</math>?<br> '''2.''' In the set, which number is represented by <math>x_{10}</math>?<br> '''3.''' What symbol(s) can be used to represent the number 25 in the list?<br> '''4.''' What symbol(s) can be used to represent the number 11 in the list?<br> '''5.''' What number represents <math>n</math> in <math>x_n</math>?<br> '''6.''' What value does <math>x_n</math> take? '''<u>2.21</u> (Average)''' Use subscript notation to write an expression which represents the average of <math>n</math> numbers. ===Section 2.7=== (★★) '''<u>2.22</u> (Gauss's Trick)''' In the late 1700s, the kindergarten class of the mathematician Carl Fredrich Gauss was asked to find the sum of all of the natural numbers between 1 and 100. While most of the class had struggled with this seemingly impossible task, Gauss was able to determine the solution to this problem rather quickly. '''1.''' How was he able to do this? '''2.''' We can use techniques similar to Gauss' in order to find the sum of several numbers. Can you find the following? '''i.''' <math>1 + 2 + 3 + 4 + ... + 201</math><br> '''ii.''' <math>2 + 4 + 6 + 8 + ... + 200</math><br> '''iii.''' <math>101 + 102 + 103 + ... + 998 + 999 + 1000</math><br> '''iv.''' <math>9 + 12 + 15 + ... + 54 + 57 + 60</math> (★) '''<u>2.23</u> (Using the Distributive Property)''' Use the Distributive Property to simplify these expressions. <math>a.\ 2(14x - 26)</math><br> <math>b.\ (2/3)(3x + 9)</math><br> <math>c.\ 3(12x + 4y)</math><br> <math>d.\ 2(5x - 6) + 3(3x + 2)</math><br> <math>e.\ (4x + 7)(2x - 3)</math><br> <math>f.\ (x + 1)(x + 2)(x + 3)</math> (★★) '''<u>2.24</u> (Distribution with Three Terms)''' What is the coefficient of y in the expansion of the expression below? <math>(5x+2y-4)(2x+7y+3)</math> (★) '''<u>2.25</u> (Closure of a Set)''' Two letters from the set <math>\{a, b, c, d, e\}</math> are chosen and multiplied together. The results after doing this are as follows: {| class="wikitable" ! * || a || b || c || d || e |- |'''a''' || b || c || e || a || d |- |'''b''' || d || a || c || b || e |- |'''c''' || c || d || b || e || a |- |'''d''' || a || e || d || c || b |- |'''e''' || e || b || a || d || c |} Is the set closed under multiplication? (★) '''<u>2.26</u> (Closure of Operators)''' Complete the following table which represents the closure properties of operations with different types of numbers. Use a check mark to represent closure, and a cross to represent no closure. {| class="wikitable" ! || Addition || Subtraction || Multiplcation || Division || Exponentiation || Root |- |ℕ || || || || || || |- |𝕎 || || || || || || |- |ℤ || || || || || || |- |ℚ || || || || || || |- |𝕀 || || || || || || |- |ℝ || || || || || || |} '''<u>2.27</u> (Determining Properties of Real Numbers)''' Determine if the following statements are always, sometimes, or never true. If the statement is always true, explain your reasoning. If the statement is not always true, provide a [[Mathematical Proof/Methods of Proof/Counterexamples|counterexample]]. <math>a.\ An\ integer\ is\ a\ whole\ number.</math><br> <math>b.\ If\ a\ number\ is\ whole\ it\ is\ a\ natural\ number.</math><br> <math>c.\ If\ a\ number\ contains\ a\ decimal\ it\ is\ an\ integer.</math><br> <math>d.\ If\ a\ number\ is\ nautural,\ then\ it\ is\ a\ real\ number.</math><br> <math>e.\ The\ product\ of\ two\ irrational\ numbers\ is\ an\ irrational\ number.</math> '''<u>2.28</u> (Identifying Properties of Real Numbers)''' Identify the following properties being expressed. <math>a.\ 4(3x + 4) = 12x + 16</math><br> <math>b.\ 6 + 0 = 6</math><br> <math>c.\ (2 + 7) + 5 = (2 + 5) + 7</math><br> <math>d.\ (3/4)(4/3) = 1</math><br> <math>e.\ To\ divide\ 3072\ by\ 512,\ you\ can\ divide\ 3072\ by\ 16,\ again\ by\ 8,\ and\ again\ by\ 4.</math> '''<u>2.29</u> (Product Pattern)''' Use the Associative Law to explain why the products in each rule are equal. {| style="border-spacing: 3em .5em;" |- |<math>2*2 = 1*4</math> |- |<math>4*3 = 2*6</math> |- |<math>6*4 = 3*8</math> |- |<math>8*5 = 4*10</math> |- |<math>10*6 = 5*12</math> |- |<math>12*7 = 6*14</math> |- |<math>14*8 = 7*16</math> |} '''<u>2.30</u> (Square of Sum/Difference)''' For two numbers <math>a</math> and <math>b</math>, find the following: <math>a.\ (a + b)^2</math><br> <math>b.\ (a - b)^2</math> '''<u>2.31</u> (Secret of 1001)''' A boy claims that he can figure out the product of any three digit number and 1001. A student in his arithmetic class challenges him to find the product of 1001 and 865, and he gets the correct answer immediately. Compute the answer, and determine the boy's secret. ===Section 2.8=== ===Section 2.9=== ===Section 2.10=== (★) '''<u>2.32</u> (Museum Admissions)''' The total cost to get admission to a museum is 25a + 10c + 8s for a adults, c children, and s seniors. How much does it cost for each adult, child, and senior respectively to get admission? If a family of two adults, three children, and one senior wants to gain admission to the museum, how much would they have to pay in total? (★) '''<u>2.33</u> (Cutting Edge)''' A 12 ft long piece of rope was cut into two pieces of different lengths. Use one variable to represent the lengths of the two pieces. (★) '''<u>2.34</u> (Play Ball!)''' The diameter of a basketball is approximately 4 times of that of a baseball. Express the diameter of a basketball in terms of the diameter of a baseball. (★) '''<u>2.35</u> (Pocket Change)''' Suppose have '''d''' dimes and '''n''' nickels in your pocket. Write an expression which represents the total amount of money you have. Use this expression to figure out how much money you would have if you had 9 dimes and 7 nickels. (★) '''<u>2.36</u> (Units of Temperature I)''' The formula {{center|<math>C = \frac{5}{9}(F-32)</math>}} expresses the relationship between Fahrenheit temperature, '''F''', and Celsius temperature, '''C'''. Use this equation to convert <math>50^\circ F</math>, <math>86^\circ F</math>, <math>32^\circ F</math>, <math>100^\circ F</math>, and <math>-50^\circ F</math> to their equivalent temperature on the Celsius scale. (★) '''<u>2.37</u> (Units of Temperature II)''' The formula {{center|<math>K = C + 273.15</math>}} expresses the relationship between Celsius temperature, '''C''', and Kelvin temperature, '''K'''. Use this equation to convert <math>-273.15^\circ C</math>, <math>30^\circ C</math>, and <math>100^\circ F</math> to their equivalent temperature on the Kelvin scale. (★★) '''<u>2.38</u> (Chemical Formula for Sugar)''' The chemical formula for glucose (sugar) is <math>C_6H_{12}O_6</math>. This formula means there are 12 hydrogen atoms for every 6 carnon atoms and 6 oxygen atoms in each molecule of glucose. If '''x''' represents the number of atoms in oxygen in a pound of sugar, express the number of hydrogen atoms in the the same pound of sugar. (★) '''<u>2.39</u> (Building Blocks)''' Look at the arrangements of building blocks below. How many blocks will appear in diagram 17? (★) '''<u>2.40</u> (Rows of Seats)''' In an auditorium, the first row has 8 seats, and five extra seats are added in each row afterwards. If the auditorium has 20 rows, how many seats are there in total? (★★) '''<u>2.41</u> (Triangles in Polygons)''' In a triangle, there are three sides. We can obviously observe from this that this contains 1 triangle. In a quadrilateral, there are four sides. We can observe from this that two non-overlapping triangles can be made out of this by dividing it along its corners. In a pentagon, there are five sides. We can observe from this that three non-overlapping trianges can be made out of this by dividing it along its corners. Using this information, how many non-overlapping triangles can you make out of a decagon (10-sided polygon) by dividing it along its corners? (★★) '''<u>2.42</u> (Product of Consecutive Numbers)''' Two numbers are consecutive if they follow each other in numerical order. For example, the numbers 4 and 5 are consecutive because 5 comes after 4. What would be an algebraic representation of the product of two such numbers? (★★) '''<u>2.43</u> (Odd Numbers)''' Write an expression that represents the '''n'''th odd number, '''O'''. (First odd number is 1, Second odd number is 3, and so forth) Afterwards, use this expression to find the 143rd odd number. [[File:FDA Nutrition Facts Label 2016.png|thumb|left]] (★★) '''<u>2.44</u> (Weight-Loss Points)''' Several weight-loss programs assign points to prepared or packaged foods that take into account of the food's fat '''F''', carbohydrate '''C''', protein '''P''', and fiber '''B''' content in grams. The point value for a given food item can be represented by the following expression: {{center|<math>W = \frac{F}{4} + \frac{C}{9} + \frac{P}{10} - \frac{B}{12}</math>}} Determine the point value of one serving of the item having the nutrition facts on the left. (★★) '''<u>2.45</u> (Adjusted Poverty Threshold)''' The adjusted poverty threshold for a single person between 1999 and 2013 can be approximated by the formula {{center|<math>y = 2.719x^2 + 196.1x + 8718</math>}} where x is the number of years since 1999, and where y is the average adjusted poverty threshold. According to the model, what was the average adjusted poverty threshold in 2005? In 2012? (★★) '''<u>2.46</u> (Period of a Pendulum)''' The period t, in seconds, of the swing of a pendulum is given by {{center|<math>t = 2\pi\sqrt{\frac{L}{32}}</math>}} where L is the length of the pendulum in feet. Find the period of a pendulum 8 feet long. (★★) '''<u>2.47</u> (Velocity of a Ball)''' A ball is thrown vertically upward. Its velocity t seconds after its release is given by the formula: {{center|<math>v = v_0 - gt </math>}} where v0 is its initial velocity, g is the acceleration due to gravity, and v is the velocity of the ball at time t. '''1.''' Calculate the upward velocity of a ball after 8 seconds on Earth (g = 9.8) after tossing it at a velocity of 5 m/s.<br> '''2.''' Calculate the upward velocity of a ball after 8 seconds on the Moon (g = 1.625) after tossing it at a velocity of 5 m/s. (★★) '''<u>2.48</u> (Isotopes)''' The isotopes of any given chemical element all have the same atomic number (same number of protons), but a differing numbers of neutrons. They are written as the formula: {{center|<math>^{A}_{Z}X^C</math>}} In this notation, X takes the place of the element's symbol, A is its atomic mass, Z is its atomic number, and C is its charge (This number isn't written down if there is a zero charge). From this, we can find: *The number of protons from looking at Z. *The number of electrons from adding Z and C. *The number of neutrons from subtracting Z from A. Use this information to find the number of protons, electrons, and neutrons from the following isotopes. '''1.''' <math>^{19}_{9}F</math><br> '''2.''' <math>^{36}_{17}Cl^{-1}</math><br> ===Section 2.11=== (★) '''<u>2.49</u> (Area of a Rectangle)''' A rectangle has an area of 24 <math>in.^2</math> and a length '''b''' in inches. What does the expression <math>\frac{24}{b}</math> represent? What quantity does the expression <math>2(b + \frac{24}{b})</math> represent? (★) '''<u>2.50</u> (Change in Length)''' Consider an equilateral triangle with sides of length '''s'''. Find the perimeter of the triangle if we increase the lengths of the sides by 5. Find the perimeter if we double the lengths of the sides. (★) '''<u>2.51</u> (Metal Wire)''' A metal wire of length '''x''' is bent into a square. Express the length of a side of the square in terms of x. (★★) '''<u>2.52</u> (Vegetable Garden)''' A rectangular vegetable garden is 12 meters long and 20 meters wide. Surrounding the garden is a gravel path of width '''''w'''''. <br> '''1.''' Write an expression that can be used to find the outer perimeter of the gravel path. <br> '''2.''' If you measure w to be 3 meters, what is the outer perimeter of the path? (★★) '''<u>2.53</u> (Racetrack)''' An Olympic racetrack is made up of two straight sides, each measuring 84.39 meters in length, and two semi-circular curves with a radius of 36.5 meters as pictured. The track has a width of '''w'''.<br> '''1.''' Write an expression that can be used to find the outer perimeter of the racetrack. (Remember that the perimeter of a circle is <math>2\pi r</math>) <br> '''2.''' If you measure that the width of the track is 1.22, what is the outer perimeter of the path? (★★) '''<u>2.54</u> (Cube of p + q)''' As demonstrated in the section, the square of the expression <math>(p + q)</math> can be represented by the diagram below. Use a similar diagram to find the cube of the expression <math>(p + q)</math>. (★★★) '''<u>2.55</u> (Cube of p + q + r)'''<br> '''1.''' Create a diagram that represents the square of <math>(p + q + r)</math>, then use it to find its value.<br> '''2.''' Do the same thing, but for the cube of <math>(p + q + r)</math>. ===Section 2.12=== (★) '''<u>2.56</u> (Evaluating Functions I)''' Evaluate <math>f(x) = x^2</math> at the following values. '''1.''' <math>f(2)</math><br> '''2.''' <math>f(-5)</math><br> (★) '''<u>2.57</u> (Evaluating Functions II)''' Evaluate <math>g(x)</math> at the following values. (★) '''<u>2.58</u> (Evaluating Functions III)''' Evaluate <math>h(x)</math> at the following values. (★) '''<u>2.59</u> (Evaluating Functions IV)''' Evaluate <math>i(x)</math> at the following values. (★) '''<u>2.60</u> (Evaluating Functions V)''' Evaluate <math>j(x)</math> at the following values. (★) '''<u>2.61</u> (Evaluating Functions VI)''' Evaluate <math>k(x)</math> at the following values. (★) '''<u>2.62</u> (Evaluating Functions VII)''' Evaluate <math>l(x)</math> at the following values. (★) '''<u>2.63</u> (Evaluating Functions VIII)''' Evaluate <math>m(x)</math> at the following values. (★) '''<u>2.64</u> (Functions and Relations)''' Which of the following definitions are functions and which are relations: ==Projects== '''<u>P2.1</u> (Pythagorean Triples)''' {{bookcat}} omh94r4csmzby9wnoifx9jqsztqqr6d Wikibooks:Sandbox 4 464822 4671954 4671845 2026-09-23T12:00:51Z JackBot 396820 Bot: Automatically cleaned 4671954 wikitext text/x-wiki {{Sandbox heading}} <!-- Hello! Feel free to try your formatting and editing skills below this line. As this page is for editing experiments, this page will automatically be cleaned every 12 hours. --> efa5udpbb942msq2oco4mlj2yz47q14 User:JJPMaster (bot)/markAdmins-Data.json 2 471107 4671982 4671347 2026-09-23T15:49:13Z JJPMaster (bot) 3488561 Bot: Updating markAdmins data 4671982 json application/json { ".snoopy.": [ "global-rollbacker", "editor" ], "1234qwer1234qwer4": [ "editor", "steward" ], "157yagz5r48a5f1a1f": [ "editor" ], "1997kB": [ "global-rollbacker", "global-renamer", "editor" ], "1F616EMO": [ "global-renamer" ], "1exec1": [ "transwiki", "editor" ], "1sfoerster": [ "editor" ], "20041027 tatsu": [ "global-rollbacker" ], "2005-Fan": [ "transwiki", "editor", "uploader" ], "331dot": [ "global-renamer" ], "33rogers": [ "editor" ], "3MMPEYTON": [ "editor" ], "4PlayerChess": [ "autoreview" ], "4pillars": [ "editor" ], "511KeV": [ "global-rollbacker" ], "94rain": [ "global-rollbacker", "editor" ], "A R King": [ "editor" ], "A Sulaiman Z": [ "editor" ], "A.K.Karthikeyan": [ "editor" ], "A09": [ "steward" ], "AFBorchert": [ "vrt-permissions" ], "AIProf": [ "editor" ], "ALittleSlow": [ "autoreview" ], "AManWithNoPlan": [ "editor" ], "ATannedBurger": [ "global-renamer" ], "AVRS": [ "editor" ], "Aafi": [ "global-renamer", "vrt-permissions" ], "Abenwagner": [ "editor" ], "Abigor": [ "editor" ], "Abitt002": [ "editor" ], "Abyssal": [ "editor" ], "Acagastya": [ "autoreview" ], "Acalamari": [ "global-renamer" ], "Acarologiste": [ "editor" ], "AcidBat": [ "editor" ], "Acrow005": [ "editor" ], "Actualist": [ "editor" ], "Adalvis": [ "editor" ], "Adart001": [ "editor" ], "Adavyd": [ "global-renamer" ], "Addihockey10": [ "editor" ], "Addihockey10 (automated)": [ "editor" ], "Adrignola": [ "editor" ], "AdventureWriter": [ "editor" ], "Aelxen": [ "global-renamer" ], "Aferg006": [ "editor" ], "Afett001": [ "editor" ], "Affe2011": [ "global-rollbacker" ], "Agnerf": [ "editor", "uploader" ], "Agpires": [ "editor" ], "Agricola": [ "editor" ], "Agusbou2015": [ "editor" ], "Ah3kal": [ "editor" ], "Ahecht": [ "global-renamer", "vrt-permissions" ], "Ahonc": [ "global-renamer", "vrt-permissions" ], "AiClassEland": [ "editor" ], "Ainz Ooal Gown": [ "editor" ], "Airpmb": [ "editor" ], "Ajraddatz": [ "editor", "steward" ], "Aka": [ "vrt-permissions" ], "Alanah.97": [ "autoreview" ], "Albertoleoncio": [ "steward", "vrt-permissions" ], "Albmont": [ "editor" ], "Alchimista": [ "vrt-permissions" ], "Aldnonymous": [ "editor" ], "Aledownload": [ "editor" ], "Alexlatham96": [ "editor" ], "Alextejthompson": [ "editor" ], "Alison": [ "global-rollbacker" ], "AllenZh": [ "editor" ], "Alphama": [ "global-renamer" ], "AlvaroMolina": [ "editor" ], "AmandaNP": [ "steward" ], "Ambrevar": [ "editor" ], "Amcgail": [ "editor" ], "Ameisenigel": [ "global-rollbacker", "global-sysop", "ombuds", "editor", "vrt-permissions" ], "AmieKim": [ "editor" ], "Amire80": [ "global-sysop" ], "Anachronist": [ "editor", "vrt-permissions" ], "Ancient9983": [ "editor" ], "Andrei Stroe": [ "vrt-permissions" ], "Andrew janke": [ "editor" ], "Andriy.v": [ "vrt-permissions" ], "Andyross": [ "editor" ], "Anil Shaligram": [ "editor" ], "Animajosser": [ "editor" ], "Anne Correia": [ "editor" ], "Anonim Şahıs": [ "editor" ], "Anonymity": [ "editor" ], "AnotherEditor144": [ "autoreview" ], "Antanana": [ "vrt-permissions" ], "Antandrus": [ "editor" ], "Anthere": [ "editor" ], "AntiCompositeNumber": [ "steward", "vrt-permissions" ], "Antonizoon": [ "editor" ], "Antonw": [ "editor" ], "Apfelmus": [ "editor" ], "Aphoneyclimber": [ "editor" ], "Aplucas0703": [ "vrt-permissions" ], "Apocheir": [ "editor" ], "Aqurs1": [ "global-rollbacker", "global-renamer", "global-sysop" ], "AramilFeraxa": [ "steward" ], "Arch dude": [ "editor" ], "Archolman": [ "editor" ], "Arcticocean": [ "ombuds" ], "ArdentPerf": [ "editor", "uploader" ], "Arian": [ "global-renamer" ], "Arlen22": [ "transwiki", "editor" ], "Armchair": [ "editor" ], "Arno-nl": [ "editor" ], "Arrow303": [ "vrt-permissions" ], "Arthurvogel": [ "editor" ], "Artoria2e5": [ "editor" ], "Arturoiochoam": [ "editor" ], "Arunreginald": [ "editor" ], "AshLin": [ "editor" ], "Atcovi": [ "sysop", "global-rollbacker" ], "Athrash": [ "editor" ], "Atiedebee": [ "editor" ], "Atlas.Spheres": [ "editor" ], "Atsme": [ "vrt-permissions" ], "Auremel": [ "editor" ], "Austncorp": [ "editor" ], "AuthorsAndContributorsBot": [ "autoreview" ], "Avicennasis": [ "editor" ], "Avraham": [ "global-renamer", "editor" ], "Awesome Princess": [ "editor" ], "Axpde": [ "editor" ], "Az1568": [ "global-rollbacker" ], "Az2008": [ "editor" ], "Azotochtli": [ "editor" ], "B.Korlah": [ "editor" ], "BD2412": [ "editor" ], "BORGATO Pierandrea": [ "editor" ], "BRPever": [ "global-rollbacker", "global-sysop" ], "BRUTE": [ "editor" ], "Backfromquadrangle": [ "editor" ], "Baiji": [ "global-rollbacker" ], "Bakasakali": [ "editor" ], "Balaji.md au": [ "editor" ], "BarkingFish": [ "editor" ], "Barras": [ "steward" ], "Base": [ "steward", "vrt-permissions" ], "Bastique": [ "editor" ], "Bautsch": [ "editor" ], "BeardMD": [ "editor" ], "Beetstra": [ "global-rollbacker" ], "BenTels": [ "editor" ], "Bencemac": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Benjamin J. Burger": [ "editor" ], "Benjamin.doe": [ "editor" ], "Benrattray": [ "editor" ], "Benson Muite": [ "editor" ], "Bentbracke": [ "editor" ], "Bequw": [ "editor" ], "Bert Niehaus": [ "autoreview" ], "BethNaught": [ "editor" ], "Beuc": [ "editor" ], "Bhardwaj Anil": [ "autoreview" ], "BiT": [ "editor" ], "Bigdelboy": [ "transwiki" ], "Bignose~enwikibooks": [ "editor" ], "Billinghurst": [ "editor" ], "Billymac00": [ "editor" ], "Biplab Anand": [ "global-rollbacker", "global-sysop" ], "Birdofadozentides": [ "editor" ], "BitterAsianMan": [ "editor" ], "Bluefoxicy": [ "editor" ], "Bluerasberry": [ "vrt-permissions" ], "BobChan2": [ "editor" ], "Bobby Cohn": [ "global-renamer" ], "Bodhisattwa": [ "vrt-permissions" ], "BoldLuis": [ "editor" ], "Borhan": [ "global-rollbacker", "vrt-permissions" ], "Boris1951zz": [ "editor" ], "Bpenn005": [ "editor" ], "Brewster239": [ "global-rollbacker" ], "Bridget": [ "global-rollbacker", "editor" ], "Brienna.Hall77": [ "editor" ], "Brim": [ "editor" ], "Brittanys": [ "editor" ], "Bronwynh": [ "editor" ], "Bsadowski1": [ "editor", "steward" ], "Buddpaul": [ "editor" ], "Bullercruz1": [ "editor" ], "Buncic": [ "editor" ], "Bunnypranav": [ "global-renamer" ], "BurakD53": [ "editor" ], "Burkep": [ "editor" ], "ByGrace": [ "editor" ], "Bykim2012": [ "editor" ], "C1203sc": [ "editor" ], "CJakes1": [ "editor" ], "CKWG - Ada Magica": [ "editor" ], "Cabayi": [ "global-renamer" ], "CaitlinCarbury": [ "autoreview" ], "CalciumTetraoxide": [ "editor" ], "CalendulaAsteraceae": [ "editor" ], "Caliburn": [ "editor" ], "CallumPoole": [ "editor" ], "Calvin.Andrus": [ "editor" ], "Cameron11598": [ "editor" ], "Camouflaged Mirage": [ "editor" ], "Captain-tucker": [ "vrt-permissions" ], "Carlo.milanesi": [ "editor" ], "Caro de Segeda": [ "editor" ], "CarsracBot": [ "editor" ], "Catermark": [ "editor" ], "Cecila123": [ "autoreview" ], "Cedar101": [ "editor" ], "Champion": [ "editor" ], "Chaojidage": [ "editor" ], "Chaojoker": [ "editor" ], "Chaotic Enby": [ "autoreview", "global-renamer" ], "Chapka": [ "editor" ], "Charidri": [ "editor" ], "Charleneabeana": [ "autoreview" ], "Charles Jeffrey Danoff": [ "editor" ], "CharlesHoffman": [ "editor" ], "Chazz": [ "editor" ], "Chelseafan528": [ "editor" ], "Cheryl2012": [ "editor" ], "Chescargot": [ "vrt-permissions" ], "Chi Sigma": [ "editor" ], "Chinmayee Mishra": [ "ombuds" ], "Chongkian": [ "editor" ], "Chowbok": [ "editor" ], "ChrisHodgesUK": [ "editor" ], "ChrisWallace": [ "editor" ], "Chriswaterguy": [ "editor" ], "Chuckhoffmann": [ "editor" ], "Church of emacs": [ "global-rollbacker" ], "Cic": [ "editor" ], "Ciell": [ "vrt-permissions" ], "Cilantrohead": [ "editor" ], "Cintilo": [ "editor" ], "Circuit dreamer": [ "editor" ], "Circuit-fantasist": [ "editor" ], "Civvì": [ "global-rollbacker", "global-renamer" ], "Ckwalker": [ "editor" ], "Clairerusselll": [ "autoreview" ], "Cloidl": [ "autoreview" ], "Cmsmcq": [ "editor" ], "Cnrowley": [ "editor" ], "CocoaZen": [ "editor" ], "CoconutOctopus": [ "global-renamer" ], "Codename Noreste": [ "sysop", "global-rollbacker", "interface-admin" ], "Codename Noroeste": [ "editor" ], "Codinghead": [ "editor" ], "CommonsDelinker": [ "autoreview" ], "Comp.arch": [ "editor" ], "Conan": [ "editor" ], "Cormullion": [ "editor" ], "Count Count": [ "steward" ], "Coupe": [ "editor" ], "Courcelles": [ "global-rollbacker", "editor" ], "CptViraj": [ "global-rollbacker", "global-renamer", "global-sysop" ], "Craignewland": [ "editor" ], "Craxd1": [ "editor" ], "CrazyEddy": [ "editor" ], "Cremastra": [ "editor" ], "Cremastra (JWB)": [ "autoreview" ], "Cromium": [ "editor" ], "Cromwellt": [ "editor" ], "Crystal East": [ "editor" ], "Cttcraig": [ "editor" ], "Cultures17": [ "editor" ], "Cultures33": [ "editor" ], "Cultures4": [ "editor" ], "Cultures92": [ "editor" ], "CunninghamJohn": [ "autoreview" ], "Curtaintoad": [ "editor" ], "Cyberpower678": [ "global-rollbacker" ], "Céréales Killer": [ "global-renamer" ], "D1n05aur5 4ever": [ "editor" ], "DARIO SEVERI": [ "autoreview", "global-rollbacker", "global-sysop" ], "DC Slagel": [ "editor" ], "DCB": [ "vrt-permissions" ], "DD 8630": [ "editor" ], "DERDAKI ILIAS": [ "global-renamer" ], "DGerman": [ "editor" ], "DVD206": [ "editor" ], "DZadventiste": [ "editor" ], "DaB.": [ "vrt-permissions" ], "DaGizza": [ "editor" ], "Dagana4": [ "autoreview" ], "Dallas1278": [ "editor" ], "Dan Koehl": [ "editor" ], "Dan Polansky": [ "editor" ], "Dan-aka-jack": [ "editor" ], "DanCherek": [ "autoreview" ], "Danarwaller": [ "editor" ], "DanielWhernchend": [ "editor" ], "Danielravennest": [ "editor" ], "Danilka5469": [ "editor" ], "Daniuu": [ "steward", "vrt-permissions" ], "DannyS712": [ "editor" ], "Darklama": [ "editor" ], "Darklilac": [ "editor" ], "Darrelljon": [ "editor" ], "DarwIn": [ "vrt-permissions" ], "Dave Braunschweig": [ "editor" ], "David L Davis": [ "editor" ], "DavidCary": [ "editor" ], "DavidCota64": [ "editor" ], "DavidLevinson": [ "editor" ], "Davidbena": [ "editor" ], "Dayshade": [ "editor" ], "Dchmelik": [ "editor" ], "Dcljr": [ "editor" ], "Dcondon": [ "editor" ], "Deepfriedokra": [ "global-renamer" ], "DejaVu": [ "global-rollbacker" ], "DennisDaniels": [ "editor" ], "Dennisblu": [ "uploader" ], "Denniss": [ "editor" ], "Der-Wir-Ing": [ "global-rollbacker" ], "DerHexer": [ "editor", "steward", "vrt-permissions" ], "Derek Andrews": [ "editor" ], "Designermadsen": [ "editor" ], "Deu": [ "global-rollbacker" ], "Dexxor": [ "editor" ], "Dezedien": [ "vrt-permissions" ], "Diandramartin": [ "autoreview" ], "Didym": [ "vrt-permissions" ], "Dino Bronto Rex": [ "editor" ], "Dirk Hünniger": [ "editor" ], "Divinations": [ "global-rollbacker" ], "Djb": [ "editor" ], "Djbrown": [ "editor" ], "Dlrohrer2003": [ "editor" ], "Dmccreary": [ "editor" ], "Doc Taxon": [ "vrt-permissions" ], "Doctorxgc": [ "editor" ], "Dom walden": [ "editor" ], "Domdomegg": [ "editor" ], "DominikTurner": [ "autoreview" ], "DonaldKronos": [ "editor" ], "DoubleGrazing": [ "global-renamer" ], "Doubleotoo": [ "editor" ], "Downdate": [ "editor" ], "Dr-Taher": [ "global-renamer" ], "Dr.Unclear": [ "editor" ], "Dreftymac": [ "editor" ], "Drpundir": [ "editor" ], "Drummingman": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "DuLithgow": [ "editor" ], "Dungodung": [ "vrt-permissions" ], "Duplode": [ "editor" ], "DustDFG": [ "editor" ], "Dyolf77": [ "vrt-permissions" ], "EDCU320RHT": [ "editor" ], "EDUC320 Sylvialiang": [ "editor" ], "EE JRW": [ "editor" ], "EMAD KAYYAM": [ "editor" ], "EPIC": [ "steward" ], "EarlGrey2005": [ "autoreview" ], "Ebe123": [ "editor" ], "Ecarew": [ "editor" ], "Edgar181": [ "editor" ], "Edit filter": [ "sysop" ], "EdoDodo": [ "editor" ], "Edornbush": [ "editor" ], "Edriiic": [ "editor" ], "Efex": [ "editor" ], "Efex3": [ "editor" ], "Effeietsanders": [ "editor", "vrt-permissions" ], "EggRoll97": [ "editor" ], "Egil": [ "editor" ], "Eihel": [ "global-rollbacker", "editor" ], "Ejs-80": [ "global-renamer" ], "Ekaroleski": [ "editor" ], "Elaurier": [ "editor" ], "Elcobbola": [ "vrt-permissions" ], "Electro": [ "editor" ], "ElfSnail123": [ "editor" ], "Eli bubo4ka": [ "editor" ], "Eliarani": [ "editor" ], "Elli": [ "global-renamer", "vrt-permissions" ], "Ellywa": [ "vrt-permissions" ], "Elmacenderesi": [ "vrt-permissions" ], "Elton": [ "editor", "steward" ], "Emha": [ "vrt-permissions" ], "EmilymDaniel": [ "autoreview" ], "Empire3131": [ "editor" ], "Encik Tekateki": [ "editor" ], "Enzomartinelli": [ "editor" ], "Eric Evers": [ "editor" ], "Erigena": [ "editor" ], "Erik Baas": [ "editor" ], "ErinNik": [ "editor" ], "Erinamukuta": [ "editor" ], "ErrantX": [ "editor" ], "EruannoVG": [ "editor" ], "Espen180": [ "editor" ], "Eta Carinae": [ "global-renamer" ], "Ethacke1": [ "editor" ], "Eumolpo": [ "editor" ], "Euphydryas": [ "global-renamer" ], "Eurodyne": [ "editor" ], "EvDawg93": [ "editor" ], "EvanCarroll": [ "editor" ], "Ewen": [ "editor" ], "Exusiai": [ "global-renamer" ], "Ezarate": [ "global-rollbacker", "vrt-permissions" ], "Fabartus": [ "editor", "uploader" ], "Faendalimas": [ "ombuds" ], "Fasten": [ "editor" ], "Faster than Thunder": [ "editor" ], "Fathoms Below": [ "global-renamer" ], "Fcorthay": [ "editor" ], "Fdena": [ "editor" ], "Federhalter": [ "editor" ], "Fehufanga": [ "global-rollbacker", "global-sysop" ], "Fekarp": [ "editor" ], "Fephisto": [ "editor" ], "Ferien": [ "global-rollbacker" ], "Fernando2812l": [ "editor" ], "Fernly": [ "editor" ], "Ffion B Thompson": [ "autoreview" ], "Fimatic": [ "editor" ], "FischX": [ "editor" ], "Fishpi": [ "editor" ], "Flattail": [ "editor" ], "FlightTime": [ "global-renamer" ], "Flolit": [ "editor" ], "Fluffernutter": [ "vrt-permissions" ], "FlyingAce": [ "global-rollbacker" ], "Fountain Pen": [ "editor" ], "Fr33kman": [ "editor" ], "FrancisFromGaspesie": [ "editor" ], "Frantsch": [ "autoreview" ], "Fredericknortje": [ "editor" ], "Fritzlein~enwikibooks": [ "editor" ], "Frozen Wind": [ "transwiki", "editor" ], "Ftaljaard": [ "editor" ], "Ftiercel": [ "editor" ], "Furrykef": [ "editor" ], "GKFX": [ "editor" ], "Galahad": [ "global-rollbacker" ], "Gampe": [ "vrt-permissions" ], "Ganímedes": [ "vrt-permissions" ], "Gary Dorman Wiggins": [ "editor", "uploader" ], "Garygaryj": [ "editor" ], "Gat lombard": [ "editor" ], "Gc211": [ "editor" ], "Geagea": [ "vrt-permissions" ], "Geekgirl": [ "editor" ], "GemmaCampbell": [ "autoreview" ], "Geoff Plourde": [ "editor" ], "Geofferybard": [ "transwiki", "editor" ], "GerbenRienk": [ "editor" ], "Gerges": [ "global-rollbacker", "global-renamer" ], "Germany Poul Ah": [ "editor" ], "Gertbuschmann": [ "editor" ], "Ggee0621": [ "editor" ], "Gifnk dlm 2020": [ "editor", "uploader" ], "Girdi": [ "editor" ], "Glaisher": [ "editor" ], "Glane23": [ "vrt-permissions" ], "Gleb713": [ "autoreview" ], "Glich": [ "editor" ], "Gllyons": [ "editor" ], "Gmasterman": [ "editor" ], "GoblinInventor": [ "editor" ], "Godsy": [ "autoreview" ], "Good afternoon": [ "editor" ], "GoreyCat": [ "editor" ], "GorgeUbuasha": [ "editor" ], "GorillaWarfare": [ "vrt-permissions" ], "Gott wisst": [ "editor" ], "Goulart": [ "editor" ], "Gpkp": [ "editor" ], "Gracebaysinger": [ "editor" ], "Graeme E. Smith": [ "editor" ], "Greatswrd": [ "editor" ], "GreenC": [ "editor" ], "Greenbreen": [ "editor" ], "Greenman": [ "editor" ], "GregXenon01": [ "editor" ], "Gretski247": [ "editor" ], "GreyCat": [ "editor" ], "Grin": [ "vrt-permissions" ], "Growl41": [ "editor" ], "Guaka": [ "editor" ], "Guanaco": [ "editor" ], "GuillermoHazebrouck": [ "editor" ], "Guus": [ "editor" ], "Guy vandegrift": [ "editor" ], "Guywan": [ "editor" ], "Gzuufy": [ "editor" ], "HJ Mitchell": [ "autoreview" ], "HLand": [ "editor" ], "HYanWong": [ "editor" ], "Ha98574": [ "editor" ], "Hagindaz": [ "editor" ], "HakanIST": [ "editor", "steward" ], "Hamish": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Hanay": [ "vrt-permissions" ], "Hannes Röst": [ "editor" ], "Hans Adler": [ "editor" ], "Haoreima": [ "editor" ], "Happy-melon": [ "editor" ], "Harry Wood": [ "editor" ], "Harrybrowne1986": [ "editor" ], "Harv4": [ "editor" ], "Hasley": [ "editor" ], "Hazard-SJ": [ "global-rollbacker" ], "He7d3r": [ "editor" ], "HenkvD": [ "editor" ], "Herbythyme": [ "editor" ], "Hercule": [ "editor" ], "Herman darman": [ "editor" ], "HerrHartmuth": [ "editor" ], "Hethrir": [ "editor" ], "HgDeviasse": [ "editor" ], "Hippias": [ "editor" ], "Hliow": [ "autoreview" ], "Holder": [ "global-rollbacker", "global-sysop" ], "Holdoffhunger": [ "editor" ], "Hoo man": [ "editor", "steward" ], "HouseBlaster": [ "global-renamer" ], "Howard Beale": [ "editor" ], "Hpon": [ "editor" ], "Hrkalona": [ "autoreview" ], "Hskeet": [ "editor", "uploader" ], "Htm": [ "vrt-permissions" ], "Hugetim": [ "editor" ], "Humaira Ali": [ "editor" ], "Huntertur": [ "editor" ], "Hydriz": [ "global-rollbacker" ], "IB Muazzam": [ "editor" ], "Ibidthewriter": [ "editor" ], "Ibrahim.ID": [ "global-renamer", "vrt-permissions" ], "Icetruck": [ "editor" ], "Icodense": [ "global-rollbacker", "global-sysop" ], "Idavidmiller": [ "editor" ], "Ideasman42": [ "editor" ], "Igna": [ "editor" ], "Ijon": [ "vrt-permissions" ], "Illusional": [ "editor" ], "Iluvatar": [ "global-rollbacker", "vrt-permissions" ], "Indiana": [ "editor" ], "Inductiveload": [ "editor" ], "Inertia6084": [ "autoreview" ], "Inferno986return": [ "editor" ], "Infinite0694": [ "global-rollbacker", "global-sysop" ], "Ingolemo": [ "editor" ], "Insignificantwrangler": [ "editor" ], "Internoob": [ "transwiki", "editor" ], "InverseHypercube": [ "editor" ], "Isenhand": [ "editor" ], "Ish ishwar": [ "editor" ], "Iste Praetor": [ "editor" ], "ItsNyoty": [ "vrt-permissions" ], "Itsmeyash31": [ "autoreview" ], "Itswikisam": [ "editor" ], "Itti": [ "global-renamer", "vrt-permissions" ], "Ixfd64": [ "editor" ], "J ansari": [ "global-rollbacker" ], "J.palacios.jean": [ "editor" ], "J36miles": [ "editor" ], "JBW": [ "global-renamer" ], "JCrue": [ "editor" ], "JJ12880": [ "editor" ], "JJMC89": [ "vrt-permissions" ], "JJPMaster": [ "sysop", "global-rollbacker", "global-renamer", "interface-admin", "vrt-permissions" ], "JJPMaster (test 1)": [ "autoreview" ], "JJohnson": [ "editor" ], "JJohnson1701": [ "editor" ], "JPPINTO": [ "editor" ], "Jack Frost": [ "vrt-permissions" ], "JackBot": [ "editor" ], "JackPotte": [ "sysop", "interface-admin" ], "Jackhand1": [ "autoreview" ], "Jacob J. Walker": [ "editor" ], "Jafeluv": [ "global-rollbacker", "editor" ], "Jake Park": [ "global-renamer" ], "Jakec": [ "editor" ], "JamesCrook": [ "editor" ], "JamesNZ": [ "editor" ], "Jamesofur": [ "global-rollbacker" ], "Jamesssss": [ "editor" ], "Jamzze": [ "editor" ], "Jan Myšák": [ "global-rollbacker" ], "Jan.duggan": [ "autoreview" ], "Janbery": [ "global-rollbacker", "vrt-permissions" ], "Janpha": [ "editor" ], "Janschejbal": [ "editor" ], "Jason.Cozens": [ "editor" ], "Jaspalkaler": [ "editor" ], "Jasper Deng": [ "global-rollbacker" ], "JavaHurricane": [ "global-rollbacker", "editor" ], "Javier Carro": [ "editor" ], "JavierCantero": [ "editor" ], "Jay Bolero": [ "editor" ], "Jazzmanian": [ "editor" ], "Jcb": [ "editor", "vrt-permissions" ], "Jcwf": [ "editor" ], "Jeff G.": [ "global-rollbacker", "editor" ], "Jeff1138": [ "editor" ], "Jellysandwich0": [ "editor" ], "JenVan": [ "editor" ], "JenniferPalacios": [ "editor" ], "Jenniferjkidd": [ "editor" ], "Jens Østergaard Petersen": [ "editor" ], "JeremyMcCracken": [ "editor" ], "Jeroenr": [ "editor" ], "Jerome Charles Potts": [ "editor" ], "Jerry vlntn": [ "editor" ], "Jesdisciple": [ "editor" ], "Jessephu": [ "editor" ], "Jfmantis": [ "editor" ], "Jianhui67": [ "global-rollbacker", "editor" ], "Jianhui67 public": [ "editor" ], "Jim Ashby": [ "autoreview" ], "JimKillock": [ "editor" ], "Jimbotyson": [ "editor" ], "Jimmy Xu": [ "vrt-permissions" ], "Jkauf007": [ "editor" ], "Jmdeschamps": [ "uploader" ], "Jnanaranjan sahu": [ "ombuds" ], "Jnewh001": [ "editor" ], "Jobin RV": [ "editor" ], "Joewiz": [ "editor" ], "Johannes Bo": [ "editor" ], "Johannnes89": [ "steward" ], "John Cross": [ "editor" ], "JohnMarcelo": [ "editor" ], "Johnkn63": [ "editor" ], "Johnwhelan": [ "editor" ], "Jokes Free4Me": [ "editor" ], "Jomegat": [ "editor" ], "Jon Harald Søby": [ "vrt-permissions" ], "Jon Kolbert": [ "steward", "vrt-permissions" ], "Jonathan Webley": [ "editor" ], "Jordan Brown": [ "editor" ], "JorisvS": [ "editor" ], "Josve05a": [ "vrt-permissions" ], "Jrincayc": [ "editor" ], "Jsnaree": [ "editor" ], "Jtneill": [ "editor" ], "JuethoBot": [ "autoreview" ], "Jugandi": [ "editor" ], "Jules*": [ "global-renamer" ], "Juliancolton": [ "editor" ], "Jumark27": [ "editor" ], "JustTheFacts33": [ "editor" ], "Justlettersandnumbers": [ "global-renamer", "vrt-permissions" ], "K6ka": [ "global-rollbacker", "global-renamer" ], "Kadı": [ "global-renamer", "vrt-permissions" ], "Kai Burghardt": [ "editor" ], "Kaltenmeyer": [ "editor" ], "Kambai Akau": [ "editor" ], "Kanjy": [ "global-rollbacker", "editor" ], "Kapooht": [ "editor" ], "Karl Wick": [ "editor" ], "Karosent": [ "editor" ], "Kashkhan": [ "editor" ], "Kathryn Mary Nicholson": [ "autoreview" ], "Katiemgeorge": [ "editor" ], "Katyauchter": [ "editor" ], "Kaushlendratripathi": [ "editor" ], "Kaw8yh": [ "editor" ], "Kayau": [ "transwiki", "editor" ], "Kellen": [ "editor" ], "Kelti": [ "editor" ], "Kiefer.Wolfowitz": [ "editor" ], "Killarnee": [ "editor" ], "King of Hearts": [ "vrt-permissions" ], "Kingaustin07": [ "editor" ], "Kingofnuthin": [ "editor" ], "Kirito": [ "global-rollbacker", "editor" ], "Kittycataclysm": [ "sysop" ], "Kj cheetham": [ "global-renamer" ], "Kkmurray": [ "editor" ], "Kl-robertson": [ "editor" ], "Klaas van Buiten": [ "editor" ], "Knittedbees": [ "transwiki", "editor" ], "Knoppson": [ "autoreview" ], "Koantum": [ "editor" ], "Koavf": [ "sysop", "global-rollbacker" ], "Kodos": [ "editor" ], "KonstantinaG07": [ "editor", "steward" ], "Kowey": [ "editor" ], "KrakatoaKatie": [ "vrt-permissions" ], "Krd": [ "vrt-permissions" ], "Krdbot": [ "vrt-permissions" ], "Kri": [ "editor" ], "Krinkle": [ "global-rollbacker" ], "Kropotkine 113": [ "vrt-permissions" ], "Kruusamägi": [ "vrt-permissions" ], "Ktucker": [ "editor" ], "Kwamikagami": [ "editor" ], "Kwhitefoot": [ "editor" ], "Kylu": [ "editor" ], "Kızıl": [ "global-renamer" ], "L10nM4st3r": [ "editor" ], "LABoyd2": [ "editor" ], "LM.CR": [ "editor" ], "LR0725": [ "global-rollbacker", "global-sysop" ], "Ladislav": [ "editor" ], "Ladsgroup": [ "global-renamer" ], "Ladybug62": [ "editor" ], "Lagoset": [ "editor" ], "Larsnooden": [ "editor" ], "Laurianedani": [ "editor" ], "Lcraw005": [ "editor" ], "Ldo": [ "editor" ], "Leaderboard": [ "sysop", "global-renamer", "interface-admin" ], "Learnerktm": [ "editor" ], "Lechatjaune": [ "vrt-permissions" ], "Leighblackall": [ "editor" ], "Lemonaka": [ "global-rollbacker" ], "Lengel46": [ "editor" ], "Lentokonefani": [ "global-renamer" ], "LeoChiukl": [ "editor" ], "Leonard64": [ "uploader" ], "Leonidlednev": [ "autoreview", "global-rollbacker" ], "Leovanderven": [ "editor" ], "Lesless": [ "vrt-permissions" ], "Leyo": [ "global-rollbacker" ], "Lgriot": [ "editor" ], "Liam987": [ "editor" ], "Liao": [ "editor" ], "Libperry": [ "editor" ], "Limiza": [ "editor" ], "Litlok": [ "global-renamer" ], "Little Sunshine": [ "global-renamer" ], "Llakew": [ "editor" ], "LlamaAl": [ "editor" ], "Lobsteroh": [ "editor" ], "LodestarChariot2": [ "editor" ], "Lofty abyss": [ "global-rollbacker", "editor", "vrt-permissions" ], "Logictheo": [ "editor" ], "Lomita": [ "vrt-permissions" ], "Londonjackbooks": [ "editor" ], "Lovepeacejoy404": [ "editor" ], "Lp0 on fire": [ "autoreview", "global-rollbacker" ], "Lubaochuan": [ "editor" ], "Luckas Blade": [ "editor" ], "Lucystewpid": [ "autoreview" ], "Ludovic Brenta": [ "editor" ], "Ludovicocaldara": [ "editor", "uploader" ], "Lukas²³": [ "editor" ], "LukeCEL": [ "editor" ], "Lvova": [ "vrt-permissions" ], "Lwill031": [ "editor" ], "M7": [ "steward" ], "MARKELLOS": [ "vrt-permissions" ], "MBq": [ "global-renamer" ], "MF-Warburg": [ "global-rollbacker", "global-sysop", "editor" ], "MGA73": [ "vrt-permissions" ], "MIacono": [ "editor" ], "MNeuschaefer": [ "editor" ], "MS Sakib": [ "global-renamer", "vrt-permissions" ], "Mabdul": [ "transwiki", "editor", "uploader" ], "Madisonhen": [ "autoreview" ], "Magda.dagda": [ "editor" ], "Magnus Manske": [ "editor" ], "Mahagaja": [ "editor" ], "MaikoM93": [ "editor" ], "Maire": [ "global-renamer" ], "Malarz pl": [ "global-renamer" ], "Manchiu": [ "global-renamer" ], "MandoRachovitsa": [ "autoreview" ], "Mandy Hopkins": [ "editor" ], "ManuelGR": [ "editor" ], "MarcGarver": [ "sysop", "checkuser", "steward" ], "Marco Klunder": [ "editor" ], "MarcoAurelio": [ "editor" ], "Marcus Cyron": [ "vrt-permissions" ], "Mardus": [ "editor" ], "MarkJFernandes": [ "editor" ], "MarkTraceur": [ "editor" ], "Markcwm": [ "editor" ], "Markhobley": [ "editor" ], "MarsRover": [ "editor" ], "Marshman~enwikibooks": [ "editor" ], "Martin Kraus": [ "editor" ], "Martin Sauter": [ "editor" ], "Martin Urbanec": [ "editor", "steward", "vrt-permissions" ], "MartinPoulter": [ "editor" ], "Martinwguy2": [ "editor" ], "MarygoldRules": [ "editor" ], "Master tongue": [ "editor" ], "Masti": [ "steward", "vrt-permissions" ], "Math buff": [ "editor" ], "MathXplore": [ "global-rollbacker", "editor" ], "Mathildem16": [ "autoreview" ], "Mathmensch": [ "editor" ], "Mathmensch-Smalledits": [ "editor" ], "Mathmogeek": [ "editor" ], "Maths314": [ "editor" ], "Matiia": [ "editor" ], "Matrix": [ "autoreview", "vrt-permissions" ], "Matsievsky": [ "editor" ], "Mattb112885": [ "editor" ], "Mattbarton.exe": [ "editor" ], "Matttest": [ "autoreview" ], "Max": [ "global-renamer", "global-sysop" ], "Max Milas": [ "editor" ], "Maxim": [ "editor" ], "Maximillion Pegasus": [ "global-rollbacker", "editor" ], "Maxint2": [ "editor" ], "Mazbel": [ "global-rollbacker" ], "Mbch331": [ "vrt-permissions" ], "Mbrickn": [ "transwiki", "editor" ], "Mcdonnkm": [ "editor" ], "Mcld": [ "editor" ], "Mdkoch84": [ "editor" ], "Mdmckenzie": [ "editor" ], "MdsShakil": [ "steward", "vrt-permissions" ], "Mdupont": [ "editor" ], "Me Lendroz": [ "editor" ], "Meanmicio": [ "editor" ], "Mecanismo": [ "editor" ], "MediaKyle": [ "editor" ], "Meditation": [ "editor" ], "Meev0": [ "editor" ], "Mehman": [ "ombuds", "vrt-permissions" ], "Melos": [ "steward", "vrt-permissions" ], "MemicznyJanusz": [ "global-renamer" ], "Mendelivia~enwikibooks": [ "editor" ], "Meniktah": [ "editor" ], "Mercy": [ "global-rollbacker", "editor" ], "MerlLinkBot": [ "editor" ], "Mfield": [ "global-renamer" ], "Mh7kJ": [ "editor" ], "Michael Romanov": [ "editor" ], "MichaelFrey": [ "editor" ], "Michaelbluett": [ "editor", "uploader" ], "Mido": [ "vrt-permissions" ], "MihalOrela": [ "editor" ], "MiiCii": [ "editor" ], "Mike Hayes": [ "editor" ], "Mike.lifeguard": [ "editor" ], "Mild Bill Hiccup": [ "editor" ], "Mill3315": [ "editor" ], "Millbart": [ "vrt-permissions" ], "Mimarx": [ "editor" ], "Min1996": [ "autoreview" ], "Minorax": [ "global-rollbacker", "global-sysop", "editor" ], "Mirinano": [ "global-rollbacker" ], "Mithridates": [ "editor" ], "Mjbt": [ "editor" ], "Mjchael": [ "editor" ], "Mjkaye": [ "editor" ], "Mkline": [ "autoreview" ], "Mlipl001": [ "editor" ], "Moby-Dick4000": [ "editor" ], "Mohean": [ "editor" ], "Money-lover-12345": [ "editor" ], "Moonriddengirl": [ "autoreview", "vrt-permissions" ], "Morkoz": [ "global-rollbacker" ], "Mortense": [ "editor" ], "Mpfau": [ "editor" ], "Mr. Stradivarius": [ "editor" ], "MrAlanKoh": [ "editor" ], "MrJaroslavik": [ "global-rollbacker", "ombuds" ], "Mrajcok": [ "editor" ], "Mrjulesd": [ "editor" ], "Mrwojo": [ "editor" ], "Mschrag": [ "editor" ], "Msmithma": [ "editor" ], "MtPenguinMonster": [ "editor" ], "Mtarch11": [ "global-rollbacker", "global-sysop", "editor" ], "Musical Inquisit": [ "editor" ], "Mussklprozz": [ "vrt-permissions" ], "Mvolz": [ "editor" ], "Mwtoews": [ "editor" ], "Mxn": [ "editor" ], "Myklaw": [ "editor" ], "Mykola7": [ "steward" ], "Mys 721tx": [ "global-renamer", "vrt-permissions" ], "NDG": [ "global-rollbacker", "global-sysop", "editor" ], "Nadzik": [ "global-rollbacker", "global-renamer" ], "NahidSultan": [ "vrt-permissions" ], "Nangkhan Magar": [ "editor" ], "Natuur12": [ "vrt-permissions" ], "Nbarth": [ "editor" ], "Nbro": [ "editor" ], "Nehaoua": [ "ombuds" ], "Neils51": [ "editor" ], "Nemoralis": [ "vrt-permissions" ], "Neojacob": [ "editor" ], "Neriah": [ "global-rollbacker", "global-renamer" ], "Nesbit": [ "editor" ], "Newlisp": [ "editor" ], "Nfgdayton": [ "editor" ], "NguoiDungKhongDinhDanh": [ "global-rollbacker", "global-sysop", "editor" ], "NhacNy2412": [ "global-renamer" ], "Nick.anderegg": [ "editor" ], "NickPenguin": [ "editor" ], "NicoScribe": [ "editor" ], "Nicole Sharp": [ "editor" ], "Nieuwsgierige Gebruiker": [ "editor" ], "Nigos": [ "autoreview" ], "Nihonjoe": [ "global-renamer" ], "Nikai": [ "editor" ], "Ninjastrikers": [ "vrt-permissions" ], "NipplesMeCool": [ "editor" ], "Njardarlogar": [ "editor" ], "Nobody60": [ "editor" ], "Nolispanmo": [ "vrt-permissions" ], "Nomstuff": [ "autoreview" ], "Nonenmac": [ "editor" ], "Norton": [ "editor" ], "Npettiaux": [ "editor" ], "Nsaa": [ "vrt-permissions" ], "Nthep": [ "vrt-permissions" ], "NuclearWarfare": [ "global-rollbacker", "editor" ], "OMSMike": [ "editor" ], "Officer781": [ "editor" ], "Oleander": [ "editor" ], "Oliviacatherall": [ "autoreview" ], "Omphalographer": [ "editor" ], "OnBeyondZebrax": [ "editor" ], "Onsen": [ "editor" ], "Ontzak": [ "global-renamer" ], "Orderud": [ "editor" ], "OrenBochman": [ "editor" ], "Oshwah": [ "global-renamer" ], "Ottawahitech": [ "editor" ], "Owain.davies": [ "editor" ], "PAC": [ "editor" ], "PAC2": [ "editor" ], "PK 97": [ "editor" ], "PNW Raven": [ "editor" ], "Pac8612": [ "editor" ], "Paloi Sciurala": [ "global-rollbacker" ], "Panic2k4": [ "transwiki", "editor" ], "Pascal Pignard": [ "editor" ], "Pastbury": [ "editor" ], "Pathfinders": [ "editor" ], "Pathoschild": [ "editor" ], "Patrik": [ "editor" ], "PauSix": [ "editor" ], "Paul James": [ "editor" ], "Pavroo": [ "editor" ], "PbakerODU": [ "editor" ], "Pbrower2a": [ "editor" ], "Pearts": [ "editor" ], "Peeragogia": [ "editor" ], "Peri Coleman": [ "editor" ], "Perl~enwikibooks": [ "editor" ], "Peter1180": [ "editor" ], "PeterEasthope": [ "editor" ], "Peyton09": [ "editor" ], "Phan M. Nhat": [ "autoreview" ], "PhilKnight": [ "global-renamer" ], "Phoebe": [ "editor" ], "Phosgram": [ "editor" ], "Pi zero": [ "editor" ], "PieWriter": [ "editor" ], "Piotrus": [ "editor" ], "Pithikos": [ "editor" ], "Pittsburgh Poet": [ "editor" ], "Pjpearce": [ "editor" ], "Pkkao": [ "editor" ], "Planotse": [ "editor" ], "Platonides": [ "vrt-permissions" ], "Pluke": [ "editor" ], "PlyrStar93": [ "global-rollbacker", "editor" ], "Pminh141": [ "global-renamer" ], "Pmlineditor": [ "editor" ], "Pmw57": [ "editor" ], "Poetcsw": [ "editor" ], "PoizonMyst": [ "editor" ], "Pola 2607": [ "autoreview" ], "Polimerek": [ "vrt-permissions" ], "Polluks": [ "editor" ], "Pookiyama": [ "editor" ], "Popski": [ "editor" ], "Povigna": [ "editor" ], "Ppolar bear": [ "global-rollbacker", "global-renamer" ], "Pppery": [ "autoreview" ], "Prahlad balaji": [ "editor" ], "Pratyeka": [ "editor" ], "Praxidicae": [ "global-rollbacker", "global-sysop", "editor" ], "Primefac": [ "vrt-permissions" ], "Prince Kassad~enwikibooks": [ "editor" ], "Pronesto": [ "editor" ], "Prototyperspective": [ "autoreview" ], "Psoup": [ "editor" ], "Psr1909": [ "editor" ], "PullUpYourSocks": [ "editor" ], "PurpleBuffalo": [ "global-renamer" ], "PurplePieman": [ "editor" ], "Purplebackpack89": [ "editor" ], "Putukas01": [ "editor" ], "Qenalcu": [ "autoreview" ], "Quebecguy": [ "global-rollbacker" ], "QueerEcofeminist": [ "global-rollbacker", "global-renamer", "editor" ], "Quinlan83": [ "global-rollbacker", "editor" ], "Quintucket": [ "editor" ], "Qwerty number1": [ "editor" ], "Qwertyus": [ "editor" ], "Qədir": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "R. Henrik Nilsson": [ "editor" ], "RAdimer-WMF": [ "global-rollbacker" ], "RDBury": [ "editor" ], "RJHall": [ "editor" ], "Ra'ike": [ "vrt-permissions" ], "Rachboots": [ "editor" ], "Rachel": [ "editor" ], "Rachmat04": [ "global-renamer", "vrt-permissions" ], "RadiX": [ "editor", "steward", "vrt-permissions" ], "Raffaela Kunz": [ "editor" ], "Rahulkepapa": [ "editor" ], "Ramac": [ "editor" ], "Rambam rashi": [ "editor" ], "Randykitty": [ "autoreview", "global-rollbacker" ], "RatónMístico176": [ "editor" ], "Ravichandar84": [ "editor" ], "Rawheatley": [ "editor" ], "Ray Trygstad": [ "editor" ], "RayeChellMahela": [ "editor" ], "Raymond": [ "vrt-permissions" ], "Razr Nation": [ "editor" ], "Rchaswms01": [ "editor" ], "Rcragun": [ "editor", "uploader" ], "Readyokaygo": [ "editor" ], "Recent Runes": [ "editor" ], "Redlentil": [ "editor" ], "Refcanimm": [ "editor" ], "Regasterios": [ "vrt-permissions" ], "Reinhard Kraasch": [ "vrt-permissions" ], "RenaissanceMan2144": [ "autoreview" ], "Renamed user 242094acfb1a5b2f08e9e78f2e021a40": [ "editor" ], "Renamed user 5f91ca71739b07cfce8397eed758fe13": [ "editor", "uploader" ], "Renamed user f26394dcb19bd7bdad78f0d752896653": [ "editor" ], "Renvoy": [ "global-rollbacker", "global-sysop" ], "Reseletti": [ "editor" ], "Retropunk": [ "editor" ], "Reuben1508": [ "autoreview" ], "Revi C.": [ "global-rollbacker", "global-renamer", "ombuds", "editor", "vrt-permissions" ], "Reyk": [ "editor" ], "Rfc1394": [ "editor" ], "Rgdboer": [ "editor" ], "Rgreenone": [ "editor" ], "Rhole2001": [ "autoreview" ], "Rich Farmbrough": [ "editor" ], "Rickstambaugh": [ "editor" ], "Riggwelter": [ "vrt-permissions" ], "Risk": [ "editor" ], "Risteall": [ "editor" ], "Ritjesman": [ "editor" ], "RoMancer": [ "editor" ], "Robbiemorrison": [ "editor" ], "Robert Huber~enwikibooks": [ "editor" ], "Roberto Mura": [ "editor" ], "Robertsky": [ "global-renamer", "vrt-permissions" ], "RobinH": [ "editor" ], "Rodasmith": [ "editor" ], "Rodrigo": [ "editor" ], "Rodrigo.Argenton": [ "vrt-permissions" ], "Rogerborrell": [ "editor" ], "Rogerdpack": [ "editor" ], "RogueScholar": [ "editor" ], "Romainbehar": [ "editor" ], "RomaineBot": [ "vrt-permissions" ], "RonaldB": [ "vrt-permissions" ], "Rosser1954": [ "editor" ], "Rotlink": [ "editor" ], "RoySmith": [ "ombuds" ], "Rozzychan": [ "editor" ], "Rplano": [ "editor" ], "Rreagan007": [ "autoreview" ], "Rrgreen": [ "editor" ], "Rschen7754": [ "global-rollbacker", "editor" ], "RshieldsVA": [ "editor" ], "Rsjaffe": [ "global-renamer" ], "Rtaisis": [ "editor" ], "Ruakh": [ "editor" ], "Rudolpho~enwikibooks": [ "editor" ], "Runfellow": [ "editor" ], "Runner4lyfe": [ "editor" ], "RunningBlind": [ "editor" ], "Ruthven": [ "vrt-permissions" ], "Ruud Koot": [ "transwiki", "editor" ], "Rzuwig": [ "autoreview", "global-rollbacker" ], "S.Marchenko": [ "global-renamer" ], "S8321414": [ "global-renamer" ], "SB Johnny": [ "editor" ], "SCP-2000": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "SHB": [ "sysop", "steward" ], "SPM": [ "editor" ], "Sae1962": [ "editor" ], "Safuan12616": [ "editor" ], "SahniM": [ "editor" ], "Sakretsu": [ "steward" ], "Sakura emad": [ "global-rollbacker" ], "Salil Kumar Mukherjee": [ "editor" ], "Samat": [ "vrt-permissions" ], "Sammy2012": [ "editor" ], "Samuel.dellit": [ "editor" ], "Samuele2002": [ "global-rollbacker", "editor" ], "Samwilson": [ "editor" ], "SanBonne": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Sandbergja": [ "editor" ], "Sannita": [ "vrt-permissions" ], "Sante Caserio~enwikibooks": [ "editor" ], "SarahFatimaK": [ "editor" ], "Sargoth": [ "vrt-permissions" ], "Saroj": [ "global-rollbacker" ], "Sascha Lill 95": [ "editor" ], "Satdeep Gill": [ "vrt-permissions" ], "Savh": [ "global-rollbacker", "editor" ], "Sbb1413": [ "editor" ], "Scention": [ "editor" ], "Schniggendiller": [ "steward" ], "SchreiberBike": [ "editor" ], "Scott.beckman": [ "editor" ], "Sebastian Wallroth": [ "vrt-permissions" ], "Seewolf": [ "global-rollbacker", "vrt-permissions" ], "Sekidoki": [ "vrt-permissions" ], "Selden": [ "editor" ], "Sennecaster": [ "vrt-permissions" ], "Serinap": [ "editor" ], "Seth Miller": [ "editor" ], "SevenSpheres": [ "editor" ], "Sfan00 IMG": [ "editor" ], "Sfoerster": [ "editor" ], "Sgarrigan": [ "editor" ], "Sgowal": [ "editor" ], "Shaitand": [ "editor" ], "ShakespeareFan00": [ "editor" ], "SharingNotes": [ "editor" ], "Shawntanchinyang": [ "editor" ], "Shdwninja8": [ "editor" ], "ShelleyAdams": [ "autoreview" ], "ShifaYT": [ "global-rollbacker" ], "Shii": [ "editor" ], "Shira the Mogul": [ "editor" ], "Shlomif": [ "editor" ], "ShuBraque": [ "editor" ], "Sidelight12": [ "editor" ], "Sidorkin": [ "editor" ], "Sidpatil": [ "editor" ], "Siebengang": [ "editor" ], "Sigma 7": [ "editor" ], "Simon Peter Hughes": [ "editor" ], "Sinus46": [ "editor" ], "Sir Beluga": [ "editor" ], "Sir Lestaty de Lioncourt": [ "vrt-permissions" ], "SixWingedSeraph": [ "editor" ], "Sj": [ "editor" ], "Sjc~enwikibooks": [ "editor" ], "Sjlegg": [ "editor" ], "Sjone101": [ "editor" ], "Sjö": [ "global-rollbacker" ], "Skymath": [ "editor" ], "Slava Ukraini Heroyam Slava 123": [ "editor", "uploader" ], "Slava Ukrajini Heroyam Slava": [ "editor" ], "Sluffs": [ "editor" ], "Smjg": [ "editor" ], "SnappyDragonPennyroyal": [ "editor" ], "SocialKnowledge": [ "editor" ], "SoftwareEngineerMoose": [ "autoreview" ], "Sonia": [ "editor" ], "Sophie Cheng": [ "editor" ], "Sotiale": [ "steward" ], "Soul windsurfer": [ "editor" ], "SouthParkFan65": [ "editor" ], "SoylentGreen": [ "editor" ], "Spamduck": [ "editor" ], "Spaynton": [ "editor" ], "Spender2001": [ "editor" ], "Speregrination": [ "editor" ], "Spiderworm": [ "editor" ], "Spoon!": [ "editor" ], "Squasher": [ "global-renamer" ], "Srhat": [ "editor" ], "Stang": [ "global-rollbacker", "editor", "vrt-permissions" ], "Stanglavine": [ "editor" ], "Steinsplitter": [ "global-renamer", "vrt-permissions" ], "StephT0704": [ "autoreview" ], "Stepheng3": [ "editor" ], "Stepro": [ "vrt-permissions" ], "Steve M": [ "editor" ], "Stilfehler": [ "editor" ], "Stockywood": [ "editor" ], "Storeye": [ "editor" ], "Strainu": [ "vrt-permissions" ], "Strange quark": [ "editor" ], "Stryn": [ "global-rollbacker", "editor" ], "Stïnger": [ "global-rollbacker", "editor" ], "Suchenwi": [ "editor" ], "Sumone10154": [ "editor" ], "SunCreator": [ "editor" ], "Sunny Cryolite": [ "global-rollbacker" ], "Sunshineconnelly": [ "editor" ], "SuperTyphoonNoru": [ "editor" ], "Superbass": [ "vrt-permissions" ], "Superpes15": [ "global-rollbacker", "global-renamer", "global-sysop", "vrt-permissions" ], "Supertoff": [ "vrt-permissions" ], "Superzerocool": [ "vrt-permissions" ], "SupremeUmanu": [ "editor" ], "Suruena": [ "editor" ], "Sutambe": [ "editor" ], "Sutton Publishing": [ "editor" ], "Sué González Hauck": [ "editor" ], "Svartava": [ "global-rollbacker", "global-renamer", "global-sysop", "editor" ], "SweetCanadianMullet": [ "editor" ], "Swift": [ "editor" ], "SyG": [ "editor" ], "Sylvesterchukwu04": [ "editor" ], "Sylvialim": [ "editor" ], "Sylviaread": [ "editor" ], "Synoman Barris": [ "global-rollbacker", "transwiki", "editor" ], "Syum90": [ "global-rollbacker", "editor" ], "Syunsyunminmin": [ "global-rollbacker", "global-renamer", "global-sysop", "editor" ], "T.seppelt": [ "editor" ], "TDang": [ "editor" ], "TTWIDEE": [ "editor" ], "Tahmid": [ "editor" ], "Taketa": [ "global-renamer" ], "Takipoint123": [ "vrt-permissions" ], "TakuyaMurata": [ "editor" ], "Tamzin": [ "global-renamer" ], "Tanbiruzzaman": [ "global-rollbacker", "global-renamer", "global-sysop", "editor", "vrt-permissions" ], "Tannertsf": [ "editor" ], "Taoheedah": [ "editor" ], "Tapsevarg": [ "editor" ], "TaronjaSatsuma": [ "vrt-permissions" ], "Taxman": [ "editor" ], "Tchoř": [ "global-renamer" ], "Tdkehoe": [ "editor" ], "Tdvorak": [ "editor" ], "TechVindicator": [ "autoreview" ], "Techman224": [ "editor" ], "Tegel": [ "editor", "steward" ], "Teles": [ "ombuds", "steward", "vrt-permissions" ], "Tem5psu": [ "editor" ], "Tempodivalse": [ "editor" ], "TenWhile6": [ "global-rollbacker", "global-renamer", "global-sysop", "editor" ], "Tenshi Hinanawi": [ "autoreview", "global-rollbacker" ], "Terence Kearey": [ "editor" ], "Ternarius": [ "global-renamer" ], "Ternera": [ "global-rollbacker", "global-renamer", "global-sysop", "editor" ], "Tesleemah": [ "editor" ], "Tevfik AKTUĞLU": [ "editor" ], "Tgregtregretgtr": [ "editor" ], "ThatBPengineer": [ "autoreview" ], "Thatonewikiguy": [ "editor" ], "The Squirrel Conspiracy": [ "vrt-permissions" ], "The labs": [ "editor" ], "TheGoodEndedHappily": [ "vrt-permissions" ], "ThePCKid": [ "editor" ], "TheSandDoctor": [ "global-renamer", "vrt-permissions" ], "Theknightwho": [ "editor" ], "Thenub314": [ "editor" ], "Theo Hughes": [ "editor" ], "Theornamentalist": [ "editor" ], "Thereen": [ "editor" ], "Thewinster": [ "editor" ], "Thierry Dugnolle": [ "editor" ], "Thinkglobalnow": [ "editor" ], "Thirunavukkarasye-Raveendran": [ "editor" ], "Thomas Simpson": [ "editor" ], "Thomas.haslwanter": [ "editor" ], "Thomas.lochmatter": [ "editor" ], "Tibetologist": [ "editor" ], "Tigerzeng": [ "global-rollbacker" ], "Tiled": [ "editor" ], "TimBorgNetzWerk": [ "editor" ], "Timothy Gu": [ "editor" ], "Timpo": [ "editor" ], "Tiptoety": [ "editor" ], "Tjyang": [ "editor" ], "Tlustulimu": [ "editor" ], "Tmvogel": [ "editor" ], "Tom Morris": [ "editor" ], "Tomato86": [ "editor" ], "TommyG": [ "vrt-permissions" ], "Tomt87": [ "editor" ], "Tomybrz": [ "editor" ], "Tonyvall": [ "autoreview" ], "Tp42": [ "editor" ], "Tracklayingninja": [ "editor" ], "Tradimus": [ "editor" ], "Tropicalkitty": [ "global-rollbacker", "editor" ], "TrulyShruti": [ "editor" ], "Ts12rAc": [ "global-rollbacker" ], "Tsarina CatarinaToo": [ "autoreview" ], "TunnelESON": [ "sysop" ], "Turbojet": [ "vrt-permissions" ], "Turkmen": [ "editor" ], "TwoThirty": [ "editor" ], "Tyoyafud": [ "editor" ], "Túrelio": [ "autoreview" ], "U$3rname008": [ "editor" ], "USSR-Slav": [ "global-rollbacker" ], "Uf.hun2201": [ "editor" ], "Uncitoyen": [ "global-rollbacker", "global-renamer" ], "Uncle G": [ "editor" ], "Unixxx": [ "editor" ], "User01938": [ "editor" ], "Username222": [ "editor" ], "Utcursch": [ "vrt-permissions" ], "Uziel302": [ "editor" ], "Uzume": [ "editor" ], "V0lkanic": [ "global-renamer" ], "VIGNERON": [ "steward" ], "Valery Starikov": [ "editor" ], "Van der Hoorn": [ "editor" ], "Varnent": [ "vrt-permissions" ], "Vdolar": [ "autoreview" ], "VectorVoyager": [ "editor" ], "Venzz": [ "vrt-permissions" ], "Verfassungsfreund": [ "editor" ], "Veritas Sapientiae": [ "global-rollbacker", "global-renamer", "vrt-permissions" ], "Vermont": [ "editor", "steward", "vrt-permissions" ], "Victor Stefan Stoica": [ "autoreview" ], "Victor Trevor": [ "autoreview" ], "Victoria.sandeman": [ "autoreview" ], "Vincent Vega": [ "global-renamer" ], "Vito Genovese": [ "editor" ], "Vituzzu": [ "editor" ], "Vladimir Solovjev": [ "global-renamer", "vrt-permissions" ], "Vogone": [ "global-rollbacker", "editor" ], "Vossman": [ "editor" ], "Vrinda": [ "editor" ], "VulcanWikiEdit": [ "editor" ], "Vwanweb": [ "editor" ], "WOSlinker": [ "autoreview" ], "Waihorace": [ "global-rollbacker" ], "Waldyrious": [ "editor" ], "WalshDay": [ "editor" ], "Wargo": [ "editor" ], "Wbjimmyd": [ "editor" ], "Wcoole": [ "editor" ], "WeelkyWikiReader": [ "editor" ], "Wekeepwhatwekill": [ "autoreview" ], "WereSpielChequers": [ "editor" ], "What no2000": [ "editor" ], "WhatamIdoing": [ "editor" ], "WhitePhosphorus": [ "global-rollbacker", "global-sysop" ], "Whiteknight": [ "editor" ], "Whoop whoop pull up": [ "editor" ], "Whym": [ "editor", "vrt-permissions" ], "Wiki13": [ "editor" ], "WikiBayer": [ "global-rollbacker", "global-sysop", "editor" ], "WikiFer": [ "vrt-permissions" ], "Wikimi-dhiann": [ "editor" ], "Wikiotics": [ "editor" ], "Wikiwau": [ "autoreview", "editor" ], "WillNess": [ "editor" ], "Willscrlt": [ "editor" ], "Wim b": [ "global-rollbacker", "editor" ], "Wisden": [ "editor" ], "Withinfocus": [ "editor" ], "Wj32": [ "editor" ], "Wkee4ager": [ "editor" ], "Wobbit": [ "editor" ], "Wojciech Pędzich": [ "vrt-permissions" ], "Wooze": [ "global-rollbacker" ], "Wundermacht": [ "editor" ], "Wutsje": [ "global-rollbacker", "editor" ], "Ww2censor": [ "vrt-permissions" ], "Wüstenspringmaus": [ "global-rollbacker", "global-renamer" ], "XXBlackburnXx": [ "editor", "steward" ], "Xandradi": [ "editor" ], "Xania": [ "sysop", "checkuser" ], "Xaosflux": [ "editor", "steward" ], "XenonX3": [ "vrt-permissions" ], "Xerol": [ "editor" ], "Xeverything11": [ "editor", "uploader" ], "Xhungab": [ "editor" ], "Xinkai Wu": [ "editor" ], "Xixtas": [ "editor" ], "Xqt": [ "global-rollbacker" ], "Xxagile": [ "editor" ], "Xypron": [ "editor" ], "Xz64": [ "editor" ], "Y-S.Ko": [ "editor" ], "YMS": [ "editor" ], "Yahya": [ "steward", "vrt-permissions" ], "Yamla": [ "global-renamer" ], "Yann": [ "editor" ], "Yerpo": [ "global-renamer", "vrt-permissions" ], "Yikrazuul": [ "editor" ], "Ymblanter": [ "global-rollbacker" ], "Yndesai": [ "editor" ], "Youssefsan": [ "editor" ], "Ysangkok": [ "editor" ], "Yvelik": [ "uploader" ], "Yzmo": [ "editor" ], "ZI Jony": [ "editor" ], "Zabe": [ "global-rollbacker" ], "Zafer": [ "ombuds" ], "Zedshort": [ "editor" ], "ZeroOne": [ "editor" ], "Zetud": [ "global-rollbacker", "vrt-permissions" ], "Ziv": [ "editor" ], "Zoeannl": [ "editor" ], "Zollerriia": [ "editor" ], "Zoohouse": [ "editor" ], "Zoot": [ "editor" ], "Zsohl": [ "autoreview", "editor" ], "Zvsmith": [ "editor" ], "Zweighaft": [ "editor" ], "ZxxZxxZ": [ "editor" ], "~riley": [ "global-rollbacker", "editor" ], "Érico": [ "global-renamer" ], "İmmortalance": [ "global-renamer" ], "Виктор Пинчук": [ "editor" ], "Воображение": [ "editor" ], "Всевидящий": [ "global-rollbacker" ], "Д.Ильин": [ "editor" ], "Л.П. Джепко": [ "editor" ], "יהודה שמחה ולדמן": [ "editor" ], "מקף": [ "global-rollbacker", "global-renamer" ], "د. فارس الجويلي": [ "global-renamer" ], "روتانا": [ "global-renamer" ], "علاء": [ "steward", "vrt-permissions" ], "فيصل": [ "global-renamer", "vrt-permissions" ], "सीमा1": [ "editor" ], "タチコマ robot": [ "editor" ], "ネイ": [ "global-renamer" ], "一隻北極熊": [ "editor" ], "人间百态": [ "global-rollbacker" ], "臺灣象象": [ "autoreview" ], "范": [ "vrt-permissions" ], "魔琴": [ "global-rollbacker" ], "ꠢꠣꠍꠘ ꠞꠣꠎꠣ": [ "editor" ], "기나ㅏㄴ": [ "global-rollbacker", "global-renamer" ] } csss8o3cza7ymrdytsvtuje2skr9hhk Infrastructure Past, Present, and Future Casebook/2Africa Cable 0 472785 4672095 4482570 2026-09-24T09:10:30Z R. Henrik Nilsson 3395618 refrences > references 4672095 wikitext text/x-wiki == Introduction == This Wikibook page features a case study on the international 2Africa submarine telecommunication cable, conducted by Fatima Omarjee-Chavez, Leslie Hernandez, Saida Ladhari, and Wali Qureshi. This project is integrated into the GOVT 490 (Section) and CEIE 499 Spring 2025, I''nfrastructure Past, Present, and Future'' at George Mason University. Supervised and instructed by Professor Jonathon Gifford. == Summary == [[File:2Africa Subsea cable map.png|thumb|382x382px|Map of 2Africa cable and Landing stations]] The 2Africa Cable is the longest subsea cable system in the world, spanning over 45,000 kilometers and connecting 33 countries across Africa, Asia, and Europe.<ref name=":2">{{Cite web |title=About {{!}} 2Africa Cable2Africa deployment is underway. 2Africa is now landing across 3 continents and will be ready for service in most places as early as 2023. |url=https://www.2africacable.net/about |access-date=2025-03-17 |website=2Africa Cable |language=en}}</ref> A subsea cable is a large fiber optic cable, typically one large cable made up of an array of smaller fiber optic cables, that is laid across the ocean floor with several landing points where the cable comes ashore and connects to data centers. It uses fiber optic technology to send light signals to transmit massive amounts of data at high speeds. Subsea cables facilitate the transfer of internet traffic and telecommunications across international waters. The 2Africa Cable wraps around the African continent with several landing points in Asia and Europe and the Middle East. The cable can transmit data at 180 terabits per second (Tbps).<ref>{{Cite web |title=2Africa - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> Alcatel Submarine Networks (ASN) was granted the responsibility of construction for the project. The advanced engineering of the 2Africa cable provides enhanced internet connectivity, reliable digital infrastructure, and opportunities for online commerce for billions of people around the world. The project is funded by a consortium of global tech and telecommunication corporations around the world seeking to connect over 3 billion people across three continents. Meta, China Mobile International Limited (CMI), Orange, Bayobab, STC, TelecomEgypt, Vodafone Business, and West Indian Ocean Cable Company (WIOCC) are the primary partners of the project.<ref name=":0">{{Cite web |title=Partners {{!}} 2Africa Cable2Africa deployment is underway. 2Africa is now landing across 3 continents and will be ready for service in most places as early as 2023. |url=https://www.2africacable.net/partners |access-date=2025-03-17 |website=2Africa Cable |language=en}}</ref> These companies are working together together along with local landing station partners to complete the 2Africa Cable. First announced in 2020, the 2Africa cable had its first landing point established in 2022 at Genoa, Italy. The subsea cable became operational in 2023 and has since been largely completed. There are still a few more branch landing stations to be connected within the next 2 years. The billion-dollar project is estimated to increase the total GDP and economic impact for African countries by tens of billions within the first 2 to 3 years.<ref name=":1">{{Cite journal |last=O'Connor |first=Alan C. |last2=Anderson |first2=Benjamin Jordan |last3=O'Connor |first3=Alan C. |date=2020-11-01 |title=Economic impact of 2Africa |url=https://www.rti.org/publication/economic-impact-2africa |language=en-US}}</ref> There are several concerns for 2Africa including environmental impact, questions on equitability, and lack of transparency. The 2Africa project is a monumental feat of physical infrastructure made for the digital world. Its global impact offers valuable insights and lessons for the world to learn from heading into the future of global digital connectivity. == Actors and Institutional Arrangements == [[File:Meta Platforms Inc. logo.svg|thumb|Meta, the primary actor for the 2Africa Cable]] The key actor for the 2Africa cable is '''Meta''' (formerly Facebook), because of its strategic interest in expanding global internet connectivity, especially in areas that are underserved (like Africa). By leading this venture, Meta reduces infrastructure dependency on third-party telecom providers for data traffic, which in turn better positions Meta to dominate the digital ecosystems in African markets. Meta is not the sole actor in this massive project, through Public-Private partnerships and a consortium model, collaboration with local and international telecom firms helps spread costs and risks, while compiling additional technical expertise.<ref name=":2" /> This approach has been a part of a trend where tech giants (GAFAM - Google, Apple, Facebook, Amazon, and Microsoft) directly invest in undersea cable projects to control network infrastructure.<ref>{{Cite web |title=BNP - Great power competition in the Atlantic |url=https://bibliografia.bnportugal.gov.pt/bnp/bnp.exe/registo?mfn=285382&cl=en |access-date=2025-03-17 |website=bibliografia.bnportugal.gov.pt |page=58}}</ref> '''Landing station partners''' are local operators who ensure smooth integration with the greater networks. The local telecom companies are in 33 countries with 46 landing points '''China Mobile International (CTM)''' Offers their customers seamless connection between Africa and Europe, and with their other subsea cables, further extends to Asia. Jessica Gu, director and CTO states, “the utmost capacity and faster transmission allows us to satisfy the needs of African nations today and in the future, reflecting our firm commitment to building a global digital life.” CTM aims to increase market reach and facilitate cross-border digital traffic between Asia and Africa. '''Bayobab''' manages local landing points and provides mobile network access across Africa. Bayobab reduces their operating costs by using the high-capacity submarine cable for long-distance traffic. '''Orange''' facilitates landing operations and extends broadband capacity to Francophone Africa and Europe (countries in these continents where French is widely spoken). Orange aims to strengthen its position as a leading telecom provider in Africa.<ref name=":5" /> '''Saudi Telecom Company (STC)''' enables connections between Africa, the Middle East, and Asia. STC supports Saudi Arabia’s Vision 2030 (program to increase diversification economically, socially, and culturally) by enhancing digital infrastructure and boosts regional connectivity. '''Telecom Egypt''' operates key landing stations in Egypt, which is vital in connecting Africa, Europe, and Asia. Leverages its geographic position to promote Egypt as a global digital hub. '''Vodafone Business''' provides global expertise and manages landing stations in Europe and southern Africa. The British telecommunications aims to strengthen its influence in Africa’s digital economy. '''West Indian Ocean Cable Company (WIOCC)''' manages landing points in Africa and enables connectivity. WIOCC is focused on increasing broadband capacity and affordability across Africa. '''National governments''' where the 2Africa cable services also play a key role by issuing permits for landing stations, regulating operations, and ensuring that national telecommunication policies are followed. Key countries involved: Egypt, Nigeria, South Africa, Kenya, and European countries like the UK, Spain, and Portugal. '''Key Telecommunications Regulatory Authorities''' that oversee the telecom infrastructure and data protection: National Telecommunications Regulatory Authority (NTRA) for Egypt, Independent Communications Authority of South Africa (ICASA), Nigerian Communications Commission (NCC), and Communications Authority of Kenya (CAK). '''International and Regional Regulatory Entities''' involved are the African Union (AU) and the European Union (EU) who are a part of the digital policies and regulations. '''The U.S. Government''' has indirect influence on the project through the U.S. Federal Communications Commission (FCC) and Team Telecom (DOJ and Homeland Security), in order to monitor the national security risks of undersea cables that involve the U.S. firm Meta.<ref>{{Cite journal |last=Tanchum |first=Michaël |date=2022 |title=Gateway to Growth: How the European Green Deal Can Strengthen Africa’s and Europe’s Economies |url=https://www.jstor.org/stable/resrep38920}}</ref><ref name=":0" /><ref name=":6">{{Cite web |last=Allen |first=Nate |date=November 12, 2024 |title=Demystifying External Actor Influence in Africa's Technology Sector |url=https://africacenter.org/spotlight/external-actor-influence-africa-technology-sector/ |url-status=live |website=Africa Center for Strategic Studies}}</ref> == Timeline == # '''May 14th 2020 -''' Partnering companies announce the launch of the 2Africa Cable.<ref name=":2" /> # '''September 28th, 2021 -''' 2Africa consortium announce the addition of the 2Africa PEARLS branch. The branch will connect Pakistan, India, and the Arabian Gulf. The extension officially makes the 2Africa cable the longest cable in the world and will service an additional 1.8 Billion people in the Middle East and South Asia.<ref name=":3">{{Cite web |title=2Africa Cable Extends to the Gulf, Pakistan and India, Being the Longest Subsea Cable in the World - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/2africa-cable-to-extend-to-the-gulf-pakistan-and-india-connecting-33-countries |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''April 13th,  2022'''- The 2Africa landing party in Genoa, Italy partnered with Equinix for a cable landing at the Equinix Neutral Data Center (CNDC). Equinix partnered with Vodafone to open Genoa’s first world-class carrier-neutral data center (GN1). GN1 serves as a strategic gateway for the 2Africa subsea cable system Its main purpose was to connect Africa, Europe, and the Middle East.<ref>{{Cite web |title=Vodafone to Land 2Africa Cable at Equinix GN1 in Genoa, Italy - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/vodafone-to-land-2africa-at-equinix-gn1-in-genoa-italy |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''May 12th, 2022-''' The 2Africa cable submarine landed in Djibouti, Ras Dika partnering with Djibouti telecom. An event took place at Siesta Beach under the auspices of Radwan Abdillahi Bahdon, the Minister of Communication in charge of telecommunications, along with several representatives from Djibouti Telecom.<ref>{{Cite web |title=2Africa Cable Lands in Djibouti - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/2africa-cable-lands-in-djibouti-to-new-cable-landing-station |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref><ref>{{Cite web |last=Clark |first=Kieran |date=2022-05-17 |title=2Africa Lands in Djibouti with Djibouti Telecom |url=https://subtelforum.com/2africa-lands-in-djibouti-with-djibouti-telecom/ |access-date=2025-03-17 |website=SubTel Forum |language=en-US}}</ref> # '''May 15th, 2022'''- 2Africa Lands in Berbera, Somaliland. Networking with the Somaliland Cable Network (Socamble) a private internet service based in the capital of Somaliland. Socamble adopts an open access policy and endeavors to appeal to other submarine cables to land in Barbera, which is considered a strategic location for the Horn of Africa.<ref>{{Cite web |title=Somcable Lands 2Africa in Berbera, Somaliland - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/somcable-lands-2africa-in-berbera-somaliland |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''October 1st, 2022-''' 2Africa lands in Egypt precisely in the Suez and Zafarana areas. Through Telecom Egypt (TE) the submarine landed at two cable landing stations which were built specifically for 2Africa to provide new terrestrial crossing routes linking the Red Sea and the Mediterranean Sea. The first Port Said cable landing station (CLS) is located 250 kilometers east of Alexandria on the Mediterranean side. The Red Seaside was located in Ras Ghareb CLS 100 kilometers south of Zafarana.<ref>{{Cite web |title=2AFRICA Subsea Cable Segment in Egypt Completed with Port Said Landing |url=https://ir.te.eg/en/CorporateNews/PressRelease/181/2AFRICA-Subsea-Cable-Segment-in-Egypt-Completed-with-Port-Said-Landing |access-date=2025-03-17 |website=ir.te.eg}}</ref> # '''October 25th, 2022'''- Meta’s 2Africa submarine cable lands in Spain, through Barcelona’s CLS as a key hub. Located in Sant Adria de Besos, East of Barcelona, partnering with ARF-IX telecom, an African telecom company.<ref>{{Cite web |title=2Africa Cable Lands into Barcelona Cable Landing Station - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/2africa-cable-lands-into-barcelona-cable-landing-station |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''November 6th, 2022'''- On Sunday the subsea cable lands in France, Marseille. Networking with Vodafone the leading partner of 2Africa cable in Marseille. This location holds great significance as it enhances the city’s position as a data exchange hotspot.<ref>{{Cite web |title=2Africa Cable Lands in Marseille - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/2africa-cable-lands-in-marseille |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''December 6th and 8th, 2022 -''' The 2Africa subsea cable reaches Yzerfontein, South Africa collaborating with MTN Global Connect (Now Bayobab). On the 8th, the cable landed in Duynefontein. MTN Global Connect worked with its subsidiary MTN South Africa as the landing party in both Duynefontein and Yzerfontein. <ref>{{Cite web |title=MTN Lands 2Africa Cable in Yzerfontein and Duynefontein, South Africa - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/mtn-lands-2africa-cable-in-yzerfontein-and-duynefontein-south-africa |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''January 4th and 6th 2022 -''' Center3 implements the 2Africa submarine cable in Saudi Arabia in both Jeddah and Yanbu. Center3 is a thriving digital infrastructure company and a newly formed subsidiary of STC.<ref>{{Cite web |title=center3 Lands 2Africa Cable in Jeddah and Yanbu, Saudi Arabia - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/center3-lands-2africa-cable-in-jeddah-and-yanbu-saudi-arabia |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''January 28th, 2023 -''' The 2Africa Subsea cable lands in Tanzania, Dar es Salaam cable landing station through Airtel Telesonic. The company wa'''s''' successful in linking the 2Africa submarine cable System with Kenya, Tanzania, and South Africa.<ref>{{Cite web |title=Airtel Activates 2Africa Cable Linking Kenya, Tanzania, and South Africa - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/airtel-activates-2africa-cable-linking-kenya,-tanzania,-and-south-africa |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''January 21st, 2023''' - The subsea cable system lands in Mozambique, Maputo. Vodacom is the landing partner in Mozambique, which facilitated the cable landing at the iColo MPM1 data center in Maputo located at the Nacala CLS.<ref>{{Cite web |title=Mozambique - Submarine Networks |url=https://www.submarinenetworks.com/en/stations/africa/mozambique |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''February 5th, 2023 -''' 2Africa submarine cable reached the shores of Madagascar, landing in Mahajanga. Through Vodafone and Telma a Madagascan operator.<ref>{{Cite web |title=2Africa reaches the shores of Madagascar |url=https://www.connectingafrica.com/connectivity/2africa-reaches-the-shores-of-madagascar |access-date=2025-03-17 |website=www.connectingafrica.com |language=en}}</ref> # '''April 20th, 2023 -''' 2Africa partners with Vodafone and Intelvision to secure a landing in Seychelles, Anse.<ref>{{Cite web |title=Intelvision Lands 2Africa in Seychelles, the Third Subsea Cable Connecting Seychelles - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/intelvision-lands-2africa-in-seychelles-the-third-subsea-cable-connecting-seychelles |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''July 30th, 2023 -''' The 2Africa subsea cable landed in Angola, reaching Cacuaco Beach in Luanda. The cable service will be facilitated by the Angolan mobile operator, Uniel.<ref>{{Cite web |title=Unitel Lands 2Africa Subsea Cable in Angola - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/unitel-lands-2africa-subsea-cable-in-angola |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''August 17th, 202'''3 '''-''' The 2Africa cable landed in Pointe Noire, in Congo. 2Africa was the second cable to land in the Republic of Congo. The West Africa Cable system landed in 2012, which connects South Africa to the United Kingdom. Owned by similar telecom services such as Vodafone and Congo Telecom.<ref>{{Cite web |last=Comment |first=Dan Swinhoe |date=2024-03-11 |title=Republic of Congo launches data center in Pointe-Noire for 2Africa cable |url=https://www.datacenterdynamics.com/en/news/republic-of-congo-launches-data-center-in-pointe-noire-for-2africa-cable/ |access-date=2025-03-17 |website=www.datacenterdynamics.com |language=en}}</ref> # '''September 21st, 2023 -''' The 2Africa project landed in the Democratic Republic of Congo, in Mawezi. The 2Africa cable partnered with Orange DRC and Airtel Congo to enhance connectivity through Mawesi RDC SA, a company formed through a partnership between Orange DRC and Airtel Congo RDC SA. This collaboration facilitates operations by building landing stations and operates as an open-access model.<ref>{{Cite web |title=Liquid Intelligent Technologies and Facebook Partner to Build a Fibre Network in the Democratic Republic of Congo - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/liquid-intelligent-technologies-and-facebook-partner-to-build-a-fibre-network-in-the-democratic-republic-of-congo |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''October 27th, 2023 -''' Bayobab, the 2Africa cable landing party in Ghana announces successful landing on Accra shores.<ref name=":4">{{Cite web |title=Bayobab Lands 2Africa Subsea Cable in Ghana and Nigeria - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/bayobab-lands-2africa-subsea-cable-in-ghana-and-nigeria |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> # '''February 7th, 2024 -''' The 2Africa subsea cable has been successfully deployed in Nigeria, particularly in the Lekki region of Lagos. The landing was announced by Bayobab, the African digital connectivity company.<ref name=":4" /> # '''Present Day -''' While the 2Africa cable is operational, there are still landing sites that have yet to be connected. Many PEARLS branch sites are set to be connected in 2025 and 2026.<ref>{{Cite web |title=Transworld Associates to Land 2Africa Subsea Cable System in Pakistan - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/transworld-associates-to-land-2africa-subsea-cable-system-in-pakistan |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref><ref>{{Cite web |title=Airtel to Land 2Africa Pearls in Mumbai, India - Submarine Networks |url=https://www.submarinenetworks.com/en/systems/asia-europe-africa/2africa/airtel-to-land-2africa-pearls-in-mumbai-india |access-date=2025-03-17 |website=www.submarinenetworks.com}}</ref> == Funding and Finances == The 2Africa Cable project is financially funded by a consortium of global partners. The consortium includes eight members, namely, CMI, Meta, MTN GlobalConnect, Orange, stc (center3), Telecom Egypt, Vodafone, and WIOCC. While specific funding details for some members remain undisclosed, notable investments have been made. stc (center3) has committed $300 million to the project as part of its strategy to expand its international footprint.<ref>{{Cite web |title=stc launches 2Africa Pearl submarine cable system & new data center park |url=https://digitalinfranetwork.com/news/stc-2africa-pearl-bahrain/ |access-date=2025-03-17 |website=Digital Infra Network |language=en-US}}</ref> MTN GlobalConnect anticipates generating up to $1 billion in revenue, though its direct investment in the cable remains unspecified.<ref>{{Cite web |last=Maluleka |first=Amogelang |date=2022-12-13 |title=MTN GlobalConnect, MTN South Africa land 2Africa subsea cable in Western Cape to strengthen internet connectivity |url=https://www.mtn.com/mtn-globalconnect-mtn-south-africa-land-2africa-subsea-cable-in-western-cape-to-strengthen-internet-connectivity/ |access-date=2025-03-17 |website=MTN.com |language=en-US}}</ref> WIOCC has invested over $500 million in Africa’s digital infrastructure, but the exact allocation for 2Africa is unclear.<ref>{{Cite web |last= |first= |date=2025-02-03 |title=Driving Africa’s Digital Future - WIOCC |url=https://wiocc.net/driving-africas-digital-future/ |access-date=2025-03-17 |language=en-US}}</ref> Orange has revealed a broader $1 billion investment in high-performance networks across Africa and the Middle East, though it has not detailed its contribution to this specific initiative.<ref name=":5">{{Cite web |title=Africa and the Middle East: how Orange proactively “connects the unconnected” {{!}} Orange |url=https://www.orange.com/en/africa-and-middle-east-how-orange-proactively-connects-unconnected |access-date=2025-03-17 |website=www.orange.com |language=en}}</ref> Despite the lack of full transparency regarding individual financial commitments, the 2Africa Cable project is projected to deliver a significant economic impact, estimated between $26.4 billion and $36.9 billion within two to three years of commencing operations in 2023/24.<ref name=":1" /><ref>The Funding and Financing paragraph was edited with the assistance of AI.</ref> == Policy Issues == [[File:Submarine power cable, Bay of Holland, Stronsay, Orkney - geograph.org.uk - 3995174.jpg|thumb|Submarine cable ashore]] '''Land Acquisition -''' The 46 cable landing stations across 33 countries in Africa, Asia, and Europe all have their own land acquisition processes. Securing land for these stations involves negotiations with governments, local communities, and private landowners. The varying processes can cause delays for the project, some countries have stricter property laws and permits; whereas, others may lack clear policies. For example, Transworld Associates (TWA) is a provider based in Pakistan serving as a backbone for IP connectivity in Pakistan. TWA negotiated with the government to land the cable in Karachi, integrating it into the country’s existing network.<ref>{{Cite web |last=Comment |first=Niva Yadav |date=2024-07-30 |title=Transworld Associates to land 2Africa cable in Karachi, Pakistan |url=https://www.datacenterdynamics.com/en/news/transworld-associates-to-land-2africa-cable-in-karachi-pakistan/ |access-date=2025-03-17 |website=www.datacenterdynamics.com |language=en}}</ref> As a result of the economic growth the subsea cable brings, countries benefit from adding landing stations.<ref name=":1" /> '''Data Privacy and Protection -''' As the primary developer, Meta holds direct ownership over critical components of the system. This paints a concerning picture over digital sovereignty in African, Middle Eastern and South Asian countries that lack advanced technological infrastructure. Meta’s leadership in this project creates opportunities for unauthorized data access and further entrenches its dominance in global data transmission. The 2Africa digital infrastructure project facilitates vast amounts of data flow through undersea cable networks, enabling wealthy corporations like Meta to exploit nations with less awareness of data privacy and protection, and weaker data security management systems. Therefore, regulatory measures will have to be enforced to protect sensitive information and ensure that countries and users retain control over the data generated within their territories. '''Environmental -''' Before subsea cables are laid on the seabed, a series of rigorous, environmentally sensitive procedures are conducted offsite to minimize ecological impact. This phase of the project focuses on charting the most efficient route while avoiding restricted areas and seabed irregularities. Additionally, thorough environmental assessments are carried out to ensure that any disturbances to the marine ecosystem are minimal and temporary.<ref>{{Cite web |last=Delaney |first=Oonagh |date=2025-01-21 |title=The stages of submarine cable installation |url=https://oceaniq.co.uk/news/the-stages-of-submarine-cable-installation/ |access-date=2025-03-17 |website=OceanIQ |language=en-GB}}</ref><ref>{{Cite journal |last=Aishwarya |first=N. |date=2020 |editor-last=Arai |editor-first=Kohei |editor2-last=Kapoor |editor2-first=Supriya |editor3-last=Bhatia |editor3-first=Rahul |title=Business and Environmental Perspectives of Submarine Cables in Global Market |url=https://link.springer.com/chapter/10.1007/978-3-030-39445-5_29 |journal=Advances in Information and Communication |language=en |location=Cham |publisher=Springer International Publishing |pages=392–399 |doi=10.1007/978-3-030-39445-5_29 |isbn=978-3-030-39445-5}}</ref> == Key Lessons and Takeaways == [[File:Submarine cable cross-section 3D plain.svg|thumb|342x342px|Subsea cable diagram]] '''Importance of International Cooperation in Infrastructure Development''' - The construction and successful completion of the 2Africa cable is a testament to the value of international cooperation. The project brought together actors from different countries and industries together to work towards the cable’s construction. Leveraging the diverse conglomeration of expertise and resources, allowed for a project of this scale and magnitude to come to fruition. '''Technological Innovations to Connect to the World''' - The gap in accessibility to technology in many countries around the world poses a significant challenge. Innovations are key to providing reliable high speed internet access to communities that have not had that luxury. The 2Africa cable is the longest in the world at around 45,000 km, and is one of the first subsea cables to utilize Spatial Division Multiplexing (SDM1). SDM1 allows for more data traffic to flow through the cable fibers at speeds up to 180 terabits/s.<ref>{{Cite web |date=2020-05-14 |title=Building a transformative subsea cable to better connect Africa |url=https://engineering.fb.com/2020/05/13/connectivity/2africa/ |access-date=2025-03-17 |website=Engineering at Meta |language=en-US}}</ref> The Sustainable Developement Goals set by the United Nations include acheiving universal and affordable internet access. While the goal was not met in 2020, the innovations of the 2Africa cable can directly benefit over 3 billion people around the world, bringing the world closer to that global acheivement.<ref name=":3" /><ref>{{Cite web |last=GDIP |date=2024-01-17 |title=Submarine cable connectivity fundamental to achieving digital inclusion goals |url=https://globaldigitalinclusion.org/2024/01/17/submarine-cable-connectivity-fundamental-to-achieving-digital-inclusion-goals/ |access-date=2025-03-17 |website=Global Digital Inclusion Partnership |language=en-US}}</ref> '''Economic Impacts of Digital Access''' - Enhanced internet connectivity naturally promotes economic productivity in a technology driven world economy. The 2Africa cable gives tech companies the leeway to access markets with demand for high-performance data connectivity and cloud services. Additionally, companies in Africa will benefit from reliable internet connection to broaden their markets and further take advantage of opportunities in the e-commerce industry. '''Digital Colonialism and the Importance of Infrastructure Transparency''' - Major tech corporations can influence communities around the world, particularly in developing countries through their control of data and technology infrastructure. While projects abroad are often framed as advancing global connectivity, they may also perpetuate inequitable investments that can underserve and inaccurately address the community’s needs.  Infrastructure projects in developing countries can limit local control and form dependencies that are reminiscent of colonial history. To ensure equitable outcomes that benefit all, it is important for large corporations to prioritize transparency and accountability. Corporations should engage with local communities and stakeholders to establish infrastructure projects that are economically sustainable and beneficial for all parties.<ref>{{Cite journal |last=Mwema |first=Esther |last2=Birhane |first2=Abeba |date=2024-04-14 |title=Undersea cables in Africa: The new frontiers of digital colonialism |url=https://firstmonday.org/ojs/index.php/fm/article/view/13637 |journal=First Monday |language=en |doi=10.5210/fm.v29i4.13637 |issn=1396-0466}}</ref> == Discussion Questions == * What responsibility do large tech corporations have in addressing social and economic inequities in local communities when developing infrastructure projects abroad? * How can African governments ensure that the 2Africa cable serves local interests rather than reinforcing foreign technological dominance? * How can the involvement of multiple stakeholders impact the long-term success of the 2Africa cable, and what challenges might arise from having so many different interests involved? * How does a lack of financial transparency affect the project's success, public trust, and accountability for equitable access and sustainability? == References == <references /> l56u0lol1vwzp0if5txs269th2ayvfd Extensions: Open Scholarship Policy Observatory, 2021-2024 0 473303 4672005 4635343 2026-09-23T22:03:15Z LodestarChariot2 3138880 /* Table of Contents */ 4672005 wikitext text/x-wiki ''To read the French version of this text, see [[b:fr:Extension : Observatoire des politiques d'Érudition ouverte, 2021-2024 | Extension : Observatoire des politiques d'Érudition ouverte, 2021-2024]]''. ''For the first volume in this series, please see [[Foundational Observations: Open Scholarship Policy Observatory, 2017-2020]]''. <big><div style="text-align: left;">'''Editors: Lynne Siemens, Tanja Niemann, Alyssa Arbuckle, Ray Siemens'''</div></big> <big><div style="text-align: left;">'''Authors: Caroline Winter, Talya Jesperson, JT Kern, Maggie Sardino, Brittany Amell'''</div></big> ==Overview== '''Extensions: Open Scholarship Policy Observatory, 2021-2024''' is a book-length compendium of reflections on issues pertinent to the open scholarship movement. This volume is intended to facilitate understanding of open social scholarship across Canada and internationally, as an aid to influence and implement policy around knowledge mobilization. In doing so, it reflects pertinent policies and their impact across research communities; signals trends and current research; and offers a broad and deep foundation for the development of policy recommendations on important issues, including identity management, open access, data management, citizen science, and other related areas. ==Table of Contents== [[File:OSP-OSPO_Volume_2_English_cover.jpg|frameless|250px|right]] {{noprint/top}} {{Helpful hint|title=Print Version (via PediaPress)|hint=[https://pediapress.com/books/show/13ab107db27df65ad879e7c2049834/ Click here] to order a printed copy of this book for a fee.}} {{noprint/bottom}} {{Book Search}} ===[[Extensions: Open Scholarship Policy Observatory, 2021-2024/Introduction | Introduction]]<ref>This is a brief introduction to the Extensions volume; for a comprehensive introduction to all volumes, please see the [[Foundational Observations: Open Scholarship Policy Observatory, 2017-2020/Introduction|Foundational Observations introduction]].</ref>=== {{reflist}} ===2021=== *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Wikipedian in Residence Programs | Wikipedian in Residence Programs]] <small>(Winter and Jesperson)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Plan S Update: The Expanding Membership of cOAlition S | Plan S Update: The Expanding Membership of cOAlition S]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Open Access Monographs | Open Access Monographs]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Update: Research Data Management in Canada | Update: Research Data Management in Canada]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Open Access Agreements | Open Access Agreements]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/International Open Access Week 2021, October 25–31 | International Open Access Week 2021, October 25–31]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The Extension of Canada's General Term of Copyright under CUSMA (USMCA) | The Extension of Canada's General Term of Copyright under CUSMA (USMCA)]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The Current State of Research Data Management in Canada: A Report by the Digital Research Alliance of Canada | The Current State of Research Data Management in Canada: A Report by the Digital Research Alliance of Canada]] <small>(Winter)</small> ===2022=== *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The Fonds de Recherche du Québec Join cOAlition S | The Fonds de Recherche du Québec Join cOAlition S]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/RDM Capacity Building in Canada and the Portages Insights Reports Series | RDM Capacity Building in Canada and the Portages Insights Reports Series]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Canada's National Heritage Digitization Strategy | Canada's National Heritage Digitization Strategy]] <small>(Winter and Kern)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The CARL–OpenAIRE Collaboration | The CARL–OpenAIRE Collaboration]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The Future of Open Scholarship Project Report on Open Infrastructure | The Future of Open Scholarship Project Report on Open Infrastructure]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/UKRI’s 2021 Open Access Policy | UKRI’s 2021 Open Access Policy]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The State of Open Data 2021 Report | The State of Open Data 2021 Report]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Altmetrics for Research Evaluation | Altmetrics for Research Evaluation]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The PKP and SciELO's Renewed Partnership | The PKP and SciELO's Renewed Partnership]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/CRKN's Decolonizing Metadata Project | CRKN's Decolonizing Metadata Project]] <small>(Winter and Kern)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Open Access Monographs Update | Open Access Monographs Update]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The Nelson Memo: Ensuring Free, Immediate, and Equitable Access to Federally Funded Research in the US | The Nelson Memo: Ensuring Free, Immediate, and Equitable Access to Federally Funded Research in the US]] <small>(Winter)</small> ===2023=== *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/An Action Plan for Advancing Diamond Open Access | An Action Plan for Advancing Diamond Open Access]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/International Open Access Week 2022, October 24–30 |International Open Access Week 2022, October 24–30]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Market Consolidation and Scholarly Communications | Market Consolidation and Scholarly Communications]] <small>(Winter and Sardino)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Intellectual Property Rights and Open Scholarship in Europe | Intellectual Property Rights and Open Scholarship in Europe]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/The Budapest Open Access Initiative’s 20th Anniversary Recommendations | The Budapest Open Access Initiative’s 20th Anniversary Recommendations]] <small>(Winter and Kern)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Research Security and Open Scholarship in Canada | Research Security and Open Scholarship in Canada]] <small>(Winter)</small> ===2024=== *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Review of Canada's Tri-Agency Open Access Policy on Publications (2015) | Review of Canada's Tri-Agency Open Access Policy on Publications (2015)]] <small>(Winter)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Community over Commercialization | Community over Commercialization]] <small>(Amell)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Responses to Generative AI | Responses to Generative AI]] <small>(Amell)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Generative AI and Scholarly Publishing | Generative AI and Scholarly Publishing]] <small>(Amell)</small> *[[Extensions:_Open_Scholarship_Policy_Observatory,_2021-2024/Federal Research Funding Agencies Announce Draft Guidance on the Use of Generative AI | Federal Research Funding Agencies Announce Draft Guidance on the Use of Generative AI]] <small>(Amell)</small> {{shelves|Humanities}} {{status|100%}} patzcwpg8syg5hpmtj38l2zcnw36ua8 Extensions: Open Scholarship Policy Observatory, 2021-2024/Market Consolidation and Scholarly Communications 0 473704 4672003 4486389 2026-09-23T22:02:46Z LodestarChariot2 3138880 LodestarChariot2 moved page [[Extensions: Open Scholarship Policy Observatory, 2021-2024/Market Consolidation in Scholarly Communications]] to [[Extensions: Open Scholarship Policy Observatory, 2021-2024/Market Consolidation and Scholarly Communications]]: Misspelled title 4486389 wikitext text/x-wiki ''This observation was written by Caroline Winter and Maggie Sardino (with thanks to Leslie Chan, John Maxwell, and Jefferson Pooley for their feedback and contributions), for the Electronic Textual Cultures Laboratory and the Implementing New Knowledge Environments partnership.'' For the past decade or more, a trend has been observed in the scholarly communications ecosystem toward market consolidation, with fewer companies owning increasing shares of the market. A study by Data Think estimated that, in 2021, very large publishers (those with more than 500 journals) accounted for only 0.06% of the publishers in their study but published nearly half—47%—of all articles (Pollock 2022). This increasing market consolidation has raised concerns in the open scholarship community and in the broader academic community. A number of mergers between large publishers and related companies in 2021 prompted one commenter to call it “a year of market consolidation” (Crotty 2021 “Market”). [https://newsroom.wiley.com/press-releases/press-release-details/2021/Wiley-Announces-the-Acquisition-of-Hindawi/default.aspx Wiley had a particularly active year, ]acquiring the open access (OA) publisher [https://newsroom.wiley.com/press-releases/press-release-details/2021/Wiley-Announces-the-Acquisition-of-Hindawi/default.aspx Hindawi], publishing services company [https://jjeditorial.com/wiley-acquires-jj-editorial-advance-publishing-service-offerings/ J&J Editorial], scholarly publishing software company [https://newsroom.wiley.com/press-releases/press-release-details/2021/Wiley-Acquires-eJournalPress/default.aspx eJournalPress], and [https://knowledgeunlatched.org/2021/12/wiley-acquires-oa-innovator-ku/ Knowledge Unlatched], a platform and model for open access monograph publishing. Also in 2021, [https://group.springernature.com/gp/group/media/press-releases/springer-nature-has-aquired-atlantis-press/18946944 Springer Nature acquired Atlantis Press], an OA publisher based in Paris, and [https://clarivate.com/news/clarivate-to-acquire-proquest/ Clarivate acquired ProQuest]. Market consolidation continued in 2022: in May, [https://www.copyright.com/ccc-announces-acquisition-of-ringgold-leading-provider-of-organization-identifiers-in-scholarly-communications/ Copyright Clearance Center acquired Ringgold], and in June, [https://www.elsevier.com/ Elsevier] acquired [https://www.interfolio.com/ Interfolio], an academic technology company whose portfolio includes the academic job search platform [https://www.interfolio.com/products/dossier/ Dossier], the research analytics platform [https://www.interfolio.com/products/researchfish/ Researchfish], and administrative data platform [https://www.interfolio.com/faculty-information-system/ Faculty Information System (][https://www.interfolio.com/faculty-information-system/ FIS]). The issue of market consolidation and the role of corporate strategy and policy in open scholarship is complex and rapidly evolving. This observation offers a snapshot of recent developments and highlights some key issues related to open scholarship. ==Monopolization== Due to the nature of the scholarly communications industry, it is particularly vulnerable to monopolization and other anticompetitive practices. This is because the three main markets involved––academic journals, library service providers, and research data analytics––lacktransparency around pricing and contract terms (such as through non-disclosure agreements) and are subject to first-degree price discrimination, where prices are determined by the maximum amount that each customer is willing to pay. In addition, the cost for switching between products is very high (SPARC 2021 “Opposing”). As companies merge, fewer companies hold larger shares of the market, leading to monopolies and duopolies. Monopolization can have negative effects on consumers–in this case, the scholarly community–since it can lead to higher prices, reduced consumer choice, and less innovation. A planned merger between educational publishers [https://www.mheducation.com/news-media/press-releases/cengage-mcgraw-hill-merge.html Cengage and McGraw-Hill Education], for instance, was widely opposed by scholarly and education communities due to its effects on the textbook market and was cancelled in 2020 due to antitrust and other regulatory concerns (SPARC 2020). Elsevier’s acquisition of Interfolio sparked similar concerns, although it was ultimately successful. The acquisition concentrated Elsevier’s share of the emerging faculty information system (FIS) market to a point just below the threshold set by antitrust regulators. This market share is expected to grow even larger since Elsevier will be able to bundle its FIS services with its other products, such as journal subscriptions (SPARC 2022, “Executive” and “The Interfolio”), including as part of read-and-publish agreements (de Knecht 2020; Chen and Chan 2021; see “[[Extensions: Open Scholarship Policy Observatory, 2021-2024/Open Access Agreements|Open Access Agreements]]”). This bundling may lead to libraries having less control over their budgets, for example if a university’s administration subscribes to Interfolio as a part of a bundle that includes journal subscriptions. In that case, libraries would also lose the ability to advance OA through negotiations with publishers, as the University of California has done with Elsevier (SPARC 2022, “Elsevier’s”; see “[[Foundational Observations: Open Scholarship Policy Observatory, 2017-2020/The University of California's Split with Elsevier|The University of California’s Split with Elsevier]]” and “[[Foundational Observations: Open Scholarship Policy Observatory, 2017-2020/Open Access Publishing Negotiations in Europe|Open Access Publishing Negotiations in Europe]]”). Monopolies have led to smaller publishers being pushed out of the marketplace, which has caused a loss of bibliodiversity and publishing options for authors (see Shearer et al. 2020 and “[[Foundational Observations: Open Scholarship Policy Observatory, 2017-2020/Jussieu Call for Open Science and Bibliodiversity|Jussieu Call for Open Science and Bibliodiversity]]”). Smaller institutions and those with fewer resources, including those in the Global South, are also at a disadvantage. A related concern is platform monopolization, where single companies control the platforms, tools, and services underpinning the entire research enterprise, from data collection to publishing to assessment to review, promotion, and tenure: “a single system to monetize the full research lifecycle” (SPARC 2021 “Opposing” 2). A study by George Chen, Alejandro Posada, and Leslie Chan found clear trends toward such monopolization or vertical integration in research and higher education among the major commercial publishers (2019). Elsevier’s acquisition of Interfolio and its other recent acquisitions illustrates this phenomenon. Elsevier is one of the world’s largest academic publishers and has been criticized for its high profit margins and exploitative practices. In addition to its publishing activities, Elsevier acquired the reference management system [https://www.elsevier.com/about/press-releases/archive/corporate/elsevier-acquires-mendeley,-an-innovative,-cloud-based-research-management-and-social-collaboration-platform Mendeley] in 2013, the repository platform [https://www.elsevier.com/connect/ssrn-the-leading-social-science-and-humanities-repository-and-online-community-joins-elsevier Social Science Research Network (SSRN)] in 2016 and [https://www.elsevier.com/about/press-releases/corporate/elsevier-acquires-bepress,-a-leading-service-provider-used-by-academic-institutions-to-showcase-their-research bepress] in 2017, altmetrics provider [https://www.elsevier.com/about/press-releases/archive/corporate/elsevier-acquires-leading-altmetrics-provider-plum-analytics Plum Analytics] in 2017, and workflow management system [https://www.elsevier.com/about/press-releases/archive/corporate/elsevier-closes-its-acquisition-of-aries-systems Aries Systems] in 2018. Elsevier also has interest in university rankings through ties with ''Times Higher Education'', which produces the World University Rankings (Chen and Chan 2021). Interfolio’s FIS is an emerging type of platform, one that supports–and collects data about–job applications and hiring processes; faculty activity reporting; and review, promotion, and tenure processes. Elsevier is becoming what Roger Schonfeld calls a “workflow business” (2022), one that profits from the platform services it provides and the data they generate. ==Data Privacy== The trend of large scholarly publishers acquiring or merging with data companies (e.g., Elsevier and Interfolio or Clarivate and ProQuest) raises concerns about how the data collected through research tools and platforms is being used. Data collected through proprietary platforms is subject to corporate privacy policies and can be sold to third parties. For example, Elsevier is part of the company RELX, which sells personal data to the US Immigration and Customs Enforcement (ICE) through LexisNexis (Biddle 2021; Funk 2019; Lamdan 2022), a practice that has been denounced and protested by the legal and academic communities (SPARC 2022, “Possible”; see, for example, [https://notechforice.com/ #NoTechForICE]). ==Commercialization of Open Access and Open Infrastructures== Because commercial publishers’ mandate is to generate profit, many prefer the article processing charge (APC) route to OA, where the costs of making research open are borne by authors, often via funders. This economic model has been criticized for running counter to the ideals of the OA movement and exacerbating existing inequalities in scholarly publishing, since only authors with access to funding can afford to publish their work openly. As fewer commercial publishers gain more control over the publishing market, APCs may become further entrenched as well, at the expense of collective funding models and others that support more widespread open access. In addition to this commercialization of OA publishing models, concerns have been raised about the commercialization of research and publishing infrastructures, particularly the acquisition, monetization, and monopolization of open infrastructures. A key example is that of [https://knowledgeunlatched.org/ Knowledge Unlatched], which was founded as a not-for-profit organization in 2012 but was transformed into a for-profit company in 2016, a move that was widely criticized for its lack of transparency (Gerakopoulou et al. 2021). A related example is the collective copyright licensing company [https://www.copyright.com/ Copyright Clearance Center]’s (CCC) acquisition of [https://www.ringgold.com/ Ringgold], which provides and manages persistent identifiers (PIDs) for organizations and their associated metadata. Although there are open PID registries for organizations, such as [https://ror.org/ Research Organization Registry (ROR)] and [https://isni.org/ International Standard Name Identifier (ISNI)], Ringgold has the resources to develop proprietary metadata for more robust disambiguation. As PIDs become more embedded in research, publication, licensing, and funding workflows (see “[[Foundational Observations: Open Scholarship Policy Observatory, 2017-2020/The UK Persistent Identifier (PID) Consortium|The UK Persistent Identifier (PID) Consortium]]” and “[[Foundational Observations: Open Scholarship Policy Observatory, 2017-2020/ORCID Update: Integrating ORCID iDs into Research Funding Workflows|ORCID Update: Integrating ORCID iDs into Research Funding Workflows]]”), open and community-led, community-funded PID registries are at risk of being pushed out of the ecosystem in favour of proprietary systems. ==Scholarly Communications Market Consolidation in the Press== Market consolidation is a longstanding concern in the academic community, including in the academic press. A 2017 piece by [https://www.universityaffairs.ca/opinion/in-my-opinion/academic-publishing-crossroads/ Marc Couture] in ''University Affairs'' discusses the role of APCs in monetizing OA: “Once considered a threat, open access has become an opportunity for them [commercial publishers] to maintain and even tighten their grip on the market and their revenue streams.” A 2018 opinion piece by [https://www.universityaffairs.ca/opinion/in-my-opinion/time-stand-academic-publishing-industry/ Adriane Macdonald and Nicole Eva] in ''University Affairs ''discusses market consolidation in the context of predatory practices in academic publishing, and calls upon the academic community to take collective action to reclaim control of the industry. A piece in [https://researchprofessionalnews.com/rr-news-europe-views-of-europe-2022-1-how-to-reclaim-ownership-of-scholarly-publishing/ ''Research Professional News''] calls for a transparent open tender system to replace the secretive negotiations between libraries and publishers. A 2019 article by [https://www.chronicle.com/article/elseviers-presence-on-campuses-spans-more-than-journals-that-has-some-scholars-worried/ Lindsay Ellis] in ''The Chronicle'' draws attention to increasing calls from within the academic community to pay attention to who owns and controls digital infrastructures. A 2021 article by [https://americanlibrariesmagazine.org/blogs/the-scoop/clarivate-to-acquire-proquest/ Marshall Breeding] in ''American Libraries'' magazine discusses Clarivate’s acquisition of ProQuest from an academic library perspective, noting that, although the merger offers the possibility of a comprehensive, integrated suite of tools for supporting research, the company’s expansion into data and analytics is cause for caution. Wiley’s acquisition of Knowledge Unlatched was also covered in [https://www.infodocket.com/2021/12/02/open-access-publishing-wiley-acquires-knowledge-unlatched/ ''Library Journal''][https://www.infodocket.com/2021/12/02/open-access-publishing-wiley-acquires-knowledge-unlatched/ ’s InfoDocket]. The educational technology sector has also addressed the topic: Elsevier’s acquisition of Interfolio was covered by [https://listedtech.com/blog/elsevier-to-acquire-interfolio/ ListEdTech], an educational technology market researcher, and Wiley’s acquisition of Knowledge Unlatched was covered in [https://www.edsurge.com/news/2018-11-27-faculty-information-system-developer-interfolio-acquired-for-110m EdSurge] and [https://iblnews.org/wiley-continues-its-acquisition-strategy-with-the-purchase-of-knowledge-unlatched/ IBL News]. ==Responses from the INKE Partnership== In 2016, the [https://www.crkn-rcdr.ca/en Canadian Research Knowledge Network (CRKN)], an INKE partner, launched the [https://www.crkn-rcdr.ca/en/journal-usage-project Journal Usage Project], which involved 28 member institutions of CRKN across Canada in a study of how consolidation in scholarly publishing affects libraries. This project built upon research led by INKE member Vincent Larivière on the consolidation of academic publishers, which is described in one study as an “oligopoly,” a market in which a few very large companies dominate an industry (Larivière et al. 2015). In a 2018 [https://www.carl-abrc.ca/wp-content/uploads/2018/02/CARL_Brief_Subscription_Costs_en.pdf brief for the Canadian Association of Research Libraries (CARL)], an INKE partner, Kathleen Shearer identifies market consolidation as one of the major causes of unsustainable journal subscription costs. She notes that subscription costs are highest from large commercial publishers, which see profit margins in the range of about 28–40% (Shearer 2018, 3). Shearer points to consortial negotiations and collective action by the scholarly communities as strategies for mitigating these issues, and notes that “There will be no long-term relief from price increases unless we collectively promote a transition towards a more open scholarly communication system, and invest in infrastructure and services that are more sustainable” (7). In addition, many INKE partners are developing open, community-led tools and infrastructures for open scholarship. For example, [https://www.coalition-publi.ca/ Coalition Publica], a partnership between INKE partners [https://www.erudit.org/en/ Érudit] and the [https://pkp.sfu.ca/ Public Knowledge Project (PKP)], is developing an open source, non-commercial, national-level infrastructure for digital scholarly communication that combines PKP’s [https://pkp.sfu.ca/ojs/ Open Journal Systems] software and Érudit’s open publishing platform. Other community members run community-led open access journals, such as ''Pop! Public. Open. Participatory.'', published by the Canadian Institute for Studies in Publishing at Simon Fraser University and led by INKE member John Maxwell, and [https://ideah.pubpub.org/ ''IDEAH: Interdisciplinary Digital Engagement in Arts & Humanities''], founded by Alyssa Arbuckle, Lindsey Seatter, and Ray Siemens and published by the [https://c-ski.ca/ Canadian Social Knowledge Institute] (C-SKI, INKE’s umbrella organization). ==Reactions from the Broader Academic Community== Market consolidation in scholarly communications is a recurring topic in venues such as [https://scholarlykitchen.sspnet.org/ ''The Scholarly Kitchen'']. Many of its pieces report on and analyze acquisitions. These include Wiley’s acquisition of [https://scholarlykitchen.sspnet.org/2021/10/04/wiley-acquires-editorial-services-group/ J&J Editorial] and [https://scholarlykitchen.sspnet.org/2021/01/11/wiley-acquires-hindawi-interview/ Hindawi] as well as [https://scholarlykitchen.sspnet.org/2021/05/18/clarivate-to-acquire-proquest/ Clarivate’s acquisition of ProQuest] and [https://scholarlykitchen.sspnet.org/2022/05/10/is-infrastructure-consolidation-the-next-step-ccc-acquires-ringgold/ Copyright Clearance Center’s acquisition of Ringgold]. It has also covered Elsevier’s acquisition of [https://scholarlykitchen.sspnet.org/2017/08/02/elsevier-acquires-bepress/ bepress], [https://scholarlykitchen.sspnet.org/2018/08/06/interpreting-elseviers-acquisition-aries-systems/ Aries Systems], and [https://scholarlykitchen.sspnet.org/2022/04/25/elsevier-acquire-interfolio/ Interfolio]. ''The Scholarly Kitchen'' authors have also analyzed [https://scholarlykitchen.sspnet.org/2021/08/03/guest-post-one-publisher-to-rule-them-all-consolidation-trends-in-the-scholarly-communications-and-research-sectors/ overall trends] in market consolidation and its potential effects, such as [https://scholarlykitchen.sspnet.org/2021/09/14/when-consolidation-provides-benefits/ its overall benefits] and [https://scholarlykitchen.sspnet.org/2021/12/14/market-consolidation-and-the-demise-of-the-independently-publishing-research-society/ its potential negative effects on scholarly society publishing]. Other pieces examine how the publishing industry is changing, looking at publishers’ transformations into [https://scholarlykitchen.sspnet.org/2022/06/09/revisiting-when-is-a-publisher-not-a-publisher-cobbling-together-the-pieces-to-build-a-workflow-business/ publishers’ transformations into “workflow businesses,”] [https://scholarlykitchen.sspnet.org/2021/12/09/new-clarivate-science/ market consolidation as a consequence of OA], and the possible resurgence of [https://scholarlykitchen.sspnet.org/2022/06/29/revisiting-return-of-the-big-brands-how-legacy-publishers-will-coopt-open-access/ legacy publishers]. In response to Wiley’s acquisition of Knowledge Unlatched, [https://copim.pubpub.org/ Community-led Open Publication Infrastructures for Monographs (COPIM)] released [https://copim.pubpub.org/pub/copim-statement-corporate-acquisition-oa-infra/release/1 a statement expressing concern about market consolidation] and, in particular, “increasing attempts to monetise and, potentially, monopolise the infrastructures of open knowledge dissemination” (COPIM 2021). The [https://sparcopen.org/ Scholarly Publishing and Academic Resources Coalition (SPARC)] has been a leading voice in the academic community against market consolidation. It has been analyzing trends in the scholarly communications marketplace over the last four years and developed a [https://infrastructure.sparcopen.org/ resource about the commercial acquisition of digital research infrastructures] in 2018 with updates in [https://infrastructure.sparcopen.org/2020-update 2020] and [https://infrastructure.sparcopen.org/media/posts/report-landscape-analysis-2021-update.pdf 2021]. SPARC also advocated against the planned merger between Cengage and McGraw-Hill in 2019, including filing a [https://sparcopen.org/news/2019/sparc-urges-department-of-justice-to-block-merger-between-cengage-and-mcgraw-hill/ letter] with the US Department of Justice arguing that the proposed merger would violate antitrust regulations. In response to Clarivate’s planned acquisition of ProQuest, SPARC submitted an [https://sparcopen.org/wp-content/uploads/2021/10/SPARC-FTC-Letter-in-Opposition-to-the-Clarivate-ProQuest-Merger.pdf antitrust brief] to the US Federal Trade Commission, as well as a [https://sparcopen.org/news/2021/sparc-statement-on-completion-of-clarivate-proquest-merger/ statement] in response to the completed merger. [https://investinopen.org/blog/take-action-to-stop-the-lock-up-of-research-and-learning/ Invest in Open] also voiced opposition to this merger, emphasizing the issue of surveillance capitalism and evoking the call for open infrastructures in [https://en.unesco.org/science-sustainable-future/open-science/recommendation UNESCO’s Recommendation on Open Science] (see “[[Foundational Observations: Open Scholarship Policy Observatory, 2017-2020/UNESCO's Recommendation on Open Science|UNESCO’s Recommendation on Open Science]]”). ==Market Consolidation and Open Scholarship== The shift from print to digital scholarly publishing that has enabled open access and open scholarship—and the digital infrastructures that make them possible—has also led to the collection and sale of researchers’ data (Chen et al., 2019; Larivière et al. 2015). As Lamdan points out, platform monopolies lead to ethical problems for librarians in particular, who must consider users’ research and access needs as well as data privacy concerns (2022). Some in the academic community see the trend toward platform monopolies and the commercialization of infrastructures as a consequence of the OA movement, as commercial publishers shift away from subscription-based business models toward platform services and analytics (Schonfeld 2022). The technical and pragmatic requirements of OA policies such as [https://www.coalition-s.org/ Plan S] can be seen as favouring larger, well-resourced publishers and pushing smaller publishers to join forces with larger ones or shut them out completely (Crotty 2021 “More”). The commercialization of the digital infrastructures that make open access possible is a key concern for the future of open scholarship (Joy 2019): as Geoffrey Bilder, Jennifer Lin, and Cameron Neylon state, “Everything we have gained by opening content and data will be under threat if we allow the enclosure of scholarly infrastructures” (2015). However, the effects of market consolidation extend beyond open scholarship to the research enterprise itself: in SPARC’s statement about the completion of the Elsevier and Interfolio merger, executive director Heather Joseph warned that “It should be of utmost national concern that the research enterprise is dominated by an increasingly small number of firms with extraordinary market power who control vast swaths of our digital infrastructure” (SPARC 2021 “SPARC Statement”). Conflict of interest is one such concern: fewer companies increasingly control the platforms and content undergirding the entire research process. This means that companies that publish journals control the data and metrics through which those journals are assessed. Some critics are concerned that a given company’s metric–calculated with proprietary methods and data–will privilege that publisher’s journals, but others such as Ellen Finnie at MIT Libraries note that, even if that is not the case, this type of market consolidation “creates a conflict of interest that is inherently problematic” (Straumsheim 2016). Moreover, researchers at institutions that subscribe to an FIS may make choices based on the sense of being surveilled, such as if they believe that submitting their work to a journal owned by the FIS’s parent company will positively affect their FIS profile more than publishing elsewhere, or that applying for a position at a different institution through the Dossier platform will affect their profile negatively (Chen et al. 2019; SPARC 2022, “Possible”). These discussions also point to larger questions about values related to scholarly communication (see Chen and Chan, 2021). Samuel Moore notes that market consolidation and publishing oligopolies “means that the values and practices of the larger publishers are hegemonic in their influence over what publishing should look like” (2021). Data collected from research platforms can also be used to determine what kinds of research should be funded, which shifts power away from the academic community, raises concerns about academic freedom, and further entrenches existing inequities (Aspesi, 2022; Chen et al. 2019; Lamdan et al. 2022; Sly and Koivisto 2023). The increasing consolidation of the scholarly communications industry and the rise of the “publication-as-data” model (Sly and Koivisto 2023) raises questions about the role of commercial publishers, who are increasingly also platform and service providers, in the open scholarship ecosystem as a whole. ==Works Cited== *Aspesi, Claudio, Knowledge Equity Lab and SPARC. Fall 2022. “The High Cost of Knowledge Monopoly.” ''Unsettling Knowledge Inequities''. [https://knowledgeequitylab.ca/podcast/s3-ep3/ https://knowledgeequitylab.ca/podcast/s3-ep3/]. *Biddle, Sam. 2021. “LexisNexis to Provide Giant Database of Personal Information to ICE.” ''The Intercept'', April 2, 2021. [https://theintercept.com/2021/04/02/ice-database-surveillance-lexisnexis/ https://theintercept.com/2021/04/02/ice-database-surveillance-lexisnexis/]. *Bilder, Geoffrey, Jennifer Lin, and Cameron Neylon. 2015. “Principles for Open Scholarly Infrastructures.” ''Science in the Open''. February 23, 2015. [http://dx.doi.org/10.6084/m9.figshare.1314859 http://dx.doi.org/10.6084/m9.figshare.1314859]. *Chen, George, Alejandro Posada, and Leslie Chan. 2019. “Vertical Integration in Academic Publishing: Implications for Knowledge Inequality.” In ''Connecting the Knowledge Commons: From Projects to Sustainable Infrastructure'', edited by Pierre Mounier and Leslie Chan. Laboratoire d’idées. OpenEdition Press. [http://books.openedition.org/oep/9068 http://books.openedition.org/oep/9068]. *Chen, George, and Leslie Chan. 2021. “University Rankings and Governance by Metrics and Algorithms.” In ''Research Handbook on University Rankings: Theory, Methodology, Influence and Impact'', edited by Ellen Hazelkorn and Georgiana Mihut. Edward Elgar. [https://doi.org/10.5281/zenodo.4730593 https://doi.org/10.5281/zenodo.4730593]. *COPIM (Community-led Open Publication Infrastructures for Monographs). 2021. “COPIM Statement on the Corporate Acquisition of OA Infrastructure.” COPIM. Community-led Open Publication Infrastructures for Monographs (COPIM). December 15, 2021. [https://copim.pubpub.org/pub/copim-statement-corporate-acquisition-oa-infra/release/1 https://copim.pubpub.org/pub/copim-statement-corporate-acquisition-oa-infra/release/1]. *Couture, Marc. 2017. “Academic Publishing at a Crossroads.” ''University Affairs'', July 12, 2017. [https://www.universityaffairs.ca/opinion/in-my-opinion/academic-publishing-crossroads/ https://www.universityaffairs.ca/opinion/in-my-opinion/academic-publishing-crossroads/]. *Crotty, David. 2021. “Market Consolidation and the Demise of the Independently Publishing Research Society.” ''The Scholarly Kitchen''. December 14, 2021. [https://scholarlykitchen.sspnet.org/2021/12/14/market-consolidation-and-the-demise-of-the-independently-publishing-research-society/ https://scholarlykitchen.sspnet.org/2021/12/14/market-consolidation-and-the-demise-of-the-independently-publishing-research-society/]. *Crotty, David. 2021. “More Unintended Consequences: How the Plan S Transformative Journal Route Favors Larger Incumbent Publishers.” ''The Scholarly Kitchen''. July 22, 2021. [https://scholarlykitchen.sspnet.org/2021/07/22/more-unexpected-consequences-how-the-plan-s-transformative-journal-route-favors-larger-incumbent-publishers/ https://scholarlykitchen.sspnet.org/2021/07/22/more-unexpected-consequences-how-the-plan-s-transformative-journal-route-favors-larger-incumbent-publishers/]. *Funk, McKenzie. 2019. “How ICE Picks Its Targets in the Surveillance Age.” ''The New York Times'', October 2, 2019. [https://www.nytimes.com/2019/10/02/magazine/ice-surveillance-deportation.html https://www.nytimes.com/2019/10/02/magazine/ice-surveillance-deportation.html]. *Gerakopoulou, Elli, Izabella Penier, and Joe Deville. 2021. “The Promise of Collaboration: Collective Funding Models and the Integration of Open Access Books into Libraries.” COPIM. [https://doi.org/10.5281/zenodo.4501512 https://doi.org/10.5281/zenodo.4501512]. *Joy, Eileen. 2019. “The Enclosure of Scholarly Infrastructures, Open Access Books & the Necessity of Community.” ''Punctum Books''. June 7, 2019. [https://punctumbooks.com/blog/the-enclosure-of-scholarly-infrastructures-open-access-books-the-necessity-of-community/ https://punctumbooks.com/blog/the-enclosure-of-scholarly-infrastructures-open-access-books-the-necessity-of-community/]. *de Knecht, Sicco. 2020. “Dutch Open Science Deal Primarily Benefits Elsevier.” ''ScienceGuide''. June 29, 2020. [https://www.scienceguide.nl/2020/06/open-science-deal-benefits-elsevier/ https://www.scienceguide.nl/2020/06/open-science-deal-benefits-elsevier/]. *Lamdan, Sarah, Knowledge Equity Lab and SPARC. Fall 2022. “Data Cartels and Surveillance Publishing.” ''Unsettling Knowledge Inequities''. [https://knowledgeequitylab.ca/podcast/s3-e2/ https://knowledgeequitylab.ca/podcast/s3-e2/]. *Lamdan, Sarah. 2022. ''Data Cartels: The Companies That Control and Monopolize Our Information''. Stanford University Press. [https://doi.org/10.1515/9781503633728 https://doi.org/10.1515/9781503633728]. *Larivière, Vincent, Stefanie Haustein, and Philippe Mongeon. 2015. “The Oligopoly of Academic Publishers in the Digital Era.” ''PLOS ONE'' 10 (6): e0127502. [https://doi.org/10.1371/journal.pone.0127502 https://doi.org/10.1371/journal.pone.0127502]. *Moore, Samuel. 2021. “All Publishers Great and Small.” ''Samuel Moore'' (blog). July 26, 2021. [https://www.samuelmoore.org/2021/07/26/all-publishers-great-and-small/ https://www.samuelmoore.org/2021/07/26/all-publishers-great-and-small/]. *Pollock, Dan. 2022. “News & Views: Publishers and Market Consolidation – Part 1 of 2.” ''Delta Think''. June 21, 2022. [https://deltathink.com/news-views-publishers-and-market-consolidation-part-1-of-2/ https://deltathink.com/news-views-publishers-and-market-consolidation-part-1-of-2/]. *Schonfeld, Roger C. 2022. “Revisiting: When Is a Publisher Not a Publisher?” ''The Scholarly Kitchen''. June 9, 2022. [https://scholarlykitchen.sspnet.org/2022/06/09/revisiting-when-is-a-publisher-not-a-publisher-cobbling-together-the-pieces-to-build-a-workflow-business/ https://scholarlykitchen.sspnet.org/2022/06/09/revisiting-when-is-a-publisher-not-a-publisher-cobbling-together-the-pieces-to-build-a-workflow-business/]. *Shearer, Kathleen. 2018. ''Responding to Unsustainable Journal Costs: A CARL Brief''. Canadian Association of Research Libraries. [http://www.carl-abrc.ca/wp-content/uploads/2018/02/CARL_Brief_Subscription_Costs_en.pdf http://www.carl-abrc.ca/wp-content/uploads/2018/02/CARL_Brief_Subscription_Costs_en.pdf]. *Shearer, Kathleen, Leslie Chan, Iryna Kuchma, and Pierre Mounier. 2020. “Fostering Bibliodiversity in Scholarly Communications: A Call for Action.” Zenodo. [https://doi.org/10.5281/zenodo.3752923 https://doi.org/10.5281/zenodo.3752923]. *Sly, Jordan, and Joseph Koivisto. 2023. “Publication and Data Surveillance in Academia.” ''Research Information'', Research Information Yearbook 2022–2023 (January). [https://www.researchinformation.info/feature/publication-and-data-surveillance-academia https://www.researchinformation.info/feature/publication-and-data-surveillance-academia]. *SPARC (Scholarly Publishing and Academic Resources Coalition). 2020. “Cengage/McGraw-Hill Merger Called Off.” May 4, 2020. [https://sparcopen.org/news/2020/cengage-mcgraw-hill-merger-called-off/ https://sparcopen.org/news/2020/cengage-mcgraw-hill-merger-called-off/]. *SPARC (Scholarly Publishing and Academic Resources Coalition). 2021. “Landscape Analysis and Roadmap for Action: 2021 Update.” [https://infrastructure.sparcopen.org/media/posts/report-landscape-analysis-2021-update.pdf https://infrastructure.sparcopen.org/media/posts/report-landscape-analysis-2021-update.pdf]. *SPARC (Scholarly Publishing and Academic Resources Coalition). 2021. “SPARC Statement on Completion of Clarivate-ProQuest Merger.” SPARC. December 2, 2021. [https://sparcopen.org/news/2021/sparc-statement-on-completion-of-clarivate-proquest-merger/ https://sparcopen.org/news/2021/sparc-statement-on-completion-of-clarivate-proquest-merger/]. *SPARC (Scholarly Publishing and Academic Resources Coalition). 2021. “Opposing the Merger Between Clarivate PLC and ProQuest LLC,” October 22, 2021. [https://sparcopen.org/wp-content/uploads/2021/10/SPARC-FTC-Letter-in-Opposition-to-the-Clarivate-ProQuest-Merger.pdf https://sparcopen.org/wp-content/uploads/2021/10/SPARC-FTC-Letter-in-Opposition-to-the-Clarivate-ProQuest-Merger.pdf]. *SPARC (Scholarly Publishing and Academic Resources Coalition). 2022. “The Interfolio Acquisition Highly Concentrates the Nascent Market for Faculty Information Systems.” In the ''Interfolio Acquisition'' Report. June 29, 2022. [https://infrastructure.sparcopen.org/interfolio-acquisition/fis-market-concentration https://infrastructure.sparcopen.org/interfolio-acquisition/fis-market-concentration]. *SPARC (Scholarly Publishing and Academic Resources Coalition). 2022. “Executive Summary.” In ''Interfolio Acquisition''. June 29, 2022. [https://infrastructure.sparcopen.org/interfolio-acquisition/executive-summary https://infrastructure.sparcopen.org/interfolio-acquisition/executive-summary]. *SPARC (Scholarly Publishing and Academic Resources Coalition). 2022. “Elsevier’s Dominance in the FIS Market Could Threaten Competition in Related Markets.” June 29, 2022. [https://infrastructure.sparcopen.org/interfolio-acquisition/related-markets https://infrastructure.sparcopen.org/interfolio-acquisition/related-markets]. *SPARC (Scholarly Publishing and Academic Resources Coalition). 2022. “Possible Negative Impacts From Elsevier’s Increased Market Power.” From the ''Interfolio Acquisition'' Report. June 29, 2022. [https://infrastructure.sparcopen.org/interfolio-acquisition/possible-negative-impacts https://infrastructure.sparcopen.org//interfolio-acquisition/possible-negative-impacts]. {{BookCat}} c0dinvymq1wp7cfblz0r0d1mlse7q87 Sewing Machine Shuttle Hook Timing Problems and Solutions/Problems caused by incorrect timing 0 475509 4672093 4508648 2026-09-24T09:10:01Z R. Henrik Nilsson 3395618 refrences > references 4672093 wikitext text/x-wiki == What Problems Occur Due to Incorrect Shuttle Hook Timing in a Sewing Machine == If the shuttle hook timing of the sewing machine is not correct, the shuttle hook does not operate at its proper timing, due to which it is unable to form a loop by joining the needle thread and the bobbin thread.<ref> https://www.youtube.com/watch?v=K_oyuZfynYs</ref> This results in problems such as the bobbin thread not coming up, loop not forming, stitches skipping, and sewing not happening at all. == References == {{BookCat}} qja36uopyrbervocp56gv1afwqsuwx7 User:Daniel Fredrick Thomas shoobridge 2 476624 4671969 4525878 2026-09-23T13:49:12Z Daniel Fredrick Thomas shoobridge 3498255 Blanked the page 4671969 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 4671973 4671969 2026-09-23T13:56:23Z NDG 3510220 Requesting deletion ([[:m:Special:MyLanguage/User:TenWhile6/XReport|XReport]] v3.1c) 4671973 wikitext text/x-wiki <noinclude>{{delete|1=Spam <small>[[:m:Special:MyLanguage/User:TenWhile6/XReport|XReport]]</small>}}</noinclude> avedqaxkqegdor7dwsqfsb82wwkjloo Cookbook:Cream Soda 102 479547 4672056 4601585 2026-09-24T08:20:05Z ~2026-51464-77 3626733 /* Notes, tips, and variations */ 4672056 wikitext text/x-wiki __NOTOC__ {{Recipe}} {{recipesummary | Category = Beverages | Servings = 3 | Time = 30 minutes | Rating = | Energy = 80 kcal/100 g | Difficulty = 1 }}'''Cream soda''' is popular in the United States, but is rare in other parts of the world. However, Americans do not consume cream soda as frequently as other sodas. This soda recipe originates from Flavorlab.<ref>{{Citation |last=Flavor Lab |title=Cream Soda |date=2020-08-30 |url=https://www.youtube.com/watch?v=NULMrMqeqp0 |access-date=2025-11-17}}</ref> ==Ingredients== * 1½ [[Cookbook:Teaspoon|tsp]] (7.5 [[Cookbook:Liter|ml]]) [[Cookbook:Vanilla|vanilla extract]] * ½ [[Cookbook:Cup|cup]] (120 ml) water * ½ cup (120 ml) [[Cookbook:Sugar|white sugar]] * [[Cookbook:Carbonated Water|Carbonated water]], as needed ==Procedure== # Combine the vanilla extract, water, and sugar in a pot. # [[Cookbook:Boiling|Boil]] the mixture until it reduces to about 5 [[Cookbook:Ounce|oz]] (150 ml) [[Cookbook:Syrup|syrup]]. # To make the finished soda, combine 1 volume of syrup with 5 volumes of carbonated water. == Notes, tips, and variations == * Use water from a carbonating machine or a brand of pure carbonated water such as Polar Original Sparkling Water, Great Value Seltzer Water, or Signature Select Seltzer Water. Brands of sparkling mineral water such as Perrier, San Pellegrino, or Mineragua are toning because the added minerals will add taste. Flavored sparkling water such as La Croix or Spindrift have preexisting fruit flavors that enliven the taste. [[Category:Recipes for soda pop]] [[Category:Recipes using carbonated water]] [[Category:Recipes using vanilla]] [[Category:Recipes using white sugar]] aowb09l3j3ad28k02p53npat3tz3kma 4672057 4672056 2026-09-24T08:22:40Z ~2026-51464-77 3626733 /* Procedure */ 4672057 wikitext text/x-wiki __NOTOC__ {{Recipe}} {{recipesummary | Category = Beverages | Servings = 3 | Time = 30 minutes | Rating = | Energy = 80 kcal/100 g | Difficulty = 1 }}'''Cream soda''' is popular in the United States, but is rare in other parts of the world. However, Americans do not consume cream soda as frequently as other sodas. This soda recipe originates from Flavorlab.<ref>{{Citation |last=Flavor Lab |title=Cream Soda |date=2020-08-30 |url=https://www.youtube.com/watch?v=NULMrMqeqp0 |access-date=2025-11-17}}</ref> ==Ingredients== * 1½ [[Cookbook:Teaspoon|tsp]] (7.5 [[Cookbook:Liter|ml]]) [[Cookbook:Vanilla|vanilla extract]] * ½ [[Cookbook:Cup|cup]] (120 ml) water * ½ cup (120 ml) [[Cookbook:Sugar|white sugar]] * [[Cookbook:Carbonated Water|Carbonated water]], as needed ==Procedure== # Combine the vanilla extract, water, and sugar in a pot. # [[Cookbook:Boiling|Boil]] the mixture until it reduces to about 5 [[Cookbook:Ounce|oz]] (150 ml) [[Cookbook:Syrup|syrup]]. # To make the finished soda, combine 1 volume of syrup with 5 volumes of carbonated water. Chill in refrigerator and serve on ice. == Notes, tips, and variations == * Use water from a carbonating machine or a brand of pure carbonated water such as Polar Original Sparkling Water, Great Value Seltzer Water, or Signature Select Seltzer Water. Brands of sparkling mineral water such as Perrier, San Pellegrino, or Mineragua are toning because the added minerals will add taste. Flavored sparkling water such as La Croix or Spindrift have preexisting fruit flavors that enliven the taste. [[Category:Recipes for soda pop]] [[Category:Recipes using carbonated water]] [[Category:Recipes using vanilla]] [[Category:Recipes using white sugar]] jqb3aq59f4dfbp4400726564tuon05e 4672082 4672057 2026-09-24T08:58:37Z TechVindicator 3626296 Undid revision [[Special:Diff/4672056|4672056]] by [[Special:Contributions/~2026-51464-77|~2026-51464-77]] ([[User talk:~2026-51464-77|discuss]]) 4672082 wikitext text/x-wiki __NOTOC__ {{Recipe}} {{recipesummary | Category = Beverages | Servings = 3 | Time = 30 minutes | Rating = | Energy = 80 kcal/100 g | Difficulty = 1 }}'''Cream soda''' is popular in the United States, but is rare in other parts of the world. However, Americans do not consume cream soda as frequently as other sodas. This soda recipe originates from Flavorlab.<ref>{{Citation |last=Flavor Lab |title=Cream Soda |date=2020-08-30 |url=https://www.youtube.com/watch?v=NULMrMqeqp0 |access-date=2025-11-17}}</ref> ==Ingredients== * 1½ [[Cookbook:Teaspoon|tsp]] (7.5 [[Cookbook:Liter|ml]]) [[Cookbook:Vanilla|vanilla extract]] * ½ [[Cookbook:Cup|cup]] (120 ml) water * ½ cup (120 ml) [[Cookbook:Sugar|white sugar]] * [[Cookbook:Carbonated Water|Carbonated water]], as needed ==Procedure== # Combine the vanilla extract, water, and sugar in a pot. # [[Cookbook:Boiling|Boil]] the mixture until it reduces to about 5 [[Cookbook:Ounce|oz]] (150 ml) [[Cookbook:Syrup|syrup]]. # To make the finished soda, combine 1 volume of syrup with 5 volumes of carbonated water. Chill in refrigerator and serve on ice. == Notes, tips, and variations == * Use water from a carbonating machine or a brand of pure carbonated water such as Polar Original Sparkling Water, Great Value Seltzer Water, or Signature Select Seltzer Water. Do not use a brand of mineral water such as Perrier, San Pellegrino, or Mineragua because the added minerals will ruin the taste. Avoid flavored sparkling water such as La Croix or Spindrift because the preexisting fruit flavors will ruin the taste. [[Category:Recipes for soda pop]] [[Category:Recipes using carbonated water]] [[Category:Recipes using vanilla]] [[Category:Recipes using white sugar]] a9f7y0sf9ndb8yl070qstcn2fn30uyn 4672083 4672082 2026-09-24T08:59:30Z TechVindicator 3626296 4672083 wikitext text/x-wiki __NOTOC__ {{Recipe}} {{recipesummary | Category = Beverages | Servings = 3 | Time = 30 minutes | Rating = | Energy = 80 kcal/100 g | Difficulty = 1 }}'''Cream soda''' is popular in the United States, but is rare in other parts of the world. However, Americans do not consume cream soda as frequently as other sodas. This soda recipe originates from Flavorlab.<ref>{{Citation |last=Flavor Lab |title=Cream Soda |date=2020-08-30 |url=https://www.youtube.com/watch?v=NULMrMqeqp0 |access-date=2025-11-17}}</ref> ==Ingredients== * 1½ [[Cookbook:Teaspoon|tsp]] (7.5 [[Cookbook:Liter|ml]]) [[Cookbook:Vanilla|vanilla extract]] * ½ [[Cookbook:Cup|cup]] (120 ml) water * ½ cup (120 ml) [[Cookbook:Sugar|white sugar]] * [[Cookbook:Carbonated Water|Carbonated water]], as needed ==Procedure== # Combine the vanilla extract, water, and sugar in a pot. # [[Cookbook:Boiling|Boil]] the mixture until it reduces to about 5 [[Cookbook:Ounce|oz]] (150 ml) [[Cookbook:Syrup|syrup]]. # To make the finished soda, combine 1 volume of syrup with 5 volumes of carbonated water. Chill in refrigerator and serve with ice. == Notes, tips, and variations == * Use water from a carbonating machine or a brand of pure carbonated water such as Polar Original Sparkling Water, Great Value Seltzer Water, or Signature Select Seltzer Water. Brands of sparkling mineral water such as Perrier, San Pellegrino, or Mineragua are toning because the added minerals will add taste. Flavored sparkling water such as La Croix or Spindrift have preexisting fruit flavors that enliven the taste. [[Category:Recipes for soda pop]] [[Category:Recipes using carbonated water]] [[Category:Recipes using vanilla]] [[Category:Recipes using white sugar]] gjwvo65npqf9r6vkutp678ervy7h4mi User:Dom walden/Multivariate Analytic Combinatorics/Homology of Critical Points 2 480750 4671978 4671651 2026-09-23T15:18:50Z Dom walden 3209423 /* Step 3 */ 4671978 wikitext text/x-wiki == Introduction == Morse theory tells us that the topology of M only changes at its critical points. The "Morse data" tells us the topology at each critical point. Attaching this Morse data together gives us a space which is homopotically eqivalent to M. This space is a "cell complex", which has an easy to calculate homology. Theorem: Our domain of convergence is homotopic to a cell complex of dimension at most <math display="inline">2n - d - 1</math>.<ref>This is theorem D.23 in Pemantle, Wilson and Melczer 2024, pp. 546. Also theorem in section 1.2*/5.2* in SMT pp. 200.</ref> Proof: # <math display="inline">X</math> is our entire domain, <math display="inline">\mathcal{V}</math> our variety # Project our entire domain to complex projective space <math display="inline">Z = \pi(X) \subset \C\mathbb{P}^n - H</math> [define H] # Define a linear subspace <math display="inline">G \subset \C\mathbb{P}^n</math> of dimension <math display="inline">d - 1</math> # Define a Morse function on <math display="inline">f: \C\mathbb{P}^n \to \R</math> which approximates the distance from <math display="inline">G</math> and such that <math display="inline">f^{-1}(0) = G</math> and <math display="inline">f^{-1}(1) = H</math> # We "build" <math display="inline">X - \mathcal{V}</math> from <math display="inline">\pi^{-1}(G \cap Z) \cap (X - \mathcal{V})</math> by attaching CW complexes at critical points which are of at most dimension <math display="inline">2n - d - 1</math> # At a critical point, the normal Morse data is <math display="inline">(J, K) = \coprod_x (J_x, K_x)</math> and the relative complex link is <math display="inline">\mathcal{L}^\pi = \coprod_x \mathcal{L}_x</math> # We show that the quotient <math display="inline">J_x/K_x</math> is homotopic to a CW complex of dimension <math display="inline">\leq 2n - d - 1</math> # The neighbourhood of <math display="inline">x</math> in <math display="inline">J_x</math> is homeomorphic to the cone in <math display="inline">L_x(X - \mathcal{V})</math>, and removing the point <math display="inline">x</math> increases the homotopy dimension to at most the homotopy dimension of <math display="inline">L_x</math> # <math display="inline">(J_x \cup \{x\}, K_x)</math> is homotopic to <math display="inline">(\text{cone}(\mathcal{L}_x), \mathcal{L}_x)</math> # <math display="inline">\mathcal{L}_x</math> is homotopic to a CW complex of dimension at most <math display="inline">2n - d - 1</math> # The tangential Morse data at the critical point is homotopic to the pair <math display="inline">(D^\lambda, \partial D^\lambda)</math> # Therefore, at each critical point a space has been added homotopic to a CW complex of dimension at most <math display="inline">2n - d - 1</math>. Theorem: If <math display="inline">X</math> is the complement in <math display="inline">\C^n</math> of a complex variety <math display="inline">\mathcal{V}</math> of dimension <math display="inline">d</math> then <math display="inline">X</math> is homotopic to a CW complex of dimension at most <math display="inline">2n - d - 1</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 546.</ref> Proof: # We build <math display="inline">X</math> by attaching cells of dimension at most <math display="inline">2n - d - 1</math> at each critical point. ## Prove that we can do this without changing the homotopy(?) ## We use Thom's Isotopy Lemma to prove that there is a strong deformation retraction, stopping only at critical points. # Prove these cells are a product of the normal and tangential Morse data. ## Normal data: <math display="inline">(\mathcal{L}(S), \partial \mathcal{L}(S)) \times (D^1, \partial D^1)</math> [GM pp. 18] ## Tangential data: <math display="inline">(B_\delta \cap f^{-1}[v - \epsilon, v + \epsilon], B_\delta \cap f^{-1}(v - \epsilon))</math> for <math display="inline">f</math> restricted to <math display="inline">X</math> (or <math display="inline">\mathcal{V}</math>?) [GM pp. 63-64] # If <math display="inline">k</math> is the dimension of the strata, then ## If <math display="inline">k = d</math> then it is a smooth point and the cell is the product of <math display="inline">S^{2(n-d)-1}</math> and the tangential data is dimension at most <math display="inline">d</math>. ## If <math display="inline">k < d</math>, ... <ref>Pemantle, Wilson and Melczer 2024, pp. 547.</ref> == Example in one dimension == Domain with singularities v_1, v_2, ..., v_i Define our height function f... Start with our entire domain X Reduce from X to X_i+ by using Thom's Isotopy lemma to do a strong deformation retract == Thom's isotopy lemma == We present a modified version of Thom's (first) isotopy lemma, less general than the original but more obviously relevant to our situation. Theorem: Suppose <math display="inline">Z</math> is a closed subset of a smooth manifold <math display="inline">M</math> which admits a Whitney stratification and <math display="inline">h : M \to \R</math> is a proper Morse function which has no critical values on <math display="inline">Z</math>. Then, the level sets of <math display="inline">Z</math> are homeomorphic by a homeomorphism that preserves the strata of <math display="inline">Z</math>.<ref>For various versions of the full statement of the theorem, see Mather 2012, pp. 499, Goresky and MacPherson 1988, pp. 41, or Pemantle, Wilson and Melczer 2024, pp. 541.</ref> Proof: # Construct control data for <math display="inline">Z</math> compatible with <math display="inline">h</math>. ## [Prop 7.1] If <math display="inline">h</math> is smooth on <math display="inline">Z</math> and is a submersion for each strata then there exists a family of control data for <math display="inline">Z</math> compatible with <math display="inline">h</math>.<ref>Mather 2012, pp. 488.</ref> # This makes <math display="inline">Z</math> an abstract stratified set and <math display="inline">f</math> a controlled submersion. # A controlled submersion has, for any smooth vector field on <math display="inline">\R</math>, a controlled vector field on <math display="inline">Z</math> (a "lift"?)<ref>Mather 2012, pp. 493.</ref> # A controlled vector field has a unique one-parameter family of homeomorphisms of <math display="inline">Z</math> which commute with <math display="inline">h</math>.<ref>Mather 2012, pp. 496.</ref> # This makes <math display="inline">h</math> a locally trivial fibration. [Prop 10.2]<ref>Mather 2012, pp. 499.</ref> Control data: A system of '''control data''' for <math display="inline">Z</math> consists of, for each stratum <math display="inline">X</math> of <math display="inline">Z</math>, * a '''tubular neighbourhood''' <math display="inline">T_X</math> of <math display="inline">X</math> * a '''tubular projection function''' <math display="inline">\pi_X: T_X \to X</math>, and * a '''tubular distance function''' <math display="inline">\rho_X: T_X \to \R</math> such that <math display="inline">\rho_X^{-1}(0) = X</math><ref>Goresky and MacPherson 1988, pp. 42.</ref> [illustration] such that if <math display="inline">X < Y</math> are strata in <math display="inline">Z</math>, then <math display="block">\pi_X \pi_Y(m) = \pi_X(m),</math> <math display="block">\rho_X \pi_Y(m) = \rho_X(m)</math> for all <math display="inline">m \in |T_X| \cap |T_Y|</math> such that <math display="inline">\pi_Y(m) \in |T_X|</math>. If, for all strata <math display="inline">X</math> and all <math display="inline">m \in |T_X|</math>, we have <math display="inline">h \pi_X(m) = h(m)</math>, then this control data will be said to be compatible with <math display="inline">h</math>.<ref>Mather 2012, pp. 488.</ref> We prove that if <math display="inline">h</math> is smooth on <math display="inline">Z</math> and is a submersion for each strata then there exists a family of control data for <math display="inline">Z</math> compatible with <math display="inline">h</math>.<ref>Mather 2012, pp. 488, prop 7.1.</ref> Let <math display="inline">Z_k</math> be the union of strata of <math display="inline">Z</math> of dimension less than <math display="inline">k</math>. We prove by induction on <math display="inline">k</math>. To construct the tubular neighbourhood <math display="inline">T_X</math> of a stratum <math display="inline">X</math> of dimension less than <math display="inline">k</math>. For <math display="inline">l \leq k</math>, let <math display="inline">U_l</math> denote the union of all <math display="inline">|T_Y|</math> for <math display="inline">Y < X</math> and <math display="inline">\dim Y \geq l</math>. Let <math display="inline">X_l = U_l \cap X</math>.<ref>Mather 2012, pp. 489.</ref> For <math display="inline">l = k</math>, <math display="inline">X_k = \empty</math>. Assume by induction that <math display="inline">T_{l+1}</math> has been constructed and that if <math display="inline">Y < X</math>, <math display="inline">\dim Y \geq l + 1</math>, <math display="inline">m \in |T_{l+1}| \cap |T_Y|</math> and <math display="inline">\pi_{l+1}(m) \in |T_Y|</math> (<math display="inline">\pi_{l+1} = \pi_{T_{l+1}}</math>) then<ref>Mather 2012, pp. 489-490.</ref> <math display="block">\rho_Y \pi_{l+1}(m) = \rho_Y(m),</math> <math display="block">\pi_Y \pi_{l+1}(m) = \pi_Y(m).</math> We wish to construct a tubular neighbourhood <math display="inline">T_{X,Y}</math> of <math display="inline">|T_Y| \cap X</math> whose restriction to <math display="inline">|T_Y| \cap X_{l+1}</math> is isomorphic to the restriction of <math display="inline">T_{l+1}</math> such that if <math display="inline">m \in |T_{X,Y}| \cap |T_Y|</math> and <math display="inline">\pi_{X,Y}(m) \in |T_Y|</math> (<math display="inline">\pi_{X,Y} = \pi_{T_{X,Y}}</math>) then <math display="block">\rho_Y \pi_{X,Y}(m) = \rho_Y(m),</math> <math display="block">\pi_Y \pi_{X,Y}(m) = \pi_Y(m).</math> By shrinking <math display="inline">|T_Y|</math> if necessary, this relation is already satisfied if <math display="inline">m \in |T_{l+1}| \cap |T_Y|</math> and <math display="inline">\pi_{l+1}(m) \in |T_Y|</math> with <math display="inline">T_{l+1}</math> in place of <math display="inline">T_{X,Y}</math> and <math display="inline">\pi_{l+1}</math> in place of <math display="inline">\pi_{X,Y}</math>. By the definition, if <math display="inline">m \in |T_{l+1}|</math> then there exists <math display="inline">Z < X</math> with <math display="inline">\dim Z > l</math>, <math display="inline">m \in |T_Z|</math> and <math display="inline">\pi_{l+1}(m) \in |T_Z|</math>. We have that <math display="inline">\pi_{l+1}(m) \in |T_Y| \cap |T_Z|</math> and therefore <math display="inline">Y < Z</math>. Therefore<ref>Mather 2012, pp. 490.</ref> <math display="block">\rho_Y \pi_{l+1}(m) = \rho_Y \pi_Z \pi_{l+1}(m) = \rho_Y \pi_Z(m) = \rho_Y(m),</math> <math display="block">\pi_Y \pi_{l+1}(m) = \pi_Y \pi_Z \pi_{l+1}(m) = \pi_Y \pi_Z(m) = \pi_Y(m).</math> We can prove that, by shrinking <math display="inline">|T_Y|</math>, <math display="inline">(\rho_Y, \pi_Y): |T_Y| \cap X \to \R \times Y</math> is a submersion [prop 7.3?] and that <math display="inline">T_{X,Y}</math> is compatible with <math display="inline">(\rho_Y, \pi_Y): |T_Y| \cap X_{l+1} \to \R \times Y</math>, i.e. <math display="inline">(\rho_Y, \pi_Y) \pi_{X,Y}(m) = (\rho_Y, \pi_Y)(m)</math>(?). To prove it is a submersion, for the tubular neighbourhood <math display="inline">T = (E, \epsilon, \psi)</math> there exists a smooth positive function <math display="inline">\epsilon'</math> such that <math display="block">(\rho_T, \pi_T): Y \cap |T|_{\epsilon'}^0 \to \R \times X,</math> where <math display="inline">|T|_{\epsilon'}^0 = \psi(B_\epsilon \cap B_{\epsilon'})</math>, is a submersion. If <math display="inline">\Sigma</math> is the set <math display="inline">y \in |T|</math> such that the rank of <math display="block">(\rho_T, \pi_T): T \cap |T| \to \R \times X</math> at <math display="inline">y</math> is less than <math display="inline">\dim(\R \times X)</math>. We need to prove that for any <math display="inline">x \in X</math> there exists a neighbourhood of <math display="inline">x</math> which does not intersect with <math display="inline">\Sigma</math>, i.e. the map is not a submersion in this neighbourhood. It follows from [lemma 7.2] that it is enough to prove for <math display="inline">M = \R^m</math>, <math display="inline">X = \R^{m-c} \times 0_c</math> and <math display="inline">T</math> is the '''standard tubular neighbourhood'''.<ref>Mather 2012, pp. 489.</ref> By standard tubular neighbourhood, we mean the trivial bundle with base <math display="inline">\R^{m-c}</math> and fibre <math display="inline">\R^c</math> where <math display="inline">\pi: \R^m \to \R^{m-c}</math>...<ref>Mather 2012, pp. 488.</ref> For <math display="inline">y \in |T| - \R^{m-c}</math>, the kernal of the differential of <math display="inline">(\pi_T, \rho_T)</math> at <math display="inline">y</math> is the orthogonal complement of <math display="inline">(\R^{m-c} \times 0_c) \oplus \stackrel{\frown}{y \pi_T(y)}</math> in <math display="inline">\R^m</math>. By the Whitney conditions, we have that for <math display="inline">y</math> near <math display="inline">\R^{m-c}</math>, <math display="inline">(\R^{m-c} \times 0_c) \oplus \stackrel{\frown}{y \pi_T(y)}</math> is close to the set of <math display="inline">m - c + 1</math> planes in <math display="inline">m-</math>space to an <math display="inline">m - c + 1</math> plane in <math display="inline">TY_y</math>. Therefore, for <math display="inline">y</math> near enough to <math display="inline">\R^{m-c}</math>, <math display="inline">TY_y</math> is transverse to the kernal of the differential of <math display="inline">(\pi_T, \rho_T)</math> and, therefore, is a submersion when restricted to <math display="inline">Y</math>.<ref>Mather 2012, pp. 489.</ref> To prove that <math display="inline">T_{X,Y}</math> is compatible with <math display="inline">(\rho_Y, \pi_Y): |T_Y| \cap X_{l+1} \to \R \times Y</math>...<ref>Mather 2012, pp. 490.</ref> Therefore, there exists a tubular neighbourhood <math display="inline">T_0</math> of <math display="inline">X_0</math> satisfying <math display="block">\rho_Y \pi_0(m) = \rho_Y(m),</math> <math display="block">\pi_Y \pi_0(m) = \pi_Y(m).</math> From this we can prove that <math display="inline">T_0</math> is compatible with <math display="inline">h</math>. Replacing <math display="inline">T_0</math> with a smaller tubular neighbourhood if necessary we can assume <math display="inline">m \in |T_0|</math> such that for some <math display="inline">Y < X</math>, <math display="inline">m \in |T_Y|</math> and <math display="inline">\pi_0(m) \in |T_Y|</math>, then<ref>Mather 2012, pp. 490.</ref> <math display="block">h \pi_0(m) = h \pi_Y \pi_0(m) = h \pi_Y(m) = h(m).</math> By the generalised tubular neighourhood theorem [prop 7.2?], we can replace <math display="inline">T_0</math> with a tubular neighbourhood <math display="inline">T</math> of <math display="inline">X</math> compatible with <math display="inline">h</math>. This completes the construction of <math display="inline">T_X</math>.<ref>Mather 2012, pp. 491.</ref> This makes <math display="inline">Z</math> an '''abstract stratified set''' with axioms...<ref>Mather 2012, pp. 491-492.</ref> This also makes <math display="inline">h</math> a '''controlled submersion''' because # <math display="inline">h|X: X \to \R</math> is a smooth submersion on each strata <math display="inline">X</math> of <math display="inline">Z</math>, and # for each stratum <math display="inline">X</math> there is a tubular neighbourhood <math display="inline">T'_X</math> such that <math display="inline">h(v) = h \pi_X(v)</math> for all <math display="inline">v \in T'_X</math>.<ref>Mather 2012, pp. 493.</ref> The core of this is the concept of a '''vector field'''. A vector field is a function which assigns, for each point <math display="inline">p</math> in a space, a '''vector''', which can be represented by an arrow whose tail starts at <math display="inline">p</math>.<ref>Henle 1979, pp. 33.</ref> [picture] Imagine we have a vector field <math display="inline">v(x)</math> defined in a space and draw a line through our space. At each point along this line the vector field assigns a vector. If we move each point in this line along the arrow defined by this vector in the direction of the arrow head. This "flows" the entire line along the vectors. [picture] We define a '''stratified vector field''' <math display="inline">\eta</math> on <math display="inline">Z</math> to be a family of smooth vector fields <math display="inline">\eta_X</math>, one for each strata <math display="inline">X</math> of <math display="inline">Z</math>.<ref>Mather 2012, pp. 493.</ref> We define a '''controlled vector field''' <math display="inline">\eta</math> on <math display="inline">Z</math> to be a stratified vector field such that for any strata <math display="inline">Y</math> there exists a tubular neighbourhood <math display="inline">T'_Y</math> such that for any <math display="inline">X > Y</math> and any <math display="inline">v \in T'_X \cap X</math><ref>Mather 2012, pp. 493.</ref> <math display="block">\eta_X \rho_{Y,X}(v) = 0,</math> <math display="block">(\pi_{Y,X})_* \eta_X(v) = \eta_Y (\pi_{Y,X}(v)).</math> We prove that if <math display="inline">h</math> is a controlled submersion then, for any smooth vector field <math display="inline">\zeta</math> on <math display="inline">\R</math> there is a controlled vector field <math display="inline">\eta</math> on <math display="inline">Z</math> such that <math display="inline">h_* \eta(v) = \zeta(h(v))</math> for all <math display="inline">v \in Z</math>.<ref>Mather 2012, pp. 493.</ref> Proceeding by induction on the maximum dimension of the strata of <math display="inline">Z</math>, we define <math display="inline">Z_k</math> to be the union of strata of <math display="inline">Z</math> of dimension at most <math display="inline">k</math>. The tubular neighbourhood of <math display="inline">Z_k</math> is the intersection of the tubular neighbourhoods of each strata in <math display="inline">Z_k</math> with <math display="inline">Z</math>. The projection and distance functions are the restrictions of the respective functions of <math display="inline">Z</math>. It is trivially true when the maximum dimension of strata in <math display="inline">Z</math> is zero. Assume it is true for <math display="inline">k</math> and construct each <math display="inline">\eta_X</math> separately for each stratum <math display="inline">X</math> of dimension <math display="inline">k + 1</math>. By the assumption that we have controlled vector fields for all strata <math display="inline">Y</math> of dimension at most <math display="inline">k</math>, we have the two control conditions defined above for any <math display="inline">X > Y</math> and that there is a neighbourhood <math display="inline">T^1_Y</math> such that <math display="inline">h(v) = h \pi_Y(v)</math> for <math display="inline">v \in T^1_Y</math>. We want to prove that for all <math display="inline">Y < X</math>, the control conditions are satisfied for all <math display="inline">v \in T^2_Y</math> and that <math display="inline">h_*\eta_X(v) = \zeta(v)</math> for all <math display="inline">v \in X</math>. Take a point <math display="inline">x \in X</math> and define the set <math display="inline">S_v</math> of strata <math display="inline">Y < X</math> such that <math display="inline">v \in T^2_Y</math>. <math display="inline">S_v</math> is totally ordered since if <math display="inline">Y_1</math> and <math display="inline">Y_2</math> are not comparable then <math display="inline">T^2_{Y_1} \cap T^2_{Y_2} = \empty</math>. Therefore, there is a largest member <math display="inline">Y = Y_v</math>. Assume the control conditions hold for <math display="inline">Y = Y_v</math>. Then they hold for all <math display="inline">Y_i \in S_v</math>. For, either <math display="inline">Y_i = Y</math> or <math display="inline">Y_i < Y</math>. In the latter case, <math display="inline">\pi_Y(v) \in T^1_{Y_i}</math> (by the choice of <math display="inline">T^2_Y</math>'s [is this why?]. Then <math display="block">\begin{align} \eta_X(v) \rho_{Y_i,X}(v) &= \eta_X \rho_{Y_i,Y} \pi_{Y,X}(v) \\ &= (\pi_{Y,X})_* \eta_X(v) \rho_{Y_i,Y} \\ &= \eta_Y(\pi_{Y,X}(v)) \rho_{Y_i,Y} \\ &= 0 \end{align}</math> and <math display="block">\begin{align} (\pi_{Y_i,X})_* \eta_X(v) &= (\pi_{Y_i,Y})_* (\pi_{Y,X})_* \eta_X(v) \\ &= (\pi_{Y_i,Y})_* \eta_Y(v) (\pi_{Y,X}) \\ &= \eta_{Y_i}(\pi_{Y_i,Y} \pi_{Y,X}(v)) \\ &= \eta_{Y_i}(\pi_{Y_i,X}(v)) \end{align}</math> and, therefore, condition holds for all <math display="inline">Y_i \in S_v</math>. Also, <math display="block">\begin{align} h_* \eta_X(v) &= (h \circ \pi_{Y,X})_* \eta_X(v) \\ &= h_* \eta_Y (\pi_{Y,X}(v)) \\ &= \zeta(f(v)) \end{align}</math> and, therefore, the conclusion of the theorem holds at <math display="inline">v</math>. This shows we can construct <math display="inline">\eta_X</math> satisfying the control conditions when <math display="inline">S_v</math> is non-empty and satisfying the theorem when <math display="inline">S_v</math> is empty. The set of vectors satisfying these conditions is convex in <math display="inline">TX_v</math>, and so we construct <math display="inline">\eta_X</math> globally via a partition of unity.<ref>Mather 2012, pp. 493-495.</ref> Finally, we prove that a controlled vector field has a unique one-parameter family of homeomorphisms of <math display="inline">Z</math> which commute with <math display="inline">h</math>.<ref>Mather 2012, this combines Proposition 10.1 and Corollary 10.2 on pp. 496 and 497, respectively.</ref> For each stratum <math display="inline">X</math> of <math display="inline">Z</math>, <math display="inline">\eta_X</math> generates a unique smooth local one-parameter group <math display="inline">(J_X, \alpha_X)</math> of diffeomorphisms of <math display="inline">X</math> (by standard results of differential geometry), such that <math display="inline">\frac{d}{dt} \alpha(t, v)|_{t=0} = \eta_X(v)</math>, <math display="inline">J_X</math> is an open subset of <math display="inline">\R \times Z</math>, ... If we define <math display="inline">(J, \alpha)</math> by <math display="block">J = \bigcup_{X \in S} J_X</math> <math display="block">\alpha = \bigcup_{X \in S} \alpha_X</math> we can prove that this is a local one-parameter family of homeomorphisms.<ref>Mather 2012, pp. 496.</ref> Firstly, it is clear that # <math display="inline">0 \times Z \subseteq J</math> and <math display="inline">\alpha(0, v) = v</math> for all <math display="inline">v \in Z</math>. # If <math display="inline">v \in Z</math> then <math display="inline">J_v = J \cap (\R \times v) \subseteq \R</math> is an open interval <math display="inline">(a_v, b_v)</math>, possibly infinite at one or both ends. # If <math display="inline">v \in Z</math> and <math display="inline">t, s, t + s</math> are in <math display="inline">(a_v, b_v)</math> then <math display="inline">\alpha(t + s, v) = \alpha(t, \alpha(s, v))</math>.<ref>Mather 2012, pp. 495.</ref> Secondly, it is clear that <math display="inline">\eta</math> generates <math display="inline">\alpha</math> because # Each stratum <math display="inline">X</math> of <math display="inline">Z</math> is invariant under <math display="inline">\alpha</math>, i.e. <math display="inline">\alpha[J \cap (\R \times X)] \subseteq X</math>. # For each <math display="inline">v \in Z</math>, the map <math display="inline">t \to \alpha(t, v)</math> of <math display="inline">(a_v, b_v)</math> into the stratum which contains <math display="inline">v</math> is <math display="inline">C^1</math>. # For any <math display="inline">(t, v) \in Z</math>(?) we have <math display="inline">d/dt \alpha(t, v) = \eta(\alpha(t, v))</math>.<ref>Mather 2012, pp. 495.</ref> It is unique because each <math display="inline">(J_X, \alpha_X)</math> is unique. We just need to prove that <math display="inline">J</math> is open, <math display="inline">\alpha</math> is continuous, and for any <math display="inline">v \in Z</math> and any compact set <math display="inline">K \subseteq Z</math> there exists <math display="inline">\epsilon > 0</math> such that <math display="inline">\alpha(t, v) \notin K</math> if <math display="inline">t \in (a_v, a_v + \epsilon) \cup (b_v - \epsilon, b_v)</math>.<ref>Mather 2012, pp. 495.</ref> For the latter-most condition, if it did not hold then there exists...<ref>Mather 2012, pp. 496-497.</ref> We prove there is a homeomorphism <math display="inline">f: Z \to h^{-1}(0) \times \R</math> such that <math display="inline">\pi \circ f = h</math>, where <math display="inline">\pi: h^{-1}(0) \times \R \to \R</math> is projection to the second factor. For the coordinate vector field <math display="inline">\partial</math> on <math display="inline">\R</math>, by [prop 9.1] there is a controlled vector field <math display="inline">\tilde\partial</math> such that <math display="inline">f_* \tilde\partial(v) = \partial(h(v))</math> for <math display="inline">v \in Z</math>. By [prop 10.1], <math display="inline">\tilde\partial</math> generates a local one-parameter group <math display="inline">(J, \alpha)</math> such that <math display="block">h(\alpha(t,v)) = h(v) + t</math> <math display="inline">h</math> is proper and [d] holds, so <math display="inline">J = \R \times Z</math>. If we define <math display="inline">f</math> as <math display="block">f(v) = (\alpha(-t, v), h(v))</math> then <math display="inline">f</math> maps <math display="inline">Z</math> into <math display="inline">h^{-1}(0) \times \R</math> and <math display="inline">\pi \circ f = h</math>. If we define <math display="inline">\bar f: h^{-1}(0) \times \R \to Z</math> as <math display="block">\bar f(v, t) = \alpha(t, v)</math> then <math display="inline">f \bar f = \bar f f = Id</math> and <math display="inline">f</math> is a homeomorphism.<ref>Mather 2012, pp. 497.</ref> == Topology at critical points == Theorem: If there is a critical point <math display="inline">p</math> in the singular variety <math display="inline">\mathcal{V}</math> with critical value <math display="inline">v \in (a, b)</math> then the space <math display="inline">X_{\leq b}</math> is homotopic to<ref>Goresky and MacPherson 1988, pp. 174.</ref> <math display="block">X_{\leq a} \cup [(D^{\lambda+1}, \partial D^{\lambda+1}) \times (\mathcal{L}_X, \partial \mathcal{L}_X)].</math> Proof:<ref>Proof outline comes from Goresky and MacPherson 1988, pp. 174.</ref> # <math display="inline">(X_{\leq b}, X_{\leq a})</math> is homeomorphic to <math display="inline">(X_{\leq v + \epsilon}, X_{\leq v -\epsilon})</math>. We can prove this by "moving wall" or Thom's Isotopy Lemma.<ref>Goresky and MacPherson 1988, pp. 90-91, 120.</ref> # <math display="inline">X_{\leq v + \epsilon}</math> is homeomorphic to <math display="inline">X_{\leq v - \epsilon} \cup (J, K)</math>, where the latter is the local Morse data for <math display="inline">h</math> at <math display="inline">p</math>. We do this by moving the wall...<ref>Goresky and MacPherson 1988, pp. 95-96, 120-121.</ref> # <math display="inline">(J, K)</math> is homeomorphic to <math display="inline">(D^{\lambda+1}, \partial D^{\lambda+1}) \times (\mathcal{L}_X, \partial \mathcal{L}_X)</math> (tangential data, normal data). Again, moving the wall...<ref>Goresky and MacPherson 1988, pp. 65-66, chapter 8, 121.</ref> # The normal Morse data depends only on the differential <math display="inline">df(p)</math>.<ref>Goresky and MacPherson 1988, pp. 93.</ref> # The normal Morse data has the homotopy type of <math display="inline">(\mathcal{L}_X, \partial \mathcal{L}_X)</math>.<ref>Goresky and MacPherson 1988, pp. 169.</ref> === Step 1 === We get this immediately(?) by Thom's Isotopy Lemma. === Step 2 === <ref>Goresky and MacPherson 1988, complex case on pp. 120-121 is extension of real case on pp. 95-96.</ref> We take our space <math display="inline">M</math> and map it onto <math display="inline">\R^2</math> with the map <math display="inline">F(z) = (r(z), h(z))</math>, where <math display="inline">z \in M</math> and <math display="inline">r</math> is the square of the distance of <math display="inline">z</math> to the critical point <math display="inline">p</math>. [graph of mapping] What we want is a homeomorphism in <math display="inline">M</math> between the space <math display="inline">Z_{\leq \epsilon}</math> and <math display="inline">Z_{\leq \epsilon} \cup B</math>, where <math display="inline">B</math> is a small region of the critical point <math display="inline">p</math>. The '''local Morse data''' is <math display="block">((B_\delta \cap Z) \cap f^{-1}[v-\epsilon, v+\epsilon], (B_\delta \cap Z) \cap f^{-1}(v-\epsilon))</math> where <math display="inline">B_\delta</math> is a closed disc in <math display="inline">M</math> of radius <math display="inline">\delta</math>.<ref>Goresky and MacPherson 1988, pp. 63-64.</ref> Observe that this is the pair <math display="inline">(F^{-1}(\text{Box}(\delta, \epsilon)), F^{-1}(\text{Bottom}(\delta, \epsilon)))</math><ref>Goresky and MacPherson 1988, pp. 91.</ref> [explain Box, Bottom, etc.] [picture of the two subspaces of Z in M] We use our map <math display="inline">F</math> to convert these two subspaces to subspaces of <math display="inline">\R^2</math> which are of the form <math display="inline">Y_1 = \{(x,y) \in \R^2 | y \leq \epsilon\}</math> and <math display="inline">Y_0 = \{(x,y) \in \R^2 | y \leq -\epsilon\} \cup \{(x,y) \in \R^2 | x \leq \delta, y \leq \epsilon\}</math>, such that <math display="inline">Z_{\leq \epsilon} = F^{-1}(Y_1)</math> and <math display="inline">Z_{\leq \epsilon} \cup B = F^{-1}(Y_0)</math>.<ref>Goresky and MacPherson 1988, pp. 95-96.</ref> We use a homeomorphism between <math display="inline">Y_1</math> and <math display="inline">Y_0</math> using the technique of "moving the wall" and Thom's Isotopy Lemma.<ref>Goresky and MacPherson 1988, chapter 4, particularly pp. 71-72.</ref> For the composition <math display="block">Z \times \R \subset M \times \R \to_{F \times I} Y \subset \R^2 \times \R \to_{\pi} \R</math> where <math display="inline">Y(t, z) = Y_t(z)</math>, <math display="inline">I</math> is the identity and <math display="inline">\pi</math> is projection to the second factor. <math display="inline">Z \times \R</math> is transverse to <math display="inline">(F \times I)^{-1}(Y)</math>... The composition <math display="inline">\pi \circ (F \times I): Z \times \R \cap (F \times I)^{-1}(Y) \to \R</math> is a stratified submersion... Therefore, we can apply Thom's Isotopy Lemma which says there is a homeomorphism between the level sets of <math display="inline">Z \times \R</math>...<ref>Goresky and MacPherson 1988, pp. 72.</ref> === Step 3 === We prove there is a stratum preserving homeomorphism between<ref>Goresky and MacPherson 1988, pp. 65.</ref> <math display="block">\text{Local Morse Data} \cong (\text{Tangential Morse Data}) \times (\text{Normal Morse Data})</math> We first prove that there is a homeomorphism between the product of the normal and tangential Morse data and the '''realisation''' of the following diagram<ref>Goresky and MacPherson 1988, pp. 100-102.</ref> [diagram from pp. 102] where realisation means <math display="block">Z \cap (g_1, h_1)^{-1}(P_a) \cap (g_2, h_2)^{-1}(P_b).</math> The realisation of the above diagram is equal to <math display="block">(V_1, V_2) \cap (W_1, W_2) = (V_1 \cap W_1, V_1 \cap W_2 \cup V_2 \cap W_1)</math> where <math display="block">V_1 = \{ z \in Z : |f(z) - f\pi(z)| \leq \epsilon/4, r\pi(z) \leq \delta, \rho(z) \leq \delta \}</math> <math display="block">V_2 = \{ z \in Z : f(z) - f\pi(z) = -\epsilon/4, r\pi(z) \leq \delta, \rho(z) \leq \delta \}</math> <math display="block">W_1 = \{ z \in Z : |f\pi(z)| \leq 3\epsilon/4, r\pi(z) \leq \delta \}</math> <math display="block">W_1 = \{ z \in Z : f\pi(z) = -3\epsilon/4, r\pi(z) \leq \delta \}</math> where <math display="inline">\pi</math> is the projection from the tubular neighbourhood to <math display="inline">Z</math>, <math display="inline">r(z)</math> is the square of the distance between <math display="inline">z</math> and the critical point <math display="inline">p</math> and <math display="inline">\rho(z)</math> is the square of the distance between <math display="inline">z</math> and <math display="inline">\pi(z)</math>.<ref>Goresky and MacPherson 1988, pp. 100-101.</ref> We use a succession of such diagrams to interpolate between the box diagram which defines local Morse data and the above diagram which defines normal times tangential...<ref>Goresky and MacPherson 1988, pp. 103.</ref> == Morse theory == Steps(?) * Explain topology * Every point of a stratum is locally like a product structure (proved by Thom's Isotopy Lemma) [GM pp. 41-42] ** Including those around critical points, which are the product of normal and tangential Morse data (these are our quasi-local cycles?) * Thom's Isotopy Lemma proves a strong deformation retraction (which only stops at critical points) [PWM pp. 541-542] === Homotopy === We want to replace our domain of convergence <math display="inline">M</math>, which is the complement of our singular variety <math display="inline">\mathcal{V}</math>, with an "equivalent" space <math display="inline">M'</math> which has better understood properties. We say "equivalent" because there are several different things we could mean by "equivalent" in this context. The equivalence we are referring to in this section is called '''homotopy'''. Imagine two subspaces <math display="inline">\gamma_0</math> and <math display="inline">\gamma_1</math> of a space <math display="inline">Y</math> which are defined respectively by smooth functions <math display="inline">f, g: X \to Y</math>. If there exists a smooth function <math display="inline">h_s: X \times [0, 1] \to Y</math>, called a homotopy, such that <math display="inline">h_0 = f</math>, <math display="inline">h_1 = g</math> and for any <math display="inline">\epsilon > 0</math> there exists a <math display="inline">\delta_a</math> and <math display="inline">\delta_b</math> such that when <math display="inline">|s - s_0| < \delta_a</math> and <math display="inline">|x - x_0| < \delta_b</math> we have <math display="inline">|h_s(x) - h_{s_0}(x_0)| < \epsilon</math>, then we say <math display="inline">\gamma_0</math> and <math display="inline">\gamma_1</math> are '''homotopic'''.<ref>Henle 1979, pp. 251-252.</ref> Below is an example where <math display="inline">\gamma_0</math> and <math display="inline">\gamma_1</math> are one-dimensional curves and <math display="inline">H(t, s) = h_s(t)</math>. [[File:Homotopy_curves.png|300px]] In [[#Homotopy_equivalence|Appendix A]], we formally prove that we can construct an equivalent space <math display="inline">M'</math>. We provide only an example to give some intuition before describing how to construct the space <math display="inline">M'</math> in terms of local cycles around critical points. === Motivating example === Imagine a torus and a height function which is just the z value of the point. [[File:3D-Leveltorus.png|200px]] It has four critical points: two at the top and bottom of the outer circle (<math display="inline">p_1, p_4</math>) and two at the top and bottom of the inner circle (<math display="inline">p_2, p_3</math>). [picture] When the height is between the <math display="inline">p_1</math> and <math display="inline">p_2</math>, the space is a two-cell, which can be retracted to a point. [picture] When the height is between <math display="inline">p_2</math> and <math display="inline">p_3</math>, the space is a cylinder, which can be retracted to a two-cell with a one-cell attached. [[File:3D-Cylinder_and_disk_with_handle.png|200px]] When the height is between <math display="inline">p_3</math> and <math display="inline">p_4</math>, the space is a torus with a disc removed, which can be retracted to a cylinder with a one-cell attached. [[File:3D-Cylinder_with_handle_and_torus_with_hole.png|200px]] When the height is greater than <math display="inline">p_4</math>, then the full torus is constructed by attaching a two-cell. [Explain in terms of Morse data and Morse index?] === Morse data and quasi-local cycles === As in the above example, we start at the "bottom" of <math display="inline">M</math> and build upwards until just before we reach our first critical point <math display="inline">p</math>. ;Smooth points :This is a tube around a <math display="inline">(d-1)</math>-chain <math display="inline">\gamma</math> where the height function <math display="inline">h</math> is maximised at <math display="inline">p</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 223.</ref> :For example, if <math display="inline">F(x, y) = \frac{1}{1 - x - y}</math> then <math display="inline">\lambda = 1</math> and <math display="inline">B^\lambda</math> is an arc reaching its highest point at <math display="inline">p</math>. :The normal plane <math display="inline">N</math> at <math display="inline">p</math> is a plane orthogonal to <math display="inline">B^1</math>(?). :Its normal link <math display="inline">L(S)</math> is a circle with two points missing where it intersects <math display="inline">\mathcal{V}</math>. :We make our quasi-local cycle out of the product of the arc and circle joined to <math display="inline">M_-</math> at points below <math display="inline">M_-</math>. :With the exception of degenerate points, such as monkey saddles...<ref>e.g. Pemantle, Wilson and Melczer 2024, pp. 211.</ref> ;Transverse multiple points :This is the product of a <math display="inline">k</math>-torus and a <math display="inline">(d-k)</math>-chain <math display="inline">\gamma</math>. The torus is the product of circles about <math display="inline">p</math> in the complex normal space to each strata which intersects <math display="inline">p</math>. The chain <math display="inline">\gamma</math> is supported in the stratum which is the common intersection of the varieties defined by the factors vanishing at <math display="inline">p</math>, and achieves its maximum height at <math display="inline">p</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 223-224.</ref> ;Arrangement multiple point :This is the product of a <math display="inline">(d-k)</math>-chain <math display="inline">\gamma</math> and several <math display="inline">k</math>-tori, one for each pair of sheets which intersect transversely, where the torus is the product of circles about <math display="inline">p</math> in each sheet.<ref>Pemantle, Wilson and Melczer 2024, pp. 226.</ref> ;Cone point :A cone point is zero-dimensional so there is no <math display="inline">\gamma</math>, just a <math display="inline">d</math>-torus about <math display="inline">p</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 227.</ref> == Appendix == === Homotopy equivalence === [Assuming no CVAI...] Theorem: # Homotopy equivalence between M_{\leq a} and M_{\leq b}... # If in a range <math display="inline">[a, b]</math> there are no CVAI and only one critical value <math display="inline">c</math>, not equal to either <math display="inline">a</math> or <math display="inline">b</math>, with one or more critical points <math display="inline">z_1, \cdots, z_m</math> then there is a stratified flow deforming any chain in <math display="inline">M</math> to a (homotopic?) chain in the union of <math display="inline">M_{<c}</math> with sufficiently small balls around each critical point. This induces a homotopy between <math display="inline">(M_{c+\epsilon}, M_{c-\epsilon})</math> and the direct sum of <math display="inline">(M_{c-\epsilon} \cup B_{2\epsilon}(z_i), M_{c-\epsilon})</math> for each critical point <math display="inline">z_i</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 231.</ref> The core of this is the concept of a '''vector field'''. A vector field is a function which assigns, for each point <math display="inline">p</math> in a space, a '''vector''', which can be represented by an arrow whose tail starts at <math display="inline">p</math>.<ref>Henle 1979, pp. 33.</ref> [picture] Imagine we have a vector field <math display="inline">v(x)</math> defined in a space and draw a line through our space. At each point along this line the vector field assigns a vector. If we move each point in this line along the arrow defined by this vector in the direction of the arrow head. This "flows" the entire line along the vectors. We can (potentially) define a function to implement this flow. Define <math display="inline">\Phi(x, t)</math> where <math display="inline">x</math> are points in the space and <math display="inline">t</math> is something like time. As <math display="inline">t</math> goes from zero to some positive number, <math display="inline">\Phi</math> moves the points <math display="inline">x</math> along the vectors. To describe this process formally, we say <math display="inline">\Phi</math> is the solution to the differential equation <math display="block">\frac{d}{dt} \Phi(x, t) = v(x).</math> We want a particular vector field <math display="inline">v</math> with certain properties... The proof of the existence of this vector field is long and complicated and we will not go into it here.<ref>It involves concepts such as Thom's isotopy lemma and Mather's controlled vector flows. See Mather 2012.</ref> Using this vector field <math display="inline">v</math> but modified so as to be zero on <math display="inline">M_{\leq a}</math>. This vector field defines a function <math display="inline">\Phi(x, t)</math> such that * <math display="inline">d/dt \Phi(x, t) = v(x)</math> when <math display="inline">h(x) \in (a, b]</math>. * <math display="inline">\Phi(x, t)</math> is defined for <math display="inline">0 \leq t \leq h(x) - a</math> and in this range <math display="inline">h(\Phi(x, t)) = h(x) - t</math>. * the map <math display="inline">\psi(x) = \Phi(x, b - a)</math> is a continuous map on <math display="inline">M_{\leq b}</math> with range (image?) <math display="inline">M_{\leq a}</math> and fixing <math display="inline">M_{\leq a}</math>. The function <math display="inline">\Phi(x, 0)</math> is the identity on <math display="inline">M_{\leq b}</math> and <math display="inline">\Phi(x, b - a) = \psi(x)</math>, therefore <math display="inline">\Phi</math> in the range <math display="inline">[0, b - a]</math> is a homotopy between the identity on <math display="inline">M_{\leq b}</math> and <math display="inline">\psi</math>. This implies 1)???<ref>Pemantle, Wilson and Melczer 2024, pp. 233.</ref> Define the distance from a critical point <math display="inline">\kappa(x) = \min\{ |x - z_i| : z_1, \cdots, z_m \}</math>. For <math display="inline">s > 0 </math> we define a new vector field <math display="block">v_s(x) = \begin{cases} v(x) & \kappa(x) \geq s \\ \rho(\kappa(x)) v(x) & \kappa(x) \in [s/2, s] \\ 0 & \kappa(x) \leq s/2 \end{cases}</math> for a smooth non-decreasing function <math display="inline">\rho</math> where <math display="inline">\rho(s/2) = 0</math>. Define <math display="inline">\Phi_s</math> as the function such that <math display="inline">d/dt \Phi(x, t)_s = v_s(x)</math>. The height function <math display="inline">h</math> is non-increasing along <math display="inline">\Phi_s</math> (by implication of bullet point 2?) so points in <math display="inline">M_{\leq c-\epsilon}</math> stay in <math display="inline">M_{\leq c - \epsilon}</math> when flowed along <math display="inline">\Phi_s</math> and therefore <math display="inline">\Phi_s</math> is a homotopy equivalence between <math display="inline">(M_{\leq c+\epsilon}, M_{\leq c-\epsilon})</math> and <math display="inline">(\Phi(M_{\leq c+\epsilon}, 2\epsilon), M_{\leq c-\epsilon})</math>. By <math display="inline">\Phi(M_{\leq c+\epsilon}, 2\epsilon)</math> we mean the space <math display="inline">M_{\leq c+\epsilon}</math> flowed along <math display="inline">\Phi(x, t)</math> for a short period of time <math display="inline">2\epsilon</math>. [Prove it has the same critical points and is proper?] <math display="inline">\Phi(M_{\leq c+\epsilon}, 2\epsilon)</math> takes points in <math display="inline">M_{\leq c+\epsilon}</math> to <math display="inline">M_{\leq c-\epsilon}</math> except for those that come within <math display="inline">s</math> of a critical point within time <math display="inline">2\epsilon</math>. Therefore, we see how we <math display="inline">\Phi_s</math> can homotopically deform a chain in <math display="inline">M_{\leq c+\epsilon}</math> to a chain in the union of <math display="inline">M_{\leq c-\epsilon}</math> and small neighbourhoods of critical points.<ref>Pemantle, Wilson and Melczer 2024, pp. 234-235.</ref> On the assumption of this theorem, we can start with any chain in <math display="inline">M</math> and deform this chain to <math display="inline">M_{c_1+}</math> using part 1. Then we deform this chain to a chain in the union of <math display="inline">M_{c_1-}</math> and small balls around the critical points. The (sub?)chain in <math display="inline">M_{c_1-}</math> is then deformed to a chain in <math display="inline">M_{c_2+}</math>, which is deformed to a chain in <math display="inline">M_{c_2-} \cup z_{c_2}</math>, and so on. Eventually, we get to <math display="inline">M_{c_j-}</math> which is homotopic to any space "below" it. Therefore, we have deformed our chain in <math display="inline">M</math> to a homotopic chain in the union of small balls around critical points.<ref>Baryshnikov, Melczer and Pemantle 2022, pp. ???.</ref><ref>Pemantle, Wilson and Melczer 2024, pp. 217???</ref> [Direct sum of homology generators for relative cycles] == Notes == {{Reflist}} == References == * {{citation | last1=Baryshnikov | first1=Yuliy | last2=Melczer | first2=Stephen | last3=Pemantle | first3=Robin | title=Stationary Points at Infinity for Analytic Combinatorics | year=2022 | journal=Foundations of Computational Mathematics | volume=22 | number=5 | pages=1631-1664 | url=https://www2.math.upenn.edu/~pemantle/papers/SPAI-published-version.pdf }}. * {{cite book | last1=Goresky | first1=Mark | last2=MacPherson | first2=Robert | title=Stratified Morse Theory | publisher=Springer-Verlag | year=1988 | url=https://www.math.ias.edu/~goresky/pdf/SMT.djvu }} * {{cite book | last=Henle | first1=Michael | title=A Combinatorial Introduction to Topology | publisher=Dover Publications Inc. New York | year=1979 }} * {{citation | last=Mather | first=John | title=Notes on Topological Stability | year=2012 | journal=Bulletin of the American Mathematical Society | volume=49 | number=4 | pages=475-506 | url=https://www.ams.org/journals/bull/2012-49-04/S0273-0979-2012-01383-6/S0273-0979-2012-01383-6.pdf }}. * {{cite book | last1=Pemantle | first1=Robin | last2=Wilson | first2=Mark C. | last3=Melczer | first3=Stephen | title=Analytic Combinatorics in Several Variables | publisher=Cambridge University Press | year=2024 | edition=2nd | url=https://acsvproject.com/PemantleWilsonMelczer23.pdf }} 1utlply6ukkbzjgvoh535mbl0e3trf0 4671979 4671978 2026-09-23T15:33:26Z Dom walden 3209423 /* Step 3 */ 4671979 wikitext text/x-wiki == Introduction == Morse theory tells us that the topology of M only changes at its critical points. The "Morse data" tells us the topology at each critical point. Attaching this Morse data together gives us a space which is homopotically eqivalent to M. This space is a "cell complex", which has an easy to calculate homology. Theorem: Our domain of convergence is homotopic to a cell complex of dimension at most <math display="inline">2n - d - 1</math>.<ref>This is theorem D.23 in Pemantle, Wilson and Melczer 2024, pp. 546. Also theorem in section 1.2*/5.2* in SMT pp. 200.</ref> Proof: # <math display="inline">X</math> is our entire domain, <math display="inline">\mathcal{V}</math> our variety # Project our entire domain to complex projective space <math display="inline">Z = \pi(X) \subset \C\mathbb{P}^n - H</math> [define H] # Define a linear subspace <math display="inline">G \subset \C\mathbb{P}^n</math> of dimension <math display="inline">d - 1</math> # Define a Morse function on <math display="inline">f: \C\mathbb{P}^n \to \R</math> which approximates the distance from <math display="inline">G</math> and such that <math display="inline">f^{-1}(0) = G</math> and <math display="inline">f^{-1}(1) = H</math> # We "build" <math display="inline">X - \mathcal{V}</math> from <math display="inline">\pi^{-1}(G \cap Z) \cap (X - \mathcal{V})</math> by attaching CW complexes at critical points which are of at most dimension <math display="inline">2n - d - 1</math> # At a critical point, the normal Morse data is <math display="inline">(J, K) = \coprod_x (J_x, K_x)</math> and the relative complex link is <math display="inline">\mathcal{L}^\pi = \coprod_x \mathcal{L}_x</math> # We show that the quotient <math display="inline">J_x/K_x</math> is homotopic to a CW complex of dimension <math display="inline">\leq 2n - d - 1</math> # The neighbourhood of <math display="inline">x</math> in <math display="inline">J_x</math> is homeomorphic to the cone in <math display="inline">L_x(X - \mathcal{V})</math>, and removing the point <math display="inline">x</math> increases the homotopy dimension to at most the homotopy dimension of <math display="inline">L_x</math> # <math display="inline">(J_x \cup \{x\}, K_x)</math> is homotopic to <math display="inline">(\text{cone}(\mathcal{L}_x), \mathcal{L}_x)</math> # <math display="inline">\mathcal{L}_x</math> is homotopic to a CW complex of dimension at most <math display="inline">2n - d - 1</math> # The tangential Morse data at the critical point is homotopic to the pair <math display="inline">(D^\lambda, \partial D^\lambda)</math> # Therefore, at each critical point a space has been added homotopic to a CW complex of dimension at most <math display="inline">2n - d - 1</math>. Theorem: If <math display="inline">X</math> is the complement in <math display="inline">\C^n</math> of a complex variety <math display="inline">\mathcal{V}</math> of dimension <math display="inline">d</math> then <math display="inline">X</math> is homotopic to a CW complex of dimension at most <math display="inline">2n - d - 1</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 546.</ref> Proof: # We build <math display="inline">X</math> by attaching cells of dimension at most <math display="inline">2n - d - 1</math> at each critical point. ## Prove that we can do this without changing the homotopy(?) ## We use Thom's Isotopy Lemma to prove that there is a strong deformation retraction, stopping only at critical points. # Prove these cells are a product of the normal and tangential Morse data. ## Normal data: <math display="inline">(\mathcal{L}(S), \partial \mathcal{L}(S)) \times (D^1, \partial D^1)</math> [GM pp. 18] ## Tangential data: <math display="inline">(B_\delta \cap f^{-1}[v - \epsilon, v + \epsilon], B_\delta \cap f^{-1}(v - \epsilon))</math> for <math display="inline">f</math> restricted to <math display="inline">X</math> (or <math display="inline">\mathcal{V}</math>?) [GM pp. 63-64] # If <math display="inline">k</math> is the dimension of the strata, then ## If <math display="inline">k = d</math> then it is a smooth point and the cell is the product of <math display="inline">S^{2(n-d)-1}</math> and the tangential data is dimension at most <math display="inline">d</math>. ## If <math display="inline">k < d</math>, ... <ref>Pemantle, Wilson and Melczer 2024, pp. 547.</ref> == Example in one dimension == Domain with singularities v_1, v_2, ..., v_i Define our height function f... Start with our entire domain X Reduce from X to X_i+ by using Thom's Isotopy lemma to do a strong deformation retract == Thom's isotopy lemma == We present a modified version of Thom's (first) isotopy lemma, less general than the original but more obviously relevant to our situation. Theorem: Suppose <math display="inline">Z</math> is a closed subset of a smooth manifold <math display="inline">M</math> which admits a Whitney stratification and <math display="inline">h : M \to \R</math> is a proper Morse function which has no critical values on <math display="inline">Z</math>. Then, the level sets of <math display="inline">Z</math> are homeomorphic by a homeomorphism that preserves the strata of <math display="inline">Z</math>.<ref>For various versions of the full statement of the theorem, see Mather 2012, pp. 499, Goresky and MacPherson 1988, pp. 41, or Pemantle, Wilson and Melczer 2024, pp. 541.</ref> Proof: # Construct control data for <math display="inline">Z</math> compatible with <math display="inline">h</math>. ## [Prop 7.1] If <math display="inline">h</math> is smooth on <math display="inline">Z</math> and is a submersion for each strata then there exists a family of control data for <math display="inline">Z</math> compatible with <math display="inline">h</math>.<ref>Mather 2012, pp. 488.</ref> # This makes <math display="inline">Z</math> an abstract stratified set and <math display="inline">f</math> a controlled submersion. # A controlled submersion has, for any smooth vector field on <math display="inline">\R</math>, a controlled vector field on <math display="inline">Z</math> (a "lift"?)<ref>Mather 2012, pp. 493.</ref> # A controlled vector field has a unique one-parameter family of homeomorphisms of <math display="inline">Z</math> which commute with <math display="inline">h</math>.<ref>Mather 2012, pp. 496.</ref> # This makes <math display="inline">h</math> a locally trivial fibration. [Prop 10.2]<ref>Mather 2012, pp. 499.</ref> Control data: A system of '''control data''' for <math display="inline">Z</math> consists of, for each stratum <math display="inline">X</math> of <math display="inline">Z</math>, * a '''tubular neighbourhood''' <math display="inline">T_X</math> of <math display="inline">X</math> * a '''tubular projection function''' <math display="inline">\pi_X: T_X \to X</math>, and * a '''tubular distance function''' <math display="inline">\rho_X: T_X \to \R</math> such that <math display="inline">\rho_X^{-1}(0) = X</math><ref>Goresky and MacPherson 1988, pp. 42.</ref> [illustration] such that if <math display="inline">X < Y</math> are strata in <math display="inline">Z</math>, then <math display="block">\pi_X \pi_Y(m) = \pi_X(m),</math> <math display="block">\rho_X \pi_Y(m) = \rho_X(m)</math> for all <math display="inline">m \in |T_X| \cap |T_Y|</math> such that <math display="inline">\pi_Y(m) \in |T_X|</math>. If, for all strata <math display="inline">X</math> and all <math display="inline">m \in |T_X|</math>, we have <math display="inline">h \pi_X(m) = h(m)</math>, then this control data will be said to be compatible with <math display="inline">h</math>.<ref>Mather 2012, pp. 488.</ref> We prove that if <math display="inline">h</math> is smooth on <math display="inline">Z</math> and is a submersion for each strata then there exists a family of control data for <math display="inline">Z</math> compatible with <math display="inline">h</math>.<ref>Mather 2012, pp. 488, prop 7.1.</ref> Let <math display="inline">Z_k</math> be the union of strata of <math display="inline">Z</math> of dimension less than <math display="inline">k</math>. We prove by induction on <math display="inline">k</math>. To construct the tubular neighbourhood <math display="inline">T_X</math> of a stratum <math display="inline">X</math> of dimension less than <math display="inline">k</math>. For <math display="inline">l \leq k</math>, let <math display="inline">U_l</math> denote the union of all <math display="inline">|T_Y|</math> for <math display="inline">Y < X</math> and <math display="inline">\dim Y \geq l</math>. Let <math display="inline">X_l = U_l \cap X</math>.<ref>Mather 2012, pp. 489.</ref> For <math display="inline">l = k</math>, <math display="inline">X_k = \empty</math>. Assume by induction that <math display="inline">T_{l+1}</math> has been constructed and that if <math display="inline">Y < X</math>, <math display="inline">\dim Y \geq l + 1</math>, <math display="inline">m \in |T_{l+1}| \cap |T_Y|</math> and <math display="inline">\pi_{l+1}(m) \in |T_Y|</math> (<math display="inline">\pi_{l+1} = \pi_{T_{l+1}}</math>) then<ref>Mather 2012, pp. 489-490.</ref> <math display="block">\rho_Y \pi_{l+1}(m) = \rho_Y(m),</math> <math display="block">\pi_Y \pi_{l+1}(m) = \pi_Y(m).</math> We wish to construct a tubular neighbourhood <math display="inline">T_{X,Y}</math> of <math display="inline">|T_Y| \cap X</math> whose restriction to <math display="inline">|T_Y| \cap X_{l+1}</math> is isomorphic to the restriction of <math display="inline">T_{l+1}</math> such that if <math display="inline">m \in |T_{X,Y}| \cap |T_Y|</math> and <math display="inline">\pi_{X,Y}(m) \in |T_Y|</math> (<math display="inline">\pi_{X,Y} = \pi_{T_{X,Y}}</math>) then <math display="block">\rho_Y \pi_{X,Y}(m) = \rho_Y(m),</math> <math display="block">\pi_Y \pi_{X,Y}(m) = \pi_Y(m).</math> By shrinking <math display="inline">|T_Y|</math> if necessary, this relation is already satisfied if <math display="inline">m \in |T_{l+1}| \cap |T_Y|</math> and <math display="inline">\pi_{l+1}(m) \in |T_Y|</math> with <math display="inline">T_{l+1}</math> in place of <math display="inline">T_{X,Y}</math> and <math display="inline">\pi_{l+1}</math> in place of <math display="inline">\pi_{X,Y}</math>. By the definition, if <math display="inline">m \in |T_{l+1}|</math> then there exists <math display="inline">Z < X</math> with <math display="inline">\dim Z > l</math>, <math display="inline">m \in |T_Z|</math> and <math display="inline">\pi_{l+1}(m) \in |T_Z|</math>. We have that <math display="inline">\pi_{l+1}(m) \in |T_Y| \cap |T_Z|</math> and therefore <math display="inline">Y < Z</math>. Therefore<ref>Mather 2012, pp. 490.</ref> <math display="block">\rho_Y \pi_{l+1}(m) = \rho_Y \pi_Z \pi_{l+1}(m) = \rho_Y \pi_Z(m) = \rho_Y(m),</math> <math display="block">\pi_Y \pi_{l+1}(m) = \pi_Y \pi_Z \pi_{l+1}(m) = \pi_Y \pi_Z(m) = \pi_Y(m).</math> We can prove that, by shrinking <math display="inline">|T_Y|</math>, <math display="inline">(\rho_Y, \pi_Y): |T_Y| \cap X \to \R \times Y</math> is a submersion [prop 7.3?] and that <math display="inline">T_{X,Y}</math> is compatible with <math display="inline">(\rho_Y, \pi_Y): |T_Y| \cap X_{l+1} \to \R \times Y</math>, i.e. <math display="inline">(\rho_Y, \pi_Y) \pi_{X,Y}(m) = (\rho_Y, \pi_Y)(m)</math>(?). To prove it is a submersion, for the tubular neighbourhood <math display="inline">T = (E, \epsilon, \psi)</math> there exists a smooth positive function <math display="inline">\epsilon'</math> such that <math display="block">(\rho_T, \pi_T): Y \cap |T|_{\epsilon'}^0 \to \R \times X,</math> where <math display="inline">|T|_{\epsilon'}^0 = \psi(B_\epsilon \cap B_{\epsilon'})</math>, is a submersion. If <math display="inline">\Sigma</math> is the set <math display="inline">y \in |T|</math> such that the rank of <math display="block">(\rho_T, \pi_T): T \cap |T| \to \R \times X</math> at <math display="inline">y</math> is less than <math display="inline">\dim(\R \times X)</math>. We need to prove that for any <math display="inline">x \in X</math> there exists a neighbourhood of <math display="inline">x</math> which does not intersect with <math display="inline">\Sigma</math>, i.e. the map is not a submersion in this neighbourhood. It follows from [lemma 7.2] that it is enough to prove for <math display="inline">M = \R^m</math>, <math display="inline">X = \R^{m-c} \times 0_c</math> and <math display="inline">T</math> is the '''standard tubular neighbourhood'''.<ref>Mather 2012, pp. 489.</ref> By standard tubular neighbourhood, we mean the trivial bundle with base <math display="inline">\R^{m-c}</math> and fibre <math display="inline">\R^c</math> where <math display="inline">\pi: \R^m \to \R^{m-c}</math>...<ref>Mather 2012, pp. 488.</ref> For <math display="inline">y \in |T| - \R^{m-c}</math>, the kernal of the differential of <math display="inline">(\pi_T, \rho_T)</math> at <math display="inline">y</math> is the orthogonal complement of <math display="inline">(\R^{m-c} \times 0_c) \oplus \stackrel{\frown}{y \pi_T(y)}</math> in <math display="inline">\R^m</math>. By the Whitney conditions, we have that for <math display="inline">y</math> near <math display="inline">\R^{m-c}</math>, <math display="inline">(\R^{m-c} \times 0_c) \oplus \stackrel{\frown}{y \pi_T(y)}</math> is close to the set of <math display="inline">m - c + 1</math> planes in <math display="inline">m-</math>space to an <math display="inline">m - c + 1</math> plane in <math display="inline">TY_y</math>. Therefore, for <math display="inline">y</math> near enough to <math display="inline">\R^{m-c}</math>, <math display="inline">TY_y</math> is transverse to the kernal of the differential of <math display="inline">(\pi_T, \rho_T)</math> and, therefore, is a submersion when restricted to <math display="inline">Y</math>.<ref>Mather 2012, pp. 489.</ref> To prove that <math display="inline">T_{X,Y}</math> is compatible with <math display="inline">(\rho_Y, \pi_Y): |T_Y| \cap X_{l+1} \to \R \times Y</math>...<ref>Mather 2012, pp. 490.</ref> Therefore, there exists a tubular neighbourhood <math display="inline">T_0</math> of <math display="inline">X_0</math> satisfying <math display="block">\rho_Y \pi_0(m) = \rho_Y(m),</math> <math display="block">\pi_Y \pi_0(m) = \pi_Y(m).</math> From this we can prove that <math display="inline">T_0</math> is compatible with <math display="inline">h</math>. Replacing <math display="inline">T_0</math> with a smaller tubular neighbourhood if necessary we can assume <math display="inline">m \in |T_0|</math> such that for some <math display="inline">Y < X</math>, <math display="inline">m \in |T_Y|</math> and <math display="inline">\pi_0(m) \in |T_Y|</math>, then<ref>Mather 2012, pp. 490.</ref> <math display="block">h \pi_0(m) = h \pi_Y \pi_0(m) = h \pi_Y(m) = h(m).</math> By the generalised tubular neighourhood theorem [prop 7.2?], we can replace <math display="inline">T_0</math> with a tubular neighbourhood <math display="inline">T</math> of <math display="inline">X</math> compatible with <math display="inline">h</math>. This completes the construction of <math display="inline">T_X</math>.<ref>Mather 2012, pp. 491.</ref> This makes <math display="inline">Z</math> an '''abstract stratified set''' with axioms...<ref>Mather 2012, pp. 491-492.</ref> This also makes <math display="inline">h</math> a '''controlled submersion''' because # <math display="inline">h|X: X \to \R</math> is a smooth submersion on each strata <math display="inline">X</math> of <math display="inline">Z</math>, and # for each stratum <math display="inline">X</math> there is a tubular neighbourhood <math display="inline">T'_X</math> such that <math display="inline">h(v) = h \pi_X(v)</math> for all <math display="inline">v \in T'_X</math>.<ref>Mather 2012, pp. 493.</ref> The core of this is the concept of a '''vector field'''. A vector field is a function which assigns, for each point <math display="inline">p</math> in a space, a '''vector''', which can be represented by an arrow whose tail starts at <math display="inline">p</math>.<ref>Henle 1979, pp. 33.</ref> [picture] Imagine we have a vector field <math display="inline">v(x)</math> defined in a space and draw a line through our space. At each point along this line the vector field assigns a vector. If we move each point in this line along the arrow defined by this vector in the direction of the arrow head. This "flows" the entire line along the vectors. [picture] We define a '''stratified vector field''' <math display="inline">\eta</math> on <math display="inline">Z</math> to be a family of smooth vector fields <math display="inline">\eta_X</math>, one for each strata <math display="inline">X</math> of <math display="inline">Z</math>.<ref>Mather 2012, pp. 493.</ref> We define a '''controlled vector field''' <math display="inline">\eta</math> on <math display="inline">Z</math> to be a stratified vector field such that for any strata <math display="inline">Y</math> there exists a tubular neighbourhood <math display="inline">T'_Y</math> such that for any <math display="inline">X > Y</math> and any <math display="inline">v \in T'_X \cap X</math><ref>Mather 2012, pp. 493.</ref> <math display="block">\eta_X \rho_{Y,X}(v) = 0,</math> <math display="block">(\pi_{Y,X})_* \eta_X(v) = \eta_Y (\pi_{Y,X}(v)).</math> We prove that if <math display="inline">h</math> is a controlled submersion then, for any smooth vector field <math display="inline">\zeta</math> on <math display="inline">\R</math> there is a controlled vector field <math display="inline">\eta</math> on <math display="inline">Z</math> such that <math display="inline">h_* \eta(v) = \zeta(h(v))</math> for all <math display="inline">v \in Z</math>.<ref>Mather 2012, pp. 493.</ref> Proceeding by induction on the maximum dimension of the strata of <math display="inline">Z</math>, we define <math display="inline">Z_k</math> to be the union of strata of <math display="inline">Z</math> of dimension at most <math display="inline">k</math>. The tubular neighbourhood of <math display="inline">Z_k</math> is the intersection of the tubular neighbourhoods of each strata in <math display="inline">Z_k</math> with <math display="inline">Z</math>. The projection and distance functions are the restrictions of the respective functions of <math display="inline">Z</math>. It is trivially true when the maximum dimension of strata in <math display="inline">Z</math> is zero. Assume it is true for <math display="inline">k</math> and construct each <math display="inline">\eta_X</math> separately for each stratum <math display="inline">X</math> of dimension <math display="inline">k + 1</math>. By the assumption that we have controlled vector fields for all strata <math display="inline">Y</math> of dimension at most <math display="inline">k</math>, we have the two control conditions defined above for any <math display="inline">X > Y</math> and that there is a neighbourhood <math display="inline">T^1_Y</math> such that <math display="inline">h(v) = h \pi_Y(v)</math> for <math display="inline">v \in T^1_Y</math>. We want to prove that for all <math display="inline">Y < X</math>, the control conditions are satisfied for all <math display="inline">v \in T^2_Y</math> and that <math display="inline">h_*\eta_X(v) = \zeta(v)</math> for all <math display="inline">v \in X</math>. Take a point <math display="inline">x \in X</math> and define the set <math display="inline">S_v</math> of strata <math display="inline">Y < X</math> such that <math display="inline">v \in T^2_Y</math>. <math display="inline">S_v</math> is totally ordered since if <math display="inline">Y_1</math> and <math display="inline">Y_2</math> are not comparable then <math display="inline">T^2_{Y_1} \cap T^2_{Y_2} = \empty</math>. Therefore, there is a largest member <math display="inline">Y = Y_v</math>. Assume the control conditions hold for <math display="inline">Y = Y_v</math>. Then they hold for all <math display="inline">Y_i \in S_v</math>. For, either <math display="inline">Y_i = Y</math> or <math display="inline">Y_i < Y</math>. In the latter case, <math display="inline">\pi_Y(v) \in T^1_{Y_i}</math> (by the choice of <math display="inline">T^2_Y</math>'s [is this why?]. Then <math display="block">\begin{align} \eta_X(v) \rho_{Y_i,X}(v) &= \eta_X \rho_{Y_i,Y} \pi_{Y,X}(v) \\ &= (\pi_{Y,X})_* \eta_X(v) \rho_{Y_i,Y} \\ &= \eta_Y(\pi_{Y,X}(v)) \rho_{Y_i,Y} \\ &= 0 \end{align}</math> and <math display="block">\begin{align} (\pi_{Y_i,X})_* \eta_X(v) &= (\pi_{Y_i,Y})_* (\pi_{Y,X})_* \eta_X(v) \\ &= (\pi_{Y_i,Y})_* \eta_Y(v) (\pi_{Y,X}) \\ &= \eta_{Y_i}(\pi_{Y_i,Y} \pi_{Y,X}(v)) \\ &= \eta_{Y_i}(\pi_{Y_i,X}(v)) \end{align}</math> and, therefore, condition holds for all <math display="inline">Y_i \in S_v</math>. Also, <math display="block">\begin{align} h_* \eta_X(v) &= (h \circ \pi_{Y,X})_* \eta_X(v) \\ &= h_* \eta_Y (\pi_{Y,X}(v)) \\ &= \zeta(f(v)) \end{align}</math> and, therefore, the conclusion of the theorem holds at <math display="inline">v</math>. This shows we can construct <math display="inline">\eta_X</math> satisfying the control conditions when <math display="inline">S_v</math> is non-empty and satisfying the theorem when <math display="inline">S_v</math> is empty. The set of vectors satisfying these conditions is convex in <math display="inline">TX_v</math>, and so we construct <math display="inline">\eta_X</math> globally via a partition of unity.<ref>Mather 2012, pp. 493-495.</ref> Finally, we prove that a controlled vector field has a unique one-parameter family of homeomorphisms of <math display="inline">Z</math> which commute with <math display="inline">h</math>.<ref>Mather 2012, this combines Proposition 10.1 and Corollary 10.2 on pp. 496 and 497, respectively.</ref> For each stratum <math display="inline">X</math> of <math display="inline">Z</math>, <math display="inline">\eta_X</math> generates a unique smooth local one-parameter group <math display="inline">(J_X, \alpha_X)</math> of diffeomorphisms of <math display="inline">X</math> (by standard results of differential geometry), such that <math display="inline">\frac{d}{dt} \alpha(t, v)|_{t=0} = \eta_X(v)</math>, <math display="inline">J_X</math> is an open subset of <math display="inline">\R \times Z</math>, ... If we define <math display="inline">(J, \alpha)</math> by <math display="block">J = \bigcup_{X \in S} J_X</math> <math display="block">\alpha = \bigcup_{X \in S} \alpha_X</math> we can prove that this is a local one-parameter family of homeomorphisms.<ref>Mather 2012, pp. 496.</ref> Firstly, it is clear that # <math display="inline">0 \times Z \subseteq J</math> and <math display="inline">\alpha(0, v) = v</math> for all <math display="inline">v \in Z</math>. # If <math display="inline">v \in Z</math> then <math display="inline">J_v = J \cap (\R \times v) \subseteq \R</math> is an open interval <math display="inline">(a_v, b_v)</math>, possibly infinite at one or both ends. # If <math display="inline">v \in Z</math> and <math display="inline">t, s, t + s</math> are in <math display="inline">(a_v, b_v)</math> then <math display="inline">\alpha(t + s, v) = \alpha(t, \alpha(s, v))</math>.<ref>Mather 2012, pp. 495.</ref> Secondly, it is clear that <math display="inline">\eta</math> generates <math display="inline">\alpha</math> because # Each stratum <math display="inline">X</math> of <math display="inline">Z</math> is invariant under <math display="inline">\alpha</math>, i.e. <math display="inline">\alpha[J \cap (\R \times X)] \subseteq X</math>. # For each <math display="inline">v \in Z</math>, the map <math display="inline">t \to \alpha(t, v)</math> of <math display="inline">(a_v, b_v)</math> into the stratum which contains <math display="inline">v</math> is <math display="inline">C^1</math>. # For any <math display="inline">(t, v) \in Z</math>(?) we have <math display="inline">d/dt \alpha(t, v) = \eta(\alpha(t, v))</math>.<ref>Mather 2012, pp. 495.</ref> It is unique because each <math display="inline">(J_X, \alpha_X)</math> is unique. We just need to prove that <math display="inline">J</math> is open, <math display="inline">\alpha</math> is continuous, and for any <math display="inline">v \in Z</math> and any compact set <math display="inline">K \subseteq Z</math> there exists <math display="inline">\epsilon > 0</math> such that <math display="inline">\alpha(t, v) \notin K</math> if <math display="inline">t \in (a_v, a_v + \epsilon) \cup (b_v - \epsilon, b_v)</math>.<ref>Mather 2012, pp. 495.</ref> For the latter-most condition, if it did not hold then there exists...<ref>Mather 2012, pp. 496-497.</ref> We prove there is a homeomorphism <math display="inline">f: Z \to h^{-1}(0) \times \R</math> such that <math display="inline">\pi \circ f = h</math>, where <math display="inline">\pi: h^{-1}(0) \times \R \to \R</math> is projection to the second factor. For the coordinate vector field <math display="inline">\partial</math> on <math display="inline">\R</math>, by [prop 9.1] there is a controlled vector field <math display="inline">\tilde\partial</math> such that <math display="inline">f_* \tilde\partial(v) = \partial(h(v))</math> for <math display="inline">v \in Z</math>. By [prop 10.1], <math display="inline">\tilde\partial</math> generates a local one-parameter group <math display="inline">(J, \alpha)</math> such that <math display="block">h(\alpha(t,v)) = h(v) + t</math> <math display="inline">h</math> is proper and [d] holds, so <math display="inline">J = \R \times Z</math>. If we define <math display="inline">f</math> as <math display="block">f(v) = (\alpha(-t, v), h(v))</math> then <math display="inline">f</math> maps <math display="inline">Z</math> into <math display="inline">h^{-1}(0) \times \R</math> and <math display="inline">\pi \circ f = h</math>. If we define <math display="inline">\bar f: h^{-1}(0) \times \R \to Z</math> as <math display="block">\bar f(v, t) = \alpha(t, v)</math> then <math display="inline">f \bar f = \bar f f = Id</math> and <math display="inline">f</math> is a homeomorphism.<ref>Mather 2012, pp. 497.</ref> == Topology at critical points == Theorem: If there is a critical point <math display="inline">p</math> in the singular variety <math display="inline">\mathcal{V}</math> with critical value <math display="inline">v \in (a, b)</math> then the space <math display="inline">X_{\leq b}</math> is homotopic to<ref>Goresky and MacPherson 1988, pp. 174.</ref> <math display="block">X_{\leq a} \cup [(D^{\lambda+1}, \partial D^{\lambda+1}) \times (\mathcal{L}_X, \partial \mathcal{L}_X)].</math> Proof:<ref>Proof outline comes from Goresky and MacPherson 1988, pp. 174.</ref> # <math display="inline">(X_{\leq b}, X_{\leq a})</math> is homeomorphic to <math display="inline">(X_{\leq v + \epsilon}, X_{\leq v -\epsilon})</math>. We can prove this by "moving wall" or Thom's Isotopy Lemma.<ref>Goresky and MacPherson 1988, pp. 90-91, 120.</ref> # <math display="inline">X_{\leq v + \epsilon}</math> is homeomorphic to <math display="inline">X_{\leq v - \epsilon} \cup (J, K)</math>, where the latter is the local Morse data for <math display="inline">h</math> at <math display="inline">p</math>. We do this by moving the wall...<ref>Goresky and MacPherson 1988, pp. 95-96, 120-121.</ref> # <math display="inline">(J, K)</math> is homeomorphic to <math display="inline">(D^{\lambda+1}, \partial D^{\lambda+1}) \times (\mathcal{L}_X, \partial \mathcal{L}_X)</math> (tangential data, normal data). Again, moving the wall...<ref>Goresky and MacPherson 1988, pp. 65-66, chapter 8, 121.</ref> # The normal Morse data depends only on the differential <math display="inline">df(p)</math>.<ref>Goresky and MacPherson 1988, pp. 93.</ref> # The normal Morse data has the homotopy type of <math display="inline">(\mathcal{L}_X, \partial \mathcal{L}_X)</math>.<ref>Goresky and MacPherson 1988, pp. 169.</ref> === Step 1 === We get this immediately(?) by Thom's Isotopy Lemma. === Step 2 === <ref>Goresky and MacPherson 1988, complex case on pp. 120-121 is extension of real case on pp. 95-96.</ref> We take our space <math display="inline">M</math> and map it onto <math display="inline">\R^2</math> with the map <math display="inline">F(z) = (r(z), h(z))</math>, where <math display="inline">z \in M</math> and <math display="inline">r</math> is the square of the distance of <math display="inline">z</math> to the critical point <math display="inline">p</math>. [graph of mapping] What we want is a homeomorphism in <math display="inline">M</math> between the space <math display="inline">Z_{\leq \epsilon}</math> and <math display="inline">Z_{\leq \epsilon} \cup B</math>, where <math display="inline">B</math> is a small region of the critical point <math display="inline">p</math>. The '''local Morse data''' is <math display="block">((B_\delta \cap Z) \cap f^{-1}[v-\epsilon, v+\epsilon], (B_\delta \cap Z) \cap f^{-1}(v-\epsilon))</math> where <math display="inline">B_\delta</math> is a closed disc in <math display="inline">M</math> of radius <math display="inline">\delta</math>.<ref>Goresky and MacPherson 1988, pp. 63-64.</ref> Observe that this is the pair <math display="inline">(F^{-1}(\text{Box}(\delta, \epsilon)), F^{-1}(\text{Bottom}(\delta, \epsilon)))</math><ref>Goresky and MacPherson 1988, pp. 91.</ref> [explain Box, Bottom, etc.] [picture of the two subspaces of Z in M] We use our map <math display="inline">F</math> to convert these two subspaces to subspaces of <math display="inline">\R^2</math> which are of the form <math display="inline">Y_1 = \{(x,y) \in \R^2 | y \leq \epsilon\}</math> and <math display="inline">Y_0 = \{(x,y) \in \R^2 | y \leq -\epsilon\} \cup \{(x,y) \in \R^2 | x \leq \delta, y \leq \epsilon\}</math>, such that <math display="inline">Z_{\leq \epsilon} = F^{-1}(Y_1)</math> and <math display="inline">Z_{\leq \epsilon} \cup B = F^{-1}(Y_0)</math>.<ref>Goresky and MacPherson 1988, pp. 95-96.</ref> We use a homeomorphism between <math display="inline">Y_1</math> and <math display="inline">Y_0</math> using the technique of "moving the wall" and Thom's Isotopy Lemma.<ref>Goresky and MacPherson 1988, chapter 4, particularly pp. 71-72.</ref> For the composition <math display="block">Z \times \R \subset M \times \R \to_{F \times I} Y \subset \R^2 \times \R \to_{\pi} \R</math> where <math display="inline">Y(t, z) = Y_t(z)</math>, <math display="inline">I</math> is the identity and <math display="inline">\pi</math> is projection to the second factor. <math display="inline">Z \times \R</math> is transverse to <math display="inline">(F \times I)^{-1}(Y)</math>... The composition <math display="inline">\pi \circ (F \times I): Z \times \R \cap (F \times I)^{-1}(Y) \to \R</math> is a stratified submersion... Therefore, we can apply Thom's Isotopy Lemma which says there is a homeomorphism between the level sets of <math display="inline">Z \times \R</math>...<ref>Goresky and MacPherson 1988, pp. 72.</ref> === Step 3 === We prove there is a stratum preserving homeomorphism between<ref>Goresky and MacPherson 1988, pp. 65.</ref> <math display="block">\text{Local Morse Data} \cong (\text{Tangential Morse Data}) \times (\text{Normal Morse Data})</math> We first prove that there is a homeomorphism between the product of the normal and tangential Morse data and the '''realisation''' of the following diagram<ref>Goresky and MacPherson 1988, pp. 100-102.</ref> [diagram from pp. 102] where realisation means <math display="block">Z \cap (g_1, h_1)^{-1}(P_a) \cap (g_2, h_2)^{-1}(P_b).</math> The realisation of the above diagram is equal to <math display="block">(V_1, V_2) \cap (W_1, W_2) = (V_1 \cap W_1, V_1 \cap W_2 \cup V_2 \cap W_1)</math> where <math display="block">V_1 = \{ z \in Z : |f(z) - f\pi(z)| \leq \epsilon/4, r\pi(z) \leq \delta, \rho(z) \leq \delta \}</math> <math display="block">V_2 = \{ z \in Z : f(z) - f\pi(z) = -\epsilon/4, r\pi(z) \leq \delta, \rho(z) \leq \delta \}</math> <math display="block">W_1 = \{ z \in Z : |f\pi(z)| \leq 3\epsilon/4, r\pi(z) \leq \delta \}</math> <math display="block">W_1 = \{ z \in Z : f\pi(z) = -3\epsilon/4, r\pi(z) \leq \delta \}</math> where <math display="inline">\pi</math> is the projection from the tubular neighbourhood to <math display="inline">Z</math>, <math display="inline">r(z)</math> is the square of the distance between <math display="inline">z</math> and the critical point <math display="inline">p</math> and <math display="inline">\rho(z)</math> is the square of the distance between <math display="inline">z</math> and <math display="inline">\pi(z)</math>.<ref>Goresky and MacPherson 1988, pp. 100-101.</ref> <math display="inline">\epsilon \ll \delta</math> are chosen so that <math display="inline">(\delta, \epsilon)</math> is in the set <math display="inline">A^\flat_6</math> which consists of <math display="inline">A_6 \subset \R^+ \times \R^+</math> with the properties that for <math display="inline">(\epsilon, \delta) \in A_6</math> and <math display="inline">z</math> such that <math display="inline">\rho(z) = \delta</math>, <math display="inline">r\pi(z) = \delta</math>, <math display="inline">|f(z)| \leq \epsilon</math> and <math display="inline">|f\pi(z)| \leq \epsilon</math> then the covectors <math display="inline">d\rho(z)</math>, <math display="inline">dr\pi(z)</math>, <math display="inline">df(z)</math> and <math display="inline">df\pi(z)</math> are linearly independent when restricted to <math display="inline">T_zY</math> (where <math display="inline">Y</math> is the stratum containing <math display="inline">z</math>). We can prove such a set exists.<ref>Goresky and MacPherson 1988, pp. 89.</ref> <math display="inline">A^\flat_6</math> is this plus its reflection about the <math display="inline">x</math> axis.<ref>Goresky and MacPherson 1988, pp. 82.</ref> We use a succession of such diagrams to interpolate between the box diagram which defines local Morse data and the above diagram which defines normal times tangential...<ref>Goresky and MacPherson 1988, pp. 103.</ref> == Morse theory == Steps(?) * Explain topology * Every point of a stratum is locally like a product structure (proved by Thom's Isotopy Lemma) [GM pp. 41-42] ** Including those around critical points, which are the product of normal and tangential Morse data (these are our quasi-local cycles?) * Thom's Isotopy Lemma proves a strong deformation retraction (which only stops at critical points) [PWM pp. 541-542] === Homotopy === We want to replace our domain of convergence <math display="inline">M</math>, which is the complement of our singular variety <math display="inline">\mathcal{V}</math>, with an "equivalent" space <math display="inline">M'</math> which has better understood properties. We say "equivalent" because there are several different things we could mean by "equivalent" in this context. The equivalence we are referring to in this section is called '''homotopy'''. Imagine two subspaces <math display="inline">\gamma_0</math> and <math display="inline">\gamma_1</math> of a space <math display="inline">Y</math> which are defined respectively by smooth functions <math display="inline">f, g: X \to Y</math>. If there exists a smooth function <math display="inline">h_s: X \times [0, 1] \to Y</math>, called a homotopy, such that <math display="inline">h_0 = f</math>, <math display="inline">h_1 = g</math> and for any <math display="inline">\epsilon > 0</math> there exists a <math display="inline">\delta_a</math> and <math display="inline">\delta_b</math> such that when <math display="inline">|s - s_0| < \delta_a</math> and <math display="inline">|x - x_0| < \delta_b</math> we have <math display="inline">|h_s(x) - h_{s_0}(x_0)| < \epsilon</math>, then we say <math display="inline">\gamma_0</math> and <math display="inline">\gamma_1</math> are '''homotopic'''.<ref>Henle 1979, pp. 251-252.</ref> Below is an example where <math display="inline">\gamma_0</math> and <math display="inline">\gamma_1</math> are one-dimensional curves and <math display="inline">H(t, s) = h_s(t)</math>. [[File:Homotopy_curves.png|300px]] In [[#Homotopy_equivalence|Appendix A]], we formally prove that we can construct an equivalent space <math display="inline">M'</math>. We provide only an example to give some intuition before describing how to construct the space <math display="inline">M'</math> in terms of local cycles around critical points. === Motivating example === Imagine a torus and a height function which is just the z value of the point. [[File:3D-Leveltorus.png|200px]] It has four critical points: two at the top and bottom of the outer circle (<math display="inline">p_1, p_4</math>) and two at the top and bottom of the inner circle (<math display="inline">p_2, p_3</math>). [picture] When the height is between the <math display="inline">p_1</math> and <math display="inline">p_2</math>, the space is a two-cell, which can be retracted to a point. [picture] When the height is between <math display="inline">p_2</math> and <math display="inline">p_3</math>, the space is a cylinder, which can be retracted to a two-cell with a one-cell attached. [[File:3D-Cylinder_and_disk_with_handle.png|200px]] When the height is between <math display="inline">p_3</math> and <math display="inline">p_4</math>, the space is a torus with a disc removed, which can be retracted to a cylinder with a one-cell attached. [[File:3D-Cylinder_with_handle_and_torus_with_hole.png|200px]] When the height is greater than <math display="inline">p_4</math>, then the full torus is constructed by attaching a two-cell. [Explain in terms of Morse data and Morse index?] === Morse data and quasi-local cycles === As in the above example, we start at the "bottom" of <math display="inline">M</math> and build upwards until just before we reach our first critical point <math display="inline">p</math>. ;Smooth points :This is a tube around a <math display="inline">(d-1)</math>-chain <math display="inline">\gamma</math> where the height function <math display="inline">h</math> is maximised at <math display="inline">p</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 223.</ref> :For example, if <math display="inline">F(x, y) = \frac{1}{1 - x - y}</math> then <math display="inline">\lambda = 1</math> and <math display="inline">B^\lambda</math> is an arc reaching its highest point at <math display="inline">p</math>. :The normal plane <math display="inline">N</math> at <math display="inline">p</math> is a plane orthogonal to <math display="inline">B^1</math>(?). :Its normal link <math display="inline">L(S)</math> is a circle with two points missing where it intersects <math display="inline">\mathcal{V}</math>. :We make our quasi-local cycle out of the product of the arc and circle joined to <math display="inline">M_-</math> at points below <math display="inline">M_-</math>. :With the exception of degenerate points, such as monkey saddles...<ref>e.g. Pemantle, Wilson and Melczer 2024, pp. 211.</ref> ;Transverse multiple points :This is the product of a <math display="inline">k</math>-torus and a <math display="inline">(d-k)</math>-chain <math display="inline">\gamma</math>. The torus is the product of circles about <math display="inline">p</math> in the complex normal space to each strata which intersects <math display="inline">p</math>. The chain <math display="inline">\gamma</math> is supported in the stratum which is the common intersection of the varieties defined by the factors vanishing at <math display="inline">p</math>, and achieves its maximum height at <math display="inline">p</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 223-224.</ref> ;Arrangement multiple point :This is the product of a <math display="inline">(d-k)</math>-chain <math display="inline">\gamma</math> and several <math display="inline">k</math>-tori, one for each pair of sheets which intersect transversely, where the torus is the product of circles about <math display="inline">p</math> in each sheet.<ref>Pemantle, Wilson and Melczer 2024, pp. 226.</ref> ;Cone point :A cone point is zero-dimensional so there is no <math display="inline">\gamma</math>, just a <math display="inline">d</math>-torus about <math display="inline">p</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 227.</ref> == Appendix == === Homotopy equivalence === [Assuming no CVAI...] Theorem: # Homotopy equivalence between M_{\leq a} and M_{\leq b}... # If in a range <math display="inline">[a, b]</math> there are no CVAI and only one critical value <math display="inline">c</math>, not equal to either <math display="inline">a</math> or <math display="inline">b</math>, with one or more critical points <math display="inline">z_1, \cdots, z_m</math> then there is a stratified flow deforming any chain in <math display="inline">M</math> to a (homotopic?) chain in the union of <math display="inline">M_{<c}</math> with sufficiently small balls around each critical point. This induces a homotopy between <math display="inline">(M_{c+\epsilon}, M_{c-\epsilon})</math> and the direct sum of <math display="inline">(M_{c-\epsilon} \cup B_{2\epsilon}(z_i), M_{c-\epsilon})</math> for each critical point <math display="inline">z_i</math>.<ref>Pemantle, Wilson and Melczer 2024, pp. 231.</ref> The core of this is the concept of a '''vector field'''. A vector field is a function which assigns, for each point <math display="inline">p</math> in a space, a '''vector''', which can be represented by an arrow whose tail starts at <math display="inline">p</math>.<ref>Henle 1979, pp. 33.</ref> [picture] Imagine we have a vector field <math display="inline">v(x)</math> defined in a space and draw a line through our space. At each point along this line the vector field assigns a vector. If we move each point in this line along the arrow defined by this vector in the direction of the arrow head. This "flows" the entire line along the vectors. We can (potentially) define a function to implement this flow. Define <math display="inline">\Phi(x, t)</math> where <math display="inline">x</math> are points in the space and <math display="inline">t</math> is something like time. As <math display="inline">t</math> goes from zero to some positive number, <math display="inline">\Phi</math> moves the points <math display="inline">x</math> along the vectors. To describe this process formally, we say <math display="inline">\Phi</math> is the solution to the differential equation <math display="block">\frac{d}{dt} \Phi(x, t) = v(x).</math> We want a particular vector field <math display="inline">v</math> with certain properties... The proof of the existence of this vector field is long and complicated and we will not go into it here.<ref>It involves concepts such as Thom's isotopy lemma and Mather's controlled vector flows. See Mather 2012.</ref> Using this vector field <math display="inline">v</math> but modified so as to be zero on <math display="inline">M_{\leq a}</math>. This vector field defines a function <math display="inline">\Phi(x, t)</math> such that * <math display="inline">d/dt \Phi(x, t) = v(x)</math> when <math display="inline">h(x) \in (a, b]</math>. * <math display="inline">\Phi(x, t)</math> is defined for <math display="inline">0 \leq t \leq h(x) - a</math> and in this range <math display="inline">h(\Phi(x, t)) = h(x) - t</math>. * the map <math display="inline">\psi(x) = \Phi(x, b - a)</math> is a continuous map on <math display="inline">M_{\leq b}</math> with range (image?) <math display="inline">M_{\leq a}</math> and fixing <math display="inline">M_{\leq a}</math>. The function <math display="inline">\Phi(x, 0)</math> is the identity on <math display="inline">M_{\leq b}</math> and <math display="inline">\Phi(x, b - a) = \psi(x)</math>, therefore <math display="inline">\Phi</math> in the range <math display="inline">[0, b - a]</math> is a homotopy between the identity on <math display="inline">M_{\leq b}</math> and <math display="inline">\psi</math>. This implies 1)???<ref>Pemantle, Wilson and Melczer 2024, pp. 233.</ref> Define the distance from a critical point <math display="inline">\kappa(x) = \min\{ |x - z_i| : z_1, \cdots, z_m \}</math>. For <math display="inline">s > 0 </math> we define a new vector field <math display="block">v_s(x) = \begin{cases} v(x) & \kappa(x) \geq s \\ \rho(\kappa(x)) v(x) & \kappa(x) \in [s/2, s] \\ 0 & \kappa(x) \leq s/2 \end{cases}</math> for a smooth non-decreasing function <math display="inline">\rho</math> where <math display="inline">\rho(s/2) = 0</math>. Define <math display="inline">\Phi_s</math> as the function such that <math display="inline">d/dt \Phi(x, t)_s = v_s(x)</math>. The height function <math display="inline">h</math> is non-increasing along <math display="inline">\Phi_s</math> (by implication of bullet point 2?) so points in <math display="inline">M_{\leq c-\epsilon}</math> stay in <math display="inline">M_{\leq c - \epsilon}</math> when flowed along <math display="inline">\Phi_s</math> and therefore <math display="inline">\Phi_s</math> is a homotopy equivalence between <math display="inline">(M_{\leq c+\epsilon}, M_{\leq c-\epsilon})</math> and <math display="inline">(\Phi(M_{\leq c+\epsilon}, 2\epsilon), M_{\leq c-\epsilon})</math>. By <math display="inline">\Phi(M_{\leq c+\epsilon}, 2\epsilon)</math> we mean the space <math display="inline">M_{\leq c+\epsilon}</math> flowed along <math display="inline">\Phi(x, t)</math> for a short period of time <math display="inline">2\epsilon</math>. [Prove it has the same critical points and is proper?] <math display="inline">\Phi(M_{\leq c+\epsilon}, 2\epsilon)</math> takes points in <math display="inline">M_{\leq c+\epsilon}</math> to <math display="inline">M_{\leq c-\epsilon}</math> except for those that come within <math display="inline">s</math> of a critical point within time <math display="inline">2\epsilon</math>. Therefore, we see how we <math display="inline">\Phi_s</math> can homotopically deform a chain in <math display="inline">M_{\leq c+\epsilon}</math> to a chain in the union of <math display="inline">M_{\leq c-\epsilon}</math> and small neighbourhoods of critical points.<ref>Pemantle, Wilson and Melczer 2024, pp. 234-235.</ref> On the assumption of this theorem, we can start with any chain in <math display="inline">M</math> and deform this chain to <math display="inline">M_{c_1+}</math> using part 1. Then we deform this chain to a chain in the union of <math display="inline">M_{c_1-}</math> and small balls around the critical points. The (sub?)chain in <math display="inline">M_{c_1-}</math> is then deformed to a chain in <math display="inline">M_{c_2+}</math>, which is deformed to a chain in <math display="inline">M_{c_2-} \cup z_{c_2}</math>, and so on. Eventually, we get to <math display="inline">M_{c_j-}</math> which is homotopic to any space "below" it. Therefore, we have deformed our chain in <math display="inline">M</math> to a homotopic chain in the union of small balls around critical points.<ref>Baryshnikov, Melczer and Pemantle 2022, pp. ???.</ref><ref>Pemantle, Wilson and Melczer 2024, pp. 217???</ref> [Direct sum of homology generators for relative cycles] == Notes == {{Reflist}} == References == * {{citation | last1=Baryshnikov | first1=Yuliy | last2=Melczer | first2=Stephen | last3=Pemantle | first3=Robin | title=Stationary Points at Infinity for Analytic Combinatorics | year=2022 | journal=Foundations of Computational Mathematics | volume=22 | number=5 | pages=1631-1664 | url=https://www2.math.upenn.edu/~pemantle/papers/SPAI-published-version.pdf }}. * {{cite book | last1=Goresky | first1=Mark | last2=MacPherson | first2=Robert | title=Stratified Morse Theory | publisher=Springer-Verlag | year=1988 | url=https://www.math.ias.edu/~goresky/pdf/SMT.djvu }} * {{cite book | last=Henle | first1=Michael | title=A Combinatorial Introduction to Topology | publisher=Dover Publications Inc. New York | year=1979 }} * {{citation | last=Mather | first=John | title=Notes on Topological Stability | year=2012 | journal=Bulletin of the American Mathematical Society | volume=49 | number=4 | pages=475-506 | url=https://www.ams.org/journals/bull/2012-49-04/S0273-0979-2012-01383-6/S0273-0979-2012-01383-6.pdf }}. * {{cite book | last1=Pemantle | first1=Robin | last2=Wilson | first2=Mark C. | last3=Melczer | first3=Stephen | title=Analytic Combinatorics in Several Variables | publisher=Cambridge University Press | year=2024 | edition=2nd | url=https://acsvproject.com/PemantleWilsonMelczer23.pdf }} rxjya0p71mxap78ovlmel0b9q1tznwk Essays in Early Modern Literary Studies, 1995-2000/Ruling the World: The Cartographic Gaze in Elizabethan Accounts of the New World 0 481115 4672055 4618367 2026-09-24T08:18:04Z R. Henrik Nilsson 3395618 degress > degrees 4672055 wikitext text/x-wiki ''This essay was written by Mark Koch''. <!--Paragraph 1--> When Sir Humphrey Gilbert declared English possession of Newfoundland on August 5, 1583, the ceremony was performed in St. John's Harbor before a fishing fleet of some thirty-six ships from Spain, Portugal, France and England. While the fishing banks and the beaches of Newfoundland had been used for decades by fishermen of various European nations, a right of English possession was now argued upon the precedent of John Cabot's voyage to the island in 1497, and Gilbert's rationale for making this possession official was the recent patent granted to him by Elizabeth. <!--Paragraph 2--> Since Gilbert's most immediate concern was likely the fishing fleet which had initially prevented two of his ships from entering the harbor, it was before this fleet that he had most reason to display his newly granted authority. The ceremony itself contained both a legal component (a reading of laws and terms relating to his patent and possession) and a more ritualistic, dramatic component (the digging of turf, the erection of a pillar displaying the queen's arms).<ref>Steven Greenblatt suggests that possession ceremonies in the New World involved either a theatrical element—a symbolic gesture or act such as turf digging, for instance—for the present native audience, or a legalistic element—a reading of documents—for a distant European audience. ''Marvelous Possessions: The Wonders of the New World'' (Chicago: U of Chicago P, 1991) 55–60. Gilbert's possession—and even more his "discovery"—is a something of an anomaly because Newfoundland was clearly already frequented by many Europeans.</ref> Yet perhaps most interesting is the manner of staging this ceremony. As the event is retold in Sir George Peckham's ''A True Report of the late discoveries, and possession, taken in the right of the Crowne of England, of the Newfound Landes'' (1583), "On munday being the fift of August, the Generall caused his Tent to be set upon the side of a hill, in viewe of all the Flete of Englishmen and Straungers, which were in number betweene thirty and fortie sayle."<ref>Sir George Peckham ''A True Report of the late discoveries, and possession, taken in the right of the Crowne of England, of the Newfound Landes'' (1583) English Experience 341 (Amsterdam: Theatrum Orbis Terrarum ; Da Capo Press, 1971) 2.</ref> The officers of the fishing ships were then brought to the tent to witness both the reading of Gilbert's commission and the digging of the turf. <!--Paragraph 3--> Gilbert, it would seem from this account, intended the scene of ceremony to be performed before the whole fleet. By positioning the tent on the hill "in view of all the Flete," Gilbert displayed his authority through the theatrical visibility of his actions—a mode of power familiar to Elizabethan England.<ref>D.B. Quinn, ed. ''The Voyages and Colonising Enterprises of Sir Humphrey Gilbert''. 2 Vols. Hakluyt Society. (Repr. Liechtenstein: Kraus, 1967) 444.</ref> The fleet's view of the scene at Gilbert's elevated tent, however, may not have been as important for Gilbert's more long-range purposes (i.e., colonization) as was his elevated view of the fleet—or, more precisely, of his capacity to have an elevated view of the land. <!--Paragraph 4--> Foucault says that when Jeremy Bentham conceived of the Panopticon, it was "a formula for power exactly the opposite of monarchical power."<ref>Michel Foucault, ''Power/Knowledge: Selected Interviews and Other Writing'' ed. Colin Gordon (Brighton: Harvester, 1986) 155.</ref> To have subjects observed by rulers (modern surveillance) rather than having rulers observed by subjects (monarchical spectacle) is a move toward modern techniques of power. Considerations of this surveillant gaze reveal much about the modes of modern power not only when applied to architecture and individual bodies but when applied to representations of land and the people on that land. In this account of Gilbert's possession of Newfoundland and in other English tracts promoting New World colonies in the 1580's, there is less inscription of legal and ritual ceremonies that signify monarchical power, so much as an impulse to geographical surveillance that is ubiquitous in and perhaps even inseparable from these accounts. <!--Paragraph 5--> Gilbert's elevated perspective of the harbor of St. John's is important here not because of any immediate strategic military advantage it may have provided. No doubt such vantage points in any previous centuries could have provided a commander a momentary assessment of the lay of the land as well as the number and position of enemy troops—although such ephemeral prospects, if not recorded, largely lose their vantage once the hill is descended. In the sixteenth-century, however, Gilbert's bird's eye view of the fleet, the harbor, and the land could be accurately and realistically inscribed, printed, published, and disseminated to interested parties.<ref>For discussion of Elizabethan theatricality and power see, for a beginning, Greenblatt's ''Shakespearean Negotiations'' (46–7, 64–5) and Mullaney's ''The Place of the Stage'' (96–7). Greenblatt also offers a bibliographical note on this subject (175 n. 61).</ref> Indeed, the English acquisition of Newfoundland more properly began after Gilbert's dramatic possession ritual. Following the ceremony, one of those in attendance reported that Gilbert sent some men to "search the commodities and singularities of the countrey," while others "observed the elevation of the pole, and drewe plats of the countrey exactly graded. And by that I could gather be each mans severall relation, I have drawen a briefe description of the Newfound land, with the commodities by sea or lande alreadie made, and such also as are in possibilities and great likelihood to be made."<ref>Gillian T. Cell ed. ''Newfoundland Discovered: English Attempts at Colonization, 1610-1630'' (London: Hakluyt Society, 1982) 106.</ref> Here then is a surveillant gaze of the land represented by cartographic surveys, surveys which were supposed to indicate the longitudinal compass variation, incorporate recognizable symbols for hills and vegetation, and identify and label timber and any other potential commodities discovered in the colonial territory.<ref>Todorov suggests that it is writing, language inscribed, that gave the advantage to the Spaniards in the conquest of Mexico. See also Michel De Certeau's discussion of function of writing in New World colonialism (215–18) and Jose Rabasa's "Columbus and the New Scriptual Economy of the Renaissance."</ref> <!--Paragraph 6--> [[File:La Cosmographie universelle 1565 (66460403).jpg|thumb|'''Figure 1''': Münster's map of Edinburgh]] The rapid advancement of sixteenth-century map-making, fostered by the rise of printing, the recent great discoveries, and advances in geometry and navigational instruments, could now produce an image of the world as seen from above. That cartography offered such a bird's eye view of the land is perhaps clearest in the atlases appearing toward the middle of the century, particularly those that offered less abstract, more painterly views of cities. Sebastian Münster's popular ''Cosmographei'', which went through thirty-six editions between 1544 and 1628 presented panoramic views of cities, most of them German.<ref>R Oehme, Introduction to Münster's 1550 ''Cosmographei'' (Amsterdam: Theatrum Orbis Terrarum, 1968) v.</ref> Such an atlas, following Ptolemy's distinction between chorography and geography, was chorographic, because it portrayed detail, whereas the world atlas of Abraham Ortelius (1570) was properly geographic. Such chorographic maps tended to be more painterly and less abstract, and the cities are typically presented from an elevated perspective, implying an impossibly high vantage point from a harbor—as in Münster's map of Edinburgh (see Figure 1)—or from a fictitious hill outside of the city. This of course is not to say that such images of cities were a new development in mid-sixteenth-century Europe. As P.D.A. Harvey has shown, a kind of bird's eye view had been employed previously in medieval European city maps—though not with the accuracy of scale found in later maps. What is perhaps more important is that while there was relatively little map making in Europe during the middle ages, the development and spread of cartography after 1500 was rapid.<ref>P.D.A. Harvey, ''The History of Cartography'', Ed. J.B. Harley and David Woodward (Vol. 1. Chicago: U of Chicago P, 1987) 464–65.</ref> To whatever degree bird's-eye-view images may have existed prior to the century of "Great Discovery," to whatever degree maps may have informed ancient geographic and chorographic understanding of the world, it is clear that medieval European society understood little about the maps and the possible uses of them.<ref>J.B. Harley and David Woodward eds., ''Cartography in Prehistoric, Ancient, and Medieval Europe and the Mediterranean'' vol. 1 of ''The History of Cartography'' (Chicago: U of Chicago P, 1987) 508–09.</ref> <!--Paragraph 7--> [[File:GMG433 14 London.jpg|thumb|'''Figure 2''': GMG433 14 London]] The popularity of Münster's atlas was perhaps eclipsed by the significance granted to another, more comprehensive and more truly global chorography of cities. The year 1572 saw the publication of the first of the six volumes of Georg Braun and Franz Hogenberg's ''Civitates Orbis Terrarum'', an extensive work which R.V. Tooley has classed, with Ortelius' geographic atlas and Waghenaer's sea atlas, as one of the three most notable cartographic achievements of the century.<ref>Georg Braun and Remigius Hogenberg, ''Civitates Orbis Terrarum'' (Antwerp: Apud Philippum Gallecum, 1572) Repr. and with an introduction by R.A. Skelton (Cleveland: World, 1966) v.</ref> Braun and Hogenberg used a number of Münster's maps and, like Münster, used a bird's eye view for most of the maps.<ref>Taylor observes that in instructions to a surveyor, Thomas Bavin, in the plans for a 1582 Gilbert expedition which was deferred until 1593, "he was instructed to make on his map the location of every natural product likely to prove of economic value" ("Instructions to a Colonial Surveyor in 1582," 61). Taylor adds that it is likely that Bavin did the survey work around St. John's the following year.</ref> In the map of London in ''Civitates Orbis Terrarum'' (see Figure 2), a hill—seemingly connected to the southern edge of Southwark, yet floating unnaturally above it—occupies the immediate foreground. Situated atop this hill are several denizens of noble or gentry degree and dress who may—as may the map reader—look out upon a lofty vista of London stretching from Westminster to the Tower. While this map, which is fairly typical of the other maps in this atlas, is clearly painterly in its representational portrayal of London, it retains its more abstract purpose as a map: demarcating city walls, charting roads and rivers, and labeling the churches and other significant structures within the city. <!--Paragraph 8--> At about the same time that this bird's-eye-view mapping was proliferating, paintings of cityscapes were also becoming popular and Flemish landscape painting was developing—and perhaps enjoying success because of the general sixteenth-century interest in cartography.<ref>In his introduction to a facsimile edition of Braun and Hogenberg, R.A. Skelton identifies four different perspectival modes used in ''Civitates'', though three of these combine either a hilltop perspective, a more elevated bird's-eye-view, or what Skelton calls a "map view" in which the vertical perspective of a ground-plan is "enriched by delineations of detail in bird's eye view or elevation" (xi). For my purposes, I have not made a distinction among maps drawn in bird's-eye view, the elevation perspective, or those using the "map-view" and will use the terms interchangeably as all suggest, in varying degrees, the view from above.</ref> Such paintings—as Svetlana Alpers, in "The Mapping Impulse in Dutch Art", has suggested about the tendency of seventeenth-century Dutch landscape painting to present terrain from a bird's eye view—blur the line between cartography and painting. As Braun and Hogenberg's work raises questions about what is and is not a map, it also implies that even in the more abstract cartography, a map is fundamentally a view from above. <!--Paragraph 9--> Understanding how these elevated perspectives work as an instrument of possession suggests a corollary way of reading certain recurrent elements in the accounts of English voyages such as Gilbert's that were compiled by Richard Hakluyt and, later, by Samuel Purchas. To be sure, not all expressions of the view from above are about land acquisition. Robert Burton found relief from melancholy in the printed representations of such views: <blockquote> Me thinkes it would well please any man to look upon a Geographicall Map . . . Chorographicall, Topographical delineations, to behold, as it were, all the remote Provinces, Townes, Citties of the World . . . . What greater pleasure can there be, than to view those elaborate maps of Ortelius, Mercator, Hondius, &c.? To peruse those books of cities, put out by Braunus and Hogenbergius?"<ref>Burton, ''The Anatomy of Melancholy'', 2: 86–7.</ref> </blockquote> Walter Gibson, discussing what he calls the "Olympian perspective" in his study of sixteenth-century Flemish landscape painting, cites Cicero, Lucretius, and Montaigne as all granting something of a philosophic advantage to such elevated perspectives.<ref>Walter Gibson, 57–8. Gibson argues that Renaissance interest in cartography and geography influenced the favor that Flemish landscape painting enjoyed (49). See Kagan on the growth of cityscapes (115).</ref> <!--Paragraph 10--> Yet elsewhere this perspective clearly implies a kind of possession. In his recent analysis of the colonial enterprise in Australia, Simon Ryan discusses the explorers' use of elevation, surveillance and "commanding views," asserting that the "explorative gaze is a microform of the divine gaze."<ref>Ryan's book, ''The Cartographic Eye: How Explorers Saw Australia'' (Cambridge: Cambridge UP. 1996), which I discovered while revising this essay, is informed, I would like to think, by similar theoretical concerns about European cartography, perspective, colonization, and ethnography as my essay. He writes, "The explorative gaze is a mastery of space. This book is about this gaze, about its discursive construction in the journals and its meaning within the context of the colonial enterprise"(6).</ref> Denis Cosgrove, in arguing that development of linear perspective and landscape in fifteenth- and sixteenth-century Europe is "visual ideology," writes that the view point of the bird's-eyes view of cities is, "significantly, high above the city, distant, commanding, uninvolved."<ref>Cosgrove, "Prospect, Perspective, and the Evolution of the Landscape Idea." ''Transactions of the Institute of British Geographers'' 10 (1985): 47,51.</ref> While a full consideration of such commanding views is beyond the pale of this study, it may be enough here to recall how Moses is granted a mountain-top vista of the promised land before his death (Deut. 34: 1–4), how Satan tempts Christ with a view from "an exceeding high mountain shewing him all the kingdoms of the world and the glory of them" (Matt. 4: 5–6), or how Marlowe's Faustus is similarly tempted with the prospects Mephistopheles can provide: <blockquote> <poem> "So high our dragons soared into the air That looking down the earth appeared to me No bigger than my hand in quantity— There did we view the kingdoms of the world And what might please mine eye I there beheld." (3.1.71–3) </poem> </blockquote> Along with the more medieval need to echo the scene of Christ's temptation, Faustus' lines belie a distinctly early modern application of the view from above: the recent atlases and maps now made it possible to hold in one's hands simulacra of the earth and to behold with the eye the kingdoms of the world. <!--Paragraph 11--> In Arthur Barlow's 1584 report of the first voyage to Virginia, Barlow writes that just after the ceremony of possession, <blockquote> We passed from the Sea side, towardes the toppes of those hils next adjoyning, being but of meane heigth, and from thence wee behelde the Sea on both waies. This lande laye stretching it selfe to the West, which after wee founde to be but an Island of twentie leagues long, and above six miles broade. Under the banke or hill, whereon we stoode, we behelde the vallies replenished with goodly Cedar trees . . . . This Island had many goodly woods, full of Deere, Conies, Hares and Fowle, even in the middest of Summer, in incredible aboundance.<ref>D.B. Quinn, ''The Roanoke Voyages: 1584–1590'' 2 vols. (Hakluyt Society, repr. Liechtenstein: Kraus, 1967) 96.</ref> </blockquote> The elevated perspective allows Barlow to make two different though related observations: to behold and describe the local geography and, as he begins to assess and enumerate the land's potential commodities, to outline what might be held or possessed. <!--Paragraph 12--> When Humphrey Gilbert was lost in a shipwreck returning from his Newfoundland voyage, Walter Raleigh—to whom Barlow's account of Virginia was addressed—pursued and was granted Gilbert's interests in North America. It was not until 1595 that Raleigh himself traveled to the New World in search of more immediate wealth in Guiana than the Virginia colonies could yield. In his report, ''The Discovery of the Large, Rich, and Beautiful Empire of Guiana'' (1596), the hill-top perspective leads to a similar, though more literary description of the land: <blockquote> "When we came to the tops of the first hils of the plaines adjoyning to the river, we beheld that wonderful breach of waters which ran down Caroli: and might from that mountain see the river how it ran in three parts above twenty miles off; and there appeared some ten or twelve overfalls in sight, every one as high over the other as a Church-tower."<ref>Hakluyt, ''The Principal Navigations, Voyages, Traffiques & Discoveries of the English Nation'' (Glasgow: James MacLehose, 1904) 10: 403–4.</ref> </blockquote> Part of what Raleigh is advertising here and throughout this report are the marvels of Guiana, but he also presents some bit of chorographical reconnaissance and continues by combining his description of topography, flora and fauna with the promise of gold: <blockquote> I never saw a more beautifull countrey, nor more lively prospects, hils so raised here and there over the valleys, the river winding into divers branches, the plaines adjoyning without bush or stubble, all faire greene grass, the ground of hard sand easy to march on, either for horse or foote, the deere crossing in every path, the birdes towards the evening singing on every tree with a thousand severall tunes, cranes and herons of white, crimson, and carnation pearching in the river's side, the aire fresh with a gentle Easterly wind, and every stone that we stouped to take up, promised either golde or silver by his complexion.<ref>''Principal Navigations'' 10: 404.</ref> </blockquote> The association of elements in this passage reveals the amalgam of Raleigh's interests in Guiana—beauty, conquest, gold—and these are shown in a sustained panoramic description. From the seemingly ethereal vantage of the hilltops we pan from the waterfalls, to the valleys and rivers, to the land suited for military movement, to the paradisiacal wildlife, sounds, and air, to the stones on the ground. <!--Paragraph 13--> A few decades later these hilltop perspectives in reports from the New World appear somewhat less pictorial and more starkly topographical. In John Guy's journal of his voyage to Newfoundland in 1612, his discovery party goes to "the top of a very high hill, to take full view of the bay of Placentia, and all the countrey about." Because fog "hindred the prospecte," Guy must remain on the hill overnight until clearer weather allows a precise view and record to be taken of the local geography: "the western side of the bay of Placentia was seene to lie W. WSW. & SWBW, & SW. About 10 leagues of theare was ane open into the maine sea, noe land appearing, in which sound theare weare two small Ilandes in a righte line.<ref>''Newfoundland Discovered'' 73.</ref> <!--Paragraph 14--> What recurs in these travelers' tales is an inscription of the surveillant gaze from above. The manner of inscription is varied. It may be the lush and vivid representational pictures created here by Barlow and Raleigh, in the manner of Braun and Hogenberg. It may also include the more abstract elements of cartography, a perspective of the land from ninety degrees, more in the manner of Gerard Mercator's projection of the world upon a grid of equivalent rectangles. This latter perspective, suggested somewhat by the harsh geometry of Guy's description, appears most clearly in voyage accounts as references to longitude and latitude. <!--Paragraph 15--> That the world could be plotted along horizontal and vertical lines was an idea that spread through Europe with the rediscovery of Ptolemaic geography during the late-fourteenth- and fifteenth-centuries. Samuel Y. Edgerton, Jr. argues that the rediscovery of this grid system, first used by Greek and Roman empires, profoundly affected the European construction of space, changing art, architecture, and cities, as well as changing representations and conceptions of the world.<ref>Edgerton's argument on grid and cartography appears in two chapters of his ''Renaissance Rediscovery of Linear Perspective'' and in his essay "From Mental Matrix." Alpers, arguing against Edgerton's link between Albertian perspective in painting and Ptolemaic grids, says that it is in Northern Europe, not Italy, "that maps and pictures are reconciled, and the results are clear in the great and unprecedented production of mapped pictures, the landscapes and city views" (70). It may be enough to say here that both forms, Edgerton's grid and Alpers' elevated perspective, are offering a view from above that offers a radical departure from the earlier, medieval way of representing and imagining the surface of the world.</ref> Ptolemy's grid depended not on divine revelation, writes Edgerton, but <blockquote> : "on the quantifying eye of the human observer, who was now able to imagine himself detached from the world as if looking at it on a stage. Indeed, the viewer of Ptolemy's map was privileged to see the world as did the gods themselves from their lofty vantage on Mount Olympus."<ref>''Renaissance Rediscovery of Linear Perspective'' 38.</ref> </blockquote> Like the perspective gained by Gilbert in St. John's, or the sight advantage, Alpers notes, that artists achieved by climbing towers in seventeenth-century Holland,<ref>Svetlana Alpers, ''The Art of Describing: Dutch Art in the Seventeenth Century'' (London: J. Murray, 1983) 81.</ref> the ruled map presented a privileged view of the land. That this grid works as a technique of authority and possession would seem to be corroborated by Edgerton's assertion that the Ptolemaic longitude and latitudes—endorsed by Pope Pius II in the 1460s—made conceivable the extension of European Christian empire to all parts of the earth.<ref>''Renaissance Rediscovery of Linear Perspective'' 48.</ref> <!--Paragraph 16--> The almost instant authority of these lines was perhaps most clearly demonstrated when, a year after Columbus' first voyage, Pope Alexander VI drew, as Hakluyt wrote it, "a lyne of partition from one Pole unto another passinge a hundred leagues westwarde of the Iles of Azores" granting the unknown territory east of the line to Portugal and that west to Spain. That such simple partition met some degree of resistance is suggested by the story, which Hakluyt relates, of the Portuguese boy, who upon meeting the men who had come "to devide the worlde with the Emperor . . . tooke up his shirte behinde and shewed them his buttocks, sayenge unto them, Draw your Lyne throughe the middest of this place."<ref>Taylor, ed., ''The Original Writings & Correspondence of the Two Richard Hakluyts'', 2 Vols. Hakluyt Society Reprint (Liechtenstein: Kraus, 1967) 306.</ref> <!--Paragraph 17--> Sixteenth-century discussion of the import of these lines of longitude and latitude—decidedly more dry than either the assertions of Edgerton or the Portuguese boy—was restricted primarily to the explanations found in geography and navigational books on how to use navigational instruments and geometry to understand global positions on a ruled sea chart.<ref>See David W. Waters, ''The Art of Navigation in England in Elizabethan and Early Stuart Times'', (London: Hollis and Carter, 1958), especially the early chapters, for a discussion of the importance of these sixteenth-century navigation books.</ref> The most important of these navigational manuals was Martin Cortes' ''Breve Compendio de la Sphera y de Arte de Navegar'', written in 1545. In 1561 this work appeared in England as ''The Arte of Navigation'', translated by Richard Eden, an early advocate of new world exploration who had also translated the portion from Münster's ''Cosmographei'' on the new found lands in 1553. Among many other navigational techniques, Cortes' book offers instructions for composing and copying sea charts, showing the success of the Ptolemaic grid in supplanting the traditional grid-free portolan sea chart. For copying and reducing a chart, or "card," by use of the lines of latitude and longitude, Cortes instructs the navigator to draw two sets of equidistant lines at right angles, which "shall devide all the superficiall parte of the Carde into perfect squares or quadratures," allowing a more precise representation of earth or sea. <!--Paragraph 18--> [[File:England grid map, Cosmographical Glasse (1559).jpg|thumb|'''Figure 3''': Grid map of England showing global coordinates from ''Cosmographical Glasse'' (1559)]] The value of these ruled lines was central to William Cuningham's ''The Cosmographical Glasse'' (1559). Cuningham's dialogue on "the pleasant Principles" of cosmography, geography, and hydrography relies heavily on such grid delineators as the equinoctial line, the meridian, the tropic and polar circles, and the lines of longitude and latitude. Following the instructions on how to make a map of England by use of parallel intersecting lines, we are told, (see Figure 3: Grid map of England showing global coordinates from Cuningham's ''Cosmographical Glasse'') "that the whole worke doth chieflye depende uppon the Meridian Line," its consequent lines of longitudes; "by Paralleles of Climates" and the lines of latitude. Furthermore, these instructions would allow one to "drawe a Carde for Spaine, Fraunce, Germany, Italye, Greece, or any perticuler region"—a prospect which prompts Cuningham's scholar to laud, "Oh how precious a Jewell is this, it may rightyly be called a Cosmographical Glasse, in which we may behold the diversitie of countries: natures of people, innumerable formes of Beastes, Foules Fishes, Trees, Frutes, Stremes, & Meatalles."<ref>''Cosmographical Glasse'' 120.</ref> That the gaze through the precious cosmographical glass promised more than a simple increased accuracy in navigation is something that was not lost on Cuningham, who notes in his preface the "manifold benefites"—civil, religious, physiological, intellectual—to be gained by the study of maps. Cuningham also claims that ancient empires understood the value of cartography, explaining that Alexander would display maps of lands marked for conquest <blockquote> for all men to behold, whereby the Capitaines did forsee, and seke out where was the easiest places to arrive, and Souldiors allured with the commodities of the Countries, were made the willinger to the thinge. This was it which gat him so many victories, and made his so great a Conqeror. This was it which obteined the Romanes their Fame, more then ther force and strength.<ref>''Cosmographical Glasse''.</ref> </blockquote> [[File:View of Norwich - The Cosmographical Glasse (1559).jpg|thumb|'''Figure 4''': Folding plate facing folio 8 (page 8): plan view of Norwich]] While much of ''The Cosmographical Glasse'' is concerned with lines latitude and longitude, Cuningham includes a bird's-eye-view map of Norwich as an example, he says, of chorography (see Figure 4: Map of Norwich from Cuningham's ''Cosmographical Glasse''). Upon the foregrounded hill stand two figures—presumably Cuningham's two dialogists—with a commanding view of the city, engaged in measuring the details of the city. <!--Paragraph 19--> In the decades that followed Cuningham's ''Cosmographical Glasse'' and Eden's translation of ''The Arte of Navigation'', the realization among those conceiving and begetting a British empire was that to rule the world, the world must first be ruled. Precise charting and effective colonizing were integral activities—and something that the Spanish had already recognized. During the effort to map New Spain in the 1570's, Barbara Mundy has noted, questionnaires filled out by Spanish officers in the New World were particularly concerned with measurements of longitude and latitude, demonstrating what Mundy calls "the inescapable print of Ptolemy's geographical grid."<ref>Barbara Mundy, ''The Mapping of New Spain: Indigenous Cartography and the Maps of the Relaciones Geográficas'' (Chicago: U of Chicago P, 1996) 30.</ref> During the English effort to establish new world colonies, the reports of voyages that appear in Hakluyt's ''Principal Navigations'' contain an increasing number of references to global coordinates as the sixteenth-century passes. <!--Paragraph 20--> The literature that Hakluyt compiled concerning the Muscovy Company's 1580 voyage to find the northeast passage to China illustrate this increased importance of cartographic information. In his instructions to shipmasters Arthur Pet and Charles Jackman, William Burrough notes the importance of keeping accurate time with the sand-glass (a measurement used for estimating longitude), and directs them to "diligently observe the latitude" and to draw on charts such coastal features as bays, rivers, hills, and woods: "These orders if you diligently observe, you may thereby perfectly set downe in the plats, that I have given you, your whole travell, and description of your discovery, which is a thing that will be chiefly expected at your hands."<ref>''Principal Navigations'' 3:260–61.</ref> <!--Paragraph 21--> Since the purpose of the voyage was the discovery of a new route to China, one might readily expect this privileging of cartographic information, but Burrough's instructions for surveillance nonetheless betrays an important shift in the purpose of such voyages. The search here is not for gold—a quest of a more monarchical and feudal character (yet one that explorers like Martin Frobisher and Raleigh were ostensibly still pursuing at the time) but rather for more grid coordinates and topographical and hydrographical description—a project more beneficial to nascent mercantile capitalism. The ensuing report from the unsuccessful search for a northeast passage anticipates the style of later voyage writing in that it contains less narrative and more figures, measurement, and a diligent record of latitudinal and longitudinal coordinates. <!--Paragraph 22--> Another document that appears in Hakluyt's ''Principal Navigations'' concerning this expedition is a brief note of advice from John Dee. Dee was a pioneer in arithmetical navigation, a mathematical advisor for the Muscovy company, and one of the early proponents of English colonization.<ref>Taylor writes that Dee was one of "the brains of the early colonizing movement"—among whom were also included the two Richard Hakluyts, Humphrey Gilbert, and George Peckham (''The Original Writings & Correspondence of the Two Richard Hakluyts'' 21–2). See also Waters, 525.</ref> He believed in a navigable northeast passage and had three years earlier talked with Abraham Ortelius about such a passage during the cartographer's visit to England.<ref>''The Original Writings & Correspondence of the Two Richard Hakluyts'', 19, 12.</ref> Most of Dee's brief note contains directions for finding the supposed passage—expressed almost entirely by reference to distances, longitude and latitude. Once arrived in China, Dee advises in the final paragraph, Pet and Jackman "may to great good purpose bee occupied . . . in discreet view . . . noting downe the situation of the Cities within land, &c. and ever assaying to come by some charts or maps of the countrey."<ref>''Principal Navigations'' 3: 263.</ref> That some of this cartographic reconnaissance was to be done "in discreet view" implies that such information was regarded as a kind of state secret. Indeed sixteenth-century unpublished maps were often highly guarded, and in his ''Discourse of Western Planting'' Richard Hakluyt complained that the primary reason for Ortelius' 1577 visit to England was "but to prye and looke into the secretes of ffrobishers voyadge."<ref>See Harley's "Maps, Knowledge, Power" for a brief consideration of cartography and secrecy in the sixteenth-century (284).</ref> <!--Paragraph 23--> As cartographers like Ortelius and Mercator continued to publish maps and atlases reflecting more current discoveries, the power that might be said to reside in any particular map was disseminated to those who, as John Dee said in his preface to a 1570 translation of Euclid's ''Elements of Geometrie'', "liketh, loveth, getteth, and useth, Mappes Chartes, & Geographicall Globes."<ref>Waters says that Cuningham's ''Cosmographical Glasse'' "brought the subject [of cosmography] from the scholars closet to the shelves of the gentry and the desks of the merchants" (99). No doubt, the publication of atlases and maps would have done the same.</ref> Despite Hakluyt's concern over the prying into Frobisher's findings, secrecy did not necessarily amplify the power and authority of a map.<ref>Helgerson observes that the influence of geographical knowledge on power in the sixteenth-century was different for each European nation. ''Forms of Nationhood'' 357.</ref> Indeed, Hakluyt's elder cousin, also named Richard Hakluyt, instructed Pet and Jackman to give the Chinese khan a copy of Ortelius' atlas, "for it would be to a Prince of marveilous account," and to <blockquote> Take with you the mappe of England set out in faire colours, one of the biggest sort I meane, to make shew of your country from whence you come. And also the large Mappe of London to make shew of your Citie. And let the river be drawen full of Ships of all sorts, to make the more shew of your great trade and traffike in trade of merchandize.<ref>''Principal Navigations'' 3:272.</ref> </blockquote> Here we see the map working not so much as a tool of surveillance, but as a signifier of power—in this case, as the river is to "be drawen full of ships," as a signifier of commercial power. This is not the only account of a divulgence of the new cosmographical knowledge with non-Europeans. In 1607, when John Smith, in a somewhat desperate effort to impress a very hostile army of Virginia natives, used a compass as a model of a globe to explain the "roundnesse of the earth" and the "greatness of the Land and Sea," he reports, "they all stood as amazed with admiration."<ref>Captain John Smith, ''The Complete Works'' ed. Philip L. Barbour (Chapel Hill: U of North Carolina P, 1986) 2:147.</ref> <!--Paragraph 24--> The apparent wizardry of navigational instruments and world maps that may have awed the khan of China or the chief of the Virginia Algonquins is only the most overt manner that cartographic representations acted as signifiers of power. As we have seen with the suggestion that the Thames be "drawen full of ships," the inscription of the cartographic gaze allows "fictions"—a term that Francis Drake used to decry sixteenth-century mapping errors, but one that, in contemporary map history and theory, would serve to define how maps reveal some element of invention, some trace of their ideological motivation, in their reflection of the world.<ref>Drake quoted in Helen Wallis, "The Cartography of Drake's Voyage." ''Sir Francis Drake and the Famous Voyage, 1577–1580''. Ed. Norman J. Thrower. Berkeley: U of California P, 1984: 159.</ref> These fictions—which appear most conspicuously as cartouches, inscriptions, royal or noble arms, the naming of physical features and cities, or decorative conventions like ships or sea monsters—would also include the bird's-eye-view and the grid coordinates; after all, the implied hill-side vantage points in the maps of Braun and Hogenberg were often non-existent; the world is not etched with parallel and perpendicular lines, nor for that matter is north "up"—and much has been written recently about how such cartographic fictions work as a mode of power.<ref>See especially the work of J.B. Harley, as well as Denis Wood's ''The Power of Maps'', and any number of recent articles in the journal ''Cartographica''.</ref> <!--Paragraph 25--> The surveillant gaze, however, while no doubt serving as an image of authority when it has become inscribed, printed, and viewed by Dee's map-reading public, is already a strategy of power before publication. While the military advantage provided from such a view is ancient, the very act of surveying the land was in sixteenth-century England becoming inseparable from the issue of authority and ownership as power increasingly emanated from ownership of land. In 1583, Edward Worsop wrote, "The common people are in great fear when survey is to be made of their land."<ref>Quoted in Taylor, "The Surveyor" 131.</ref> John Norden, who was also making outstanding county maps of England, published in 1607 ''The Surveyors Dialogue'', a book which, as well as offering technical instructions for executing accurate estate surveys, also attempts to appease what seems to have been a common mistrust of surveys. Norden's surveyor, who seeks the cooperation of a wary farmer, explains that—though many farmers "are so wise in their own conceit, as they thinke them fooles that give any assistance unto this worke"<ref>Norden, ''The Surueyors Dialogue'' (London: Hugh Astley, 1607) 24.</ref>—it is to the just benefit of both the landlord and tenant to have the land accurately surveyed. In the prefatory "Epistle to the Reader," Norden argues that "a due, true, and exact view and survey" of the tenants' land—which included not only a drawing, but an estimation of its revenue, of "the Quantities, and Qualities of Land"—is needed to guarantee that the "Lord be not abused, nor the tenants wronged." <!--Paragraph 26--> Richard Helgerson writes that it was just such surveyors and map-makers as Norden who, through their mapping of England during the reign of Elizabeth and James, began to dissolve the bond that Norden nonetheless maintains in his prefatory letter: the service and respect a landlord owes a king. Maps, says Helgerson, allowed the English to "see in a way never before possible the country—both county and nation—to which they belonged and at the same time showed royal authority—or at least its insignia—to be a merely ornamental adjunct to that country. Maps thus opened a conceptual gap between the land and its ruler, a gap that would eventually span battlefields."<ref>''Forms of Nationhood'' 114.</ref> He further suggests that the cartographic representation of a space, i.e. England, changed the perception and understanding of that space sufficiently to contribute to the subversion of monarchical power and to the establishment of a more modern construction of power in that space.<ref>Steven Mullaney treats the shifts from older, medieval to modern—more abstract and quantitative—understandings of space in Elizabethan England in his reading of John Stow's ''Survey of London'' (especially 15–20).</ref> <!--Paragraph 27--> How might Helgerson's thesis contribute to an understanding of the effect of the mapping of the New World that was being done at the same time?<ref>Helgerson does in fact devote a chapter to Richard Hakluyt's impact on English nationhood, though the function of cartography is not an issue here as it is in his reading of maps of England.</ref> By analogy, it would seem appropriate to posit that if the maps of England created an image of nationhood, the maps of the world—particularly those of potential colonial territory—would have created an image of empire. But perhaps a more fundamental point in understanding the relation of cartography and the beginnings of English empire is that maps—the inscribed gaze of authority if you will—invent and sometimes reinvent an idea of space and place. If we look at some of the tracts that served as propaganda for early English colonization, it becomes clear that these are not merely the written records of a voyage, but multi-faceted descriptions of the land which work to create as sharp an image of place as might be possible in a print medium. <!--Paragraph 28--> It was because George Peckham was seeking contributions for an expedition to continue Humphrey Gilbert's colonization efforts that he wrote in 1583 his ''True Report of the late discoveries'', which later appeared in Hakluyt's 1589 ''Principal Navigations''. While Peckham's book contains some chapters devoted to proving the moral and legal grounds for such colonization (the savages must be Christianized; the English have precedence in north Atlantic America), most of it is concerned with describing a potentially profitable colony. The first chapter, containing the possession ceremony discussed earlier, retells Edward Hayes' account—also published by Hakluyt in 1589—of what Hayes called the "exact discovery into the bowels of those maine, ample, and vast countreys, extended infinitely into the North from 30 degrees, or rather from 25 degrees of Septentionall atitude."<ref>Quinn, ''Voyages'' 385.</ref> For Peckham as well colonization was to be considered throughout this larger range of latitude—essentially the entire Atlantic coast of North America—"betweene the degrees of 30. and 60. of septentrionall latitude." Within this range of latitude, Peckham writes, <blockquote> by computation Astronomicall and Cosmographicall are doubtles to be founde, all thinges that be necessarie profitable, or delectable for mans life. The climate mylde and temperate, neither too hotte nor too colde, so that under the cope of heaven there is not any where to be founde a more convenient place to plant and inhabite in.<ref>Quinn, ''Voyages'' 447.</ref> </blockquote> Peckham's assertion that the suitability of this territory for western planting can be affirmed by "computation Astronomicall and Cosmographical" reveals the extent to which sixteenth-century geography was capable of shaping an image of a distant place. <!--Paragraph 29--> Climate was a particular concern in the literature on Newfoundland, and when Richard Whitborne—who claimed to have been present during Gilbert's possession ceremony of 1583—published his ''Discourse and Discovery of New-Found-Land'' (1620) to encourage colonization, he made a direct claim for Newfoundland's temperate climate based on latitudinal analogy: <blockquote> It is to be seene by the Cosmographers Maps, and well approved, that the New-found-land is an Iland, bordering upon the Continent of America, from which it is divided by the Sea: so farre distant, as England is from the neerest part of France, and lieth between 46 and 53 degrees North-latitude: It is as spacious as Ireland . . . and neere halfe the way between Ireland and Virginia. I shall not neede to commend the wholesome temperature of that Countrey, seeing the greatest part thereof lieth above foure degress neere to the South, then any part of England doth."<ref>''Newfoundland Discovered'' 116–7.</ref> </blockquote> Describing the "situation" of the land was a fairly conventional tactic in the propaganda for New World colonies, and some degree of geographical knowledge would have been expected from the community of readers for which such propaganda was intended. Whitborne assumes that the reader can visualize the size of Ireland, the distance to Virginia, and has studied the "Cosmographers maps." <!--Paragraph 30--> Such map-literate references were common by the 1620's when new efforts to colonize Newfoundland yielded other works of propaganda.<ref>John Mason's ''A Briefe Discourse of the Newfoundland with the Situation, temperture, and commodoties there-of'' (1620, reprinted in ''Newfoundland Discovered'') uses many of the same geographical comparisons to describe Newfoundland, though he points out that in America "any place under the same Parallel of another place in Europe, is as cold as those places which are situated in 12. or 13. degrees to the North wards therof" (97)—no doubt a more accurate assessment of the Newfoundland climate, but one which nonetheless too simply relies on latitude.</ref> What distinguishes this later wave of Newfoundland propaganda is that the reports strive for a more clearly cartographic depiction of the island than they did in the 1580's. In Whitborne's work, latitude is used to relate size, distance and climate, and, as seen earlier, John Guy's 1612 bird's-eye perspective of Placentia Bay presents a more precise and geometric landscape than similar reports from earlier colonialist writers. <!--Paragraph 31--> That cartographic elements are more clearly imbedded in the reports on the New World within a few decades after the work of Gilbert, Peckham, Dee, and the Hakluyts to encourage western planting underscores the importance of such elements in creating a place for colonization that was imaginable, identifiable, and readily located. One of the more renowned early propaganda tracts is Thomas Harriot's ''A Briefe and True Report of the Newfoundland of Virginia'', first published in 1588, and later in 1590 with the inclusion of Theodor De Bry's engravings of John White's paintings. Two of these engravings were based on White's map of Virginia—a map informed by the land surveying techniques of Thomas Harriot and which was by far the most accurate and valuable map of the region for many decades.<ref>Quinn, ''Roanoke'' 58.</ref> That Harriot—perhaps best known because of Marlowe's alleged blasphemous quip that "one Heriots being Sir W. Raleghs man" can do more than Moses, who "was but a Jugler"—should be both the author of this propaganda for American colonization and a brilliant mathematician who applied his science to surveying and navigation highlights the necessary links between two such undertakings. Harriot, who had first been employed by Raleigh as a mathematician—and was praised by Hakluyt as being "a man preeminent" in mathematics and navigation—wrote the navigational instructions for Barlow's 1584 Virginia voyage, and later served Raleigh in Ireland, probably even conducting surveys and making maps of Raleigh's extensive colonial plantations there.<ref>Taylor, ''Writings'' 366. See Shirley's biography for discussion of Harriot's relationship with Raleigh and his work as a surveyor in Virginia and Ireland.</ref> Yet Harriot's work for Raleigh on the 1585 voyage to Virginia entailed both his work as a colonial surveyor and, with the writing of his ''Briefe and True Report'', as a propagandist. Here the functions of the surveillant map-maker and the place-depicting, chorographic propagandist mesh neatly. <!--Paragraph 32--> Cartographic elements in ''A Briefe and True Report'' are most clearly seen in John White's depiction of the natives which comprises the fourth and most ethnographic section of Harriot's book. Very much like Braun and Hogenberg, White—or possibly De Bry—often places his specimen denizens in the foreground on a raised plateau or hill with a peopled landscape visible in the background. For most of these images, proportion suggests that the natives and their way of dressing is of greater importance than the topography. Nonetheless, of the twenty-one illustrations of these Algonquin people and their culture, only eight do not provide something like an elevated view, and all five of the images of the Picts—which were appended to show comparison between ancient northern Britons and contemporary Americans—are drawn in this manner. <!--Paragraph 33--> While the similarity between these images and those in Braun and Hogenberg prompts questions about the ethnological elements in their ''Civitates'' and in Münster's ''Cosmographei'', it also demonstrates the influence of cartography on Harriot, White and De Bry. Two of these illustrations—the only two, besides the actual maps, that do not isolate for study a native body or an activity—are of towns. The picture of "The Towne of Pomeiooc" (see Figure 5: Map of "Towne of Pomeioc" from Harriot's ''Briefe and True Report'') provides just enough foreground—a few small but close-up, indigenous plants drawn in White's naturalist manner—to suggest the hilltop view. The village itself is walled with large poles, has but one entrance, and contains some eighteen structures, some of which are labeled in a manner similar to their European counterparts. The "Towne of Secota" is similarly drawn and labeled and both pictures are filled in with depictions of Algonquin religious and economic or agricultural activity—Hakluyt's chief concerns in his ''Briefe and True Report'' and his rationale for colonizing these people. <!--Paragraph 34--> This surveillant eye implied by these illustrations encompasses more than the strict concerns of the cosmographer. Like Norden's surveyor, Harriot and White were to report not just the quantities, but the qualities of the land. That the agronomic elements were drawn in and labeled was of a piece with the whole of pattern of ''A Briefe and True Report''. The first two sections of the book enumerate and detail the "Marchantable Commodities"—any useful and profitable plants, animals, or minerals—that were found in Virginia. As a work of propaganda for mercantile trading, it is not surprising that it should contain an accounting of everything from sassafras to sturgeon. What is perhaps more interesting is how in so many reports from the New World this listing of natural resources is so closely connected to the function of the map-maker. White and Harriot, Pet and Jackman, and Gilbert's Newfoundland reconnaissance party were all to map land and simultaneously assess commodities. As we have already seen, even in the more casual hilltop surveillance of the land, like Barlow's or Raleigh's, the perspective provokes comments on the land's riches. <!--Paragraph 35--> The cataloging of commodities and the description of the people clearly contribute to the establishment of a sense of place in these reports. It would be tempting to broaden the definition somewhat and say every page of Harriot's ''A Briefe and True Report'' is a "map," an inscribed representation of place. John Smith seemed to be marketing to those who loved, bought, and used maps when he titled his 1612 report on the Jamestown colonization efforts, ''A Map of Virginia'', although the work contained but one map and many more pages of prose description of, as the subtitle stated, the ''Countrey, the Commodities, People, Government and Religion''. There is in fact a surprising lack of actual maps in Hakluyt's Principal Navigations, although the author acknowledges in his preface that "it would bee expected as necessarie, that the descriptions of so many parts of the world would farre more easily be conceived of the Readers, by adding Geographicall, and Hydrographicall tables thereunto." The only map that does appear in the four volumes of ''Principal Navigations'' is a fairly poor general map of the world.<ref>See Quinn and Skelton's discussion of this map in their introduction to ''Principal Navigations'' (xlviii–l).</ref> <!--Paragraph 36--> What was finally most important for the promoters of western planting was that the world could, to use Hakluyt's words, "easily be conceived." Conceived is a term full of meaning in this context, as Hakluyt had earlier encouraged Raleigh that his "bride," Virginia, "will shortly bring forth new and most abundant offspring, such as will delight you and yours, and cover with disgrace and shame those who have so often dared rashly and impudently to charge her with barreness."<ref>Taylor, ''Writings'', 367. Raleigh would later say "Guiana is a countrey that hath yet her maydenhead" (Hakluyt 10:428). For discussion of Raleigh, Guiana and gender, see Montrose, "The Work of Gender in the Discourse of Discovery." ''Representations'' 33 (1991): 1–41.</ref> Thomas Abbay, of the Jamestown colony, knew the importance of being able to "cousider, to conceave, & apprehend Virginia, which might be, or breed us a second India."<ref>Philip L. Barbour, ed., ''The Jamestown Voyages Under the First Charter, 1606–1609'' Hakluyt Society (Cambridge: Cambridge UP, 1969) 2: 331.</ref> <!--Paragraph 37--> Richard Whitborne coupled this feminine sexualizing of the New World with geographic land forms in his assertion that the peninsulas on the eastern side of Newfoundland resemble extended arms: "New-found-land (as it is here truly described) is little inferior to any other for the commodoties thereof; and lies, as it were, with open armes towards England, offering it selfe to be imbraced, and inhabited by us."<ref>''Newfoundland Discovered'' 111.</ref> This anthropomorphic image presupposes a concept of the geographic situation of the island, a concept engendered by the voyage accounts written by colonial propagandists and published by Hakluyt, as well as by recently published maps and atlases. <!--Paragraph 38--> That the literature served fundamentally the same purpose as the new maps was implied by George Peckham who, the first to remark the "arms" of Newfoundland, claimed that the island <blockquote> dooth (as it were with arme advaunced) above the climats both of Spayne and Fraunce, stretche out it selfe towardes England onelie. In manner praying our ayde and helpe, as it is not onelie set foorth in Mercators generall Mappe, but it is also founde to be true by the discovery of our nation."<ref>Quinn, ''Voyages'', 448.</ref> </blockquote> The New World this time is not offspring or breeder, but supplicant—and a very particular supplicant, asking for English deliverance only. The surveillant view from above provided by the cartographer's map and the English voyager's report constructs America as a place not only ideal for profitable colonies but in need of English and Christian salvation. <!--Paragraph 39--> At the very least we must regard the cartographer's chart of the territory and the writer's survey of land, commodities, and people as printed texts which allowed the English to conceive of colonial territory—conceive in colonial territory—by making it familiar, making it known.<ref>One of the clear effects of Harriot's ''Briefe and True Report'' was to make Virginia seem familiar, even English. Thus from the description of "Leekes differing little from ours in England" (17) to De Bry's Europeanized Algonquins, to the inclusion of images of Picts, "to showe how that the Inhabitants of the great Bretannie have bin in times past as savage as those of Virginia" (75), the Report domesticates this new land and people.</ref> To construct a locus through prose descriptions of terrain, plants, animals, and people is only a different mode than map-making provided of making it possible to behold the kingdoms of the world. The images that are simultaneously captured and created by these charts and by these reports are only the beginning of other English appropriations from and constructions of the new found land. ==Notes== {{reflist}} ==Works Cited== * Alpers, Svetlana''. The Art of Describing: Dutch Art in the Seventeenth Century. ''London: J. Murray, 1983. * Barbour, Philip L. ed. ''The Jamestown Voyages Under the First Charter, 1606–1609''. Hakluyt Society. Cambridge: Cambridge UP, 1969. * Braun , Georg and Remigius Hogenberg, ''Civitates Orbis Terrarum''. 1572. Cleveland: World, 1966. * Burton, Robert. ''The Anatomy of Melancholy''. London: Chatto and Windus, 1924. * Cell, Gillian T., ed. ''Newfoundland Discovered: English Attempts at Colonization, 1610–1630''. London: Hakluyt Society, 1982. * Cosgrove, Denis. "Prospect, Perspective, and the Evolution of the Landscape Idea." ''Transactions of the Institute of British Geographers'' 10 (1985): 47, 51. * Edgerton, Samuel Y. Jr.'' Renaissance Rediscovery of Linear Perspective''. New York: Basic Books, 1975. * Foucault, Michel.'' Power/Knowledge: Selected Interviews and Other Writing'' . Ed. Colin Gordon. Brighton: Harvester, 1986. * Greenblatt, Steven. ''Marvelous Possessions: The Wonders of the New World''. Chicago: U of Chicago P, 1991. * Hakluyt, Richard. ''The Principal Navigations, Voyages, Traffiques & Discoveries of the English Nation''. Glasgow: James MacLehose, 1904. * Harley, J.B. and David Woodward ,eds. ''Cartography in Prehistoric, Ancient, and Medieval Europe and the Mediterranean'' vol. 1 of ''The History of Cartography. ''Chicago: U of Chicago P, 1987. * Harvey, P.D.A.'' The History of Cartography. Vol. 1.'' Ed. J.B. Harley and David Woodward. Chicago: U of Chicago P, 1987. * Helgerson, Richard. ''Forms of Nationhood:the Elizabethan Writing of England. ''U of Chicago P, 1992. * Mason, John. ''A Briefe Discourse of the Newfoundland with the Situation, temperture, and commodoties there-of''. 1620. Reprinted ''Newfoundland Discovered.'' * Mundy, Barbara. ''The Mapping of New Spain: Indigenous Cartography and the Maps of the Relaciones Geográficas. ''Chicago: U of Chicago P, 1996. * Norden. ''The Surueyors Dialogue.'' London: Hugh Astley, 1607. * Oehme, R. "Introduction." ''Cosmographei. 1550. ''Amsterdam: Theatrum Orbis Terrarum, 1968. * Peckham , Sir George''. A True Report of the late discoveries, and possession, taken in the right of the Crowne of England, of the Newfound Landes (1583) ''The English Experience 341''. ''Amsterdam: Theatrum Orbis Terrarum; Da Capo Press, 1971. * Quinn, D.B., ed.'' The Voyages and Colonising Enterprises of Sir Humphrey Gilbert. ''2 Vols.'' ''Hakluyt Society Reprint''. ''Liechtenstein: Kraus, 1967. * ''---. The Roanoke Voyages: 1584–1590. ''2 vols. Hakluyt Society Reprint. Liechtenstein: Kraus, 1967. * Ryan, Simon''. The Cartographic Eye: How Explorers Saw Australia. ''Cambridge: Cambridge UP. 1996. * Smith, Captain John''. The Complete Works. Ed. Philip L. Barbour. ''Chapel Hill: U of North Carolina P, 1986. * Taylor, E.G.R., ed. ''The Original Writings & Correspondence of the Two Richard Hakluyts, 2 Vols. ''Hakluyt Society Reprint. Liechtenstein: Kraus, 1967. * Waters, David W.'' The Art of Navigation in England in Elizabethan and Early Stuart Times. ''London: Hollis and Carter, 1958. * Wallis, Helen. "The Cartography of Drake's Voyage." ''Sir Francis Drake and the Famous Voyage, 1577-1580''. Ed. Norman J. Thrower. Berkeley: U of California P, 1984. {{BookCat}} mfq9ceauykg01gdt18jq5e9y6pztmca User:Matovu Trevor/sandbox 2 485351 4671991 4670307 2026-09-23T18:36:23Z Matovu Trevor 3620409 4671991 wikitext text/x-wiki Social Behaviors The book examines how people behave and interact with others in families, schools, workplaces, communities, and online environments. It explores both positive and negative social behaviors and how they influence relationships and society. Target audience: Adults The language will be very clear, practical, and accessible to adult readers while introducing important psychological and social concepts where necessary. Book summary Social Behaviors provides a practical introduction to the ways people behave and interact with one another in everyday life. The book examines communication, co-operation, respect, empathy, conflict, peer influence, social norms, and behavior in digital spaces. It connects basic social and physiology concepts with practical examples that adults can apply in their personal, professional, and community relationships. Introduction: Beyond the Post Button The introduction explains why social behavior matters and how human interaction goes beyond online communication. It introduces the importance of understanding people's actions, emotions, communication styles, and responses in different social environments. Chapter one: Understanding Social behavior 1.1 Social behavior Social behavior refers to the way people behave, communicate and interact with one another in society. It includes the way people form relationships, cooperate, communicate, help others, respond to different situations and follow rules. Social behavior can be positive, such as kindness, cooperation and respect, or negative, such as aggression, discrimination and bullying. Social behavior is important because human beings live in groups and depend on one another. The way individuals behave affects their families, friends, schools, workplaces and communities. Social behavior is influenced by both nature and nurture. 1.2 Nature vs nurture Nature refers to the biological characteristics and tendencies that a person inherits from their parents. These may influence personality, temperament and the way a person naturally responds to situations. Nurture refers to the influence of the environment and experiences in which a person grows. Family upbringing, education, culture, friends, religion and the community can all shape behavior. Nature and nurture work together. For example, a person may naturally be quiet, but living in a supportive environment may help them become more confident and sociable. Culture is the shared way of life of a particular group of people. It includes language, beliefs, values, customs, traditions, food, dress and ways of interacting. Culture influences social behavior by teaching people what is considered right, wrong, polite or unacceptable. For example, in many communities, children are expected to respect and greet elders. 1.3 Social expectations Social expectations are the behaviors that people expect from others in particular situations. Students are expected to respect teachers, workers are expected to perform their duties, and members of a community are expected to follow accepted ways of living. However, expectations may differ between cultures. Understanding these differences helps people respect others and avoid misunderstandings. 1.4 Social norms Social norms are the accepted rules and standards that guide how people are expected to behave in society. Some norms are written, while others are unwritten. Examples include greeting people, respecting elders, queuing when waiting for a service, keeping public places clean and following laws. Social norms help to maintain order and make it easier for people to live peacefully together. When people repeatedly break important norms, they may face criticism, rejection or punishment. Social differences refer to the ways in which individuals and groups differ from one another. People may differ in age, gender, education, occupation, income, language, culture, personality and family background. Social differences can benefit society because people bring different ideas, skills, experiences and ways of thinking. However, when differences are not respected, they can lead to prejudice, discrimination, conflict and social exclusion. 1.5 Factors That Influence Social Behavior Several factors influence how people behave towards others. These include: Family: Children learn manners, values and ways of interacting from family members. Culture: Culture influences beliefs, customs and acceptable ways of behaving. Friends: Peer groups can influence attitudes, language and behavior. Education: Schools teach discipline, cooperation, responsibility and respect. Religion: Religious beliefs can influence moral values and relationships. Media and technology: Social media, television and the internet can influence people's attitudes and behaviour. Personality: People have different personalities, which affect how they interact with others. Environment: The community and surroundings where a person lives can shape behaviour. Life experiences: Experiences such as success, failure, conflict and friendship can change the way people behave. Chapter 2ː Communication and Human Interaction Communication is an important part of human interaction. People communicate every day with family members, friends, teachers, colleagues and other members of society. Good communication helps people understand one another, build relationships, solve problems and avoid unnecessary conflicts. Communication is not only about speaking. People also communicate through facial expressions, gestures, body movements, eye contact and tone of voice. 2.1 Verbal communication and Non-verbal communication Verbal communication is the use of spoken or written words to share information, thoughts, feelings and ideas with other people. Examples include; talking to a friend, giving instructions, having a conversation, making a speech, sending a text message, writing a letter or email. Effective verbal communication requires clear language, appropriate words and a message that the other person can understand. The way something is said is also important. A polite and calm tone can make communication more positive, while an angry or insulting tone can create conflict. Non-verbal communication is the passing of information without using spoken or written words. For example, smiling can show happiness or friendliness, while avoiding eye contact may sometimes show nervousness or discomfort. Non-verbal communication can support spoken words, but it can also sometimes send a different message from what a person is saying. 2.2 Empathy Empathy is the ability to understand and share another person's feelings or to try to see a situation from their point of view. An empathetic person tries to understand what another person may be experiencing instead of immediately judging them. For example, if a friend loses a loved one, showing empathy means listening to them, acknowledging their pain and offering appropriate support. Empathy helps people: build stronger relationships; understand others better; reduce conflicts; show compassion; provide emotional support. 2.3 Active Listening Active listening means giving full attention to another person in order to understand what they are saying. An active listener: pays attention; maintains appropriate eye contact; avoids unnecessary interruptions; asks questions when something is unclear; shows interest; remembers important information; responds appropriately. For example, when someone is explaining a problem, an active listener does not use the opportunity to prepare their own response. They first try to understand the person's message. Active listening improves communication because it reduces confusion and makes people feel heard and respected. 2.4 Misunderstandings and Their Causes A misunderstanding occurs when a person interprets a message differently from what the sender intended. Misunderstandings can happen in everyday conversations and may sometimes lead to arguments or broken relationships. Causes of misunderstandings Poor communication – A person may fail to explain their message clearly. Language differences – People may use different languages, accents or meanings of words. Poor listening – Someone may hear the words without paying attention to the actual message. Assumptions – A person may make conclusions without asking for clarification. Emotions – Anger, fear or sadness can affect how people understand messages. Cultural differences – The same gesture or expression may have different meanings in different cultures. Tone of voice – A message can sound rude, angry or sarcastic even when that was not intended. Non-verbal signals – Facial expressions and body language may contradict spoken words. Noise and distractions – Physical or technological distractions can cause people to miss important information. Misunderstandings can be reduced by speaking clearly, listening carefully, asking questions and avoiding unnecessary assumptions. 2.5 Respectful Communication Respectful communication is communicating with others in a polite, considerate and fair manner, even when people have different opinions. Respectful communication involves: using polite language; listening when others are speaking; avoiding insults and offensive language; respecting different opinions; speaking calmly; avoiding unnecessary shouting; giving others a chance to express themselves; disagreeing without attacking the person. For example, instead of saying, "You are completely wrong," a person can say, "I understand your point, but I have a different opinion." Respectful communication creates trust and makes it easier for people to solve disagreements peacefully. 2.6 Body Language Body language is the way people communicate through movements, posture, gestures and physical expressions. Examples of body language include: Eye contact: May show attention, confidence or interest. Smiling: May communicate friendliness or happiness. Crossed arms: May sometimes suggest defensiveness or discomfort. Nodding: Often shows agreement or that someone is following a conversation. Standing upright: May communicate confidence. Looking away: May sometimes indicate discomfort, distraction or lack of interest. Hand gestures: Can help explain or emphasize a message. However, body language should not always be interpreted in isolation. The meaning of a gesture can depend on the person's culture, situation and personality. 2.7 Importance of Effective Communication Effective communication helps people to: understand one another, build healthy relationships, express feelings and ideas, solve problems, prevent misunderstandings, manage conflicts, work together, develop trust and cooperation. Good communication therefore requires more than simply speaking. It involves speaking clearly, listening actively, showing empathy, using appropriate body language and respecting other people. Conclusion The book summarizes the importance of understanding social behavior and encourages readers to develop self-awareness, empathy, respect, communication skills, and responsible behavior in their interactions with others. References * Books on social psychology * Academic research on human behavior * Communication studies * Psychology textbooks * Research on social media and digital behavior * Relevant educational and professional resources ftm2g1nvpb3k3thzdxzyq79h6akg1ve Wikibooks:Reading room/Administrative Assistance/Archives/2026/September 4 485674 4672050 4671729 2026-09-24T08:10:21Z ArchiverBot 1227662 Bot: Archiving 1 thread from [[Wikibooks:Reading room/Administrative Assistance]] 4672050 wikitext text/x-wiki {{talk archive}} == Jeevandan26 reported by MathXplore == * {{userlinks|Jeevandan26}} Link spam, [[Special:AbuseLog/315288]] <!-- USERREPORTED:/Jeevandan26/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:14, 1 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:20, 1 September 2026 (UTC) == Gloriagulshan reported by MathXplore == * {{userlinks|Gloriagulshan}} [[:w:Wikipedia:Sockpuppet investigations/Kagoz]] ([[Special:Contributions/Tikapara]], [[Wikibooks:Reading_room/Administrative_Assistance/Archives/2025/September#Tikapara_reported_by_MathXplore]]), created page [[Introduction to Filmmaking]] Contributed by Ali Zulfikar Zahedi ([[:w:Ali Zulfikar Zahedi]], [[:w:simple:Ali Zulfikar Zahedi]]) <!-- USERREPORTED:/Gloriagulshan/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 03:56, 29 August 2026 (UTC) :I believe this page is intended as instructional material for learning filmmaking rather than as an encyclopedic article. I will revise the page to focus on practical filmmaking concepts, methods, and processes in accordance with the purpose of Wikibooks. [[User:Gloriagulshan|Gloriagulshan]] ([[User talk:Gloriagulshan|discuss]] • [[Special:Contributions/Gloriagulshan|contribs]]) 04:20, 29 August 2026 (UTC) : Cc: {{ping|SHB2000|MarcGarver}} [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 04:41, 29 August 2026 (UTC) ::I see the account is glocked, and there are no sleepers that aren't already locked, so nothing more to do. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 11:18, 3 September 2026 (UTC) == Mohansai00116 reported by MathXplore == * {{userlinks|Mohansai00116}} Link spam, [[Special:AbuseLog/315335]] <!-- USERREPORTED:/Mohansai00116/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:09, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:04, 3 September 2026 (UTC) == Fatemai6 reported by MathXplore == * {{userlinks|Fatemai6}} Link spam, [[Special:AbuseLog/315329]] <!-- USERREPORTED:/Fatemai6/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:10, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Kamrulhasan147 reported by MathXplore == * {{userlinks|Kamrulhasan147}} Link spam, [[Special:AbuseLog/315327]], [[Special:Contributions/Kamrulhasan142]] <!-- USERREPORTED:/Kamrulhasan147/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:12, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Kamrulhasan142 reported by MathXplore == * {{userlinks|Kamrulhasan142}} Link spam, [[Special:AbuseLog/315295]], [[Special:Contributions/Kamrulhasan147]] <!-- USERREPORTED:/Kamrulhasan142/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:13, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Twenty7incgs reported by MathXplore == * {{userlinks|Twenty7incgs}} Link spam, [[Special:AbuseLog/315323]] <!-- USERREPORTED:/Twenty7incgs/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:14, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Tailleash reported by MathXplore == * {{userlinks|Tailleash}} Link spam, [[Special:AbuseLog/315318]] <!-- USERREPORTED:/Tailleash/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:15, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Md Akash Mia12 reported by MathXplore == * {{userlinks|Md Akash Mia12}} Link spam, [[Special:AbuseLog/315299]], [[Special:AbuseLog/315298]] <!-- USERREPORTED:/Md Akash Mia12/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:17, 2 September 2026 (UTC) : {{done|Page deleted}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:03, 3 September 2026 (UTC) == Vapesitefiftybar reported by MathXplore == * {{userlinks|Vapesitefiftybar}} Link spam, [[Special:AbuseLog/315338]] <!-- USERREPORTED:/Vapesitefiftybar/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 13:40, 2 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:05, 3 September 2026 (UTC) == Myteethtime1 reported by MathXplore == * {{userlinks|Myteethtime1}} Spam <!-- USERREPORTED:/Myteethtime1/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:54, 4 September 2026 (UTC) : {{Done}} by MarcGarver. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:28, 4 September 2026 (UTC) == Rajstartupservices reported by MathXplore == * {{userlinks|Rajstartupservices}} Link spam, [[Special:AbuseLog/315363]] <!-- USERREPORTED:/Rajstartupservices/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 14:33, 4 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:28, 4 September 2026 (UTC) == Reazulkarim545456 reported by MathXplore == * {{userlinks|Reazulkarim545456}} Link spam, [[Special:AbuseLog/315377]] <!-- USERREPORTED:/Reazulkarim545456/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 06:39, 6 September 2026 (UTC) : {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:19, 6 September 2026 (UTC) == Fahmidafy reported by MathXplore == * {{userlinks|Fahmidafy}} Link spam, [[Special:AbuseLog/315378]] <!-- USERREPORTED:/Fahmidafy/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 06:40, 6 September 2026 (UTC) : The filter stopped them three times, no action taken. Please re-report if they continue spamming. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:20, 6 September 2026 (UTC) == Grow spark digital reported by MathXplore == * {{userlinks|Grow spark digital}} Link spam, [[Special:AbuseLog/315381]] <!-- USERREPORTED:/Grow spark digital/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 06:42, 6 September 2026 (UTC) : Only one filter hit, seems stale. Please re-report if they continue to spam. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:49, 6 September 2026 (UTC) == Korigosnacks reported by MathXplore == * {{userlinks|Korigosnacks}} Link spam, [[Special:AbuseLog/315383]] <!-- USERREPORTED:/Korigosnacks/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:32, 6 September 2026 (UTC) : Stale after only two filter hits and no edits. Please re-report if they spam later. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:56, 6 September 2026 (UTC) == Athoyislam reported by MathXplore == * {{userlinks|Athoyislam}} Spam <!-- USERREPORTED:/Athoyislam/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:47, 7 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 11:31, 7 September 2026 (UTC) == Jamal123lll reported by MathXplore == * {{userlinks|Jamal123lll}} Link spam, [[Special:AbuseLog/315402]] <!-- USERREPORTED:/Jamal123lll/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:48, 7 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 11:32, 7 September 2026 (UTC) == Idontknowidkh reported by MathXplore == * {{userlinks|Idontknowidkh}} online shopping spam, [[Special:AbuseLog/315400]] <!-- USERREPORTED:/Idontknowidkh/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 10:49, 7 September 2026 (UTC) :{{done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 11:33, 7 September 2026 (UTC) == Ridhisharma1999 reported by MathXplore == * {{userlinks|Ridhisharma1999}} Link spam, [[Special:AbuseLog/315435]] <!-- USERREPORTED:/Ridhisharma1999/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:01, 9 September 2026 (UTC) :{{Done}} ―[[User:Koavf|Justin (<span style="color:grey">ko'''a'''<span style="color:black">v</span>f</span>)]]<span style="color:red">❤[[User talk:Koavf|T]]☮[[Special:Contributions/Koavf|C]]☺[[Special:Emailuser/Koavf|M]]☯</span> 12:02, 9 September 2026 (UTC) 8fk1u1aerzujuqu1lbgdpriwhqnkfzf Moving objects in retarded gravitational potentials of an expanding spherical shell/Cosmology of retarded interaction 0 485676 4671983 4671945 2026-09-23T16:19:23Z Bautsch 630029 /* The mathematical core */ space characters / formula 4671983 wikitext text/x-wiki <noinclude> {{Chapter navigation|Gravitational redshift|Conclusion}} </noinclude> == Cosmology of retarded interaction == Modern astrophysics is based on the general theory of relativity (GR) because it has been confirmed by experiments such as the perihelion precession of Mercury or the detection of gravitational waves. A new model must prove that it also correctly describes all the effects that the general theory of relativity explains geometrically. To devise a disruptive cosmology that relies solely on classical, relativistic, and retarded gravitational potentials and dispenses with all ad hoc and a priori hypotheses – such as the equivalence principle of general relativity, cosmological constants, dark matter, dark energy, homogeneity, or isotropy – we must return to a dynamic field approach. To this end, the differential geometry required for general relativity can be replaced by a model that relies on pseudo-Euclidean geometry in Minkowski space. The central challenge is that classical Newtonian gravity acts instantaneously. To construct a consistent cosmology, retarded gravitational potentials can be introduced. This leads to an inherent time dependence and dynamics of the universe without the need to postulate an expansion of spacetime. In what follows, a draft of the '''cosmology of retarded interaction (CRI)''' is outlined. === The axioms of retarded interaction === Established physics is based on three pillars, which are used to build the cosmology of retarded interaction: # '''Classical mechanics:''' The force <math display="inline">F = m \cdot a</math> as the basis of the acceleration <math display="inline">a</math> of a mass <math display="inline">m</math> . # '''Relativistic kinematics:''' time dilation and length contraction according to the special theory of relativity, but without the curvature of spacetime. # '''Retarded gravitation:''' The gravitational effect propagates at the speed of light <math display="inline">c</math>. The potential <math display="inline">\Phi</math> at a point <math display="inline">\mathbf {r}</math> at time <math display="inline">t</math> depends on the state of the source at time <math display="inline">t - \Delta t</math>, where <math display="inline">\Delta t = \frac {r} {c}</math>. === The mathematical core === For the mathematical formulation, the gravitational potential can be substituted into the wave equation: :<math>\square \Phi = \left( \frac {1} {c^2} \frac {\partial^2} {\partial t^2} - \nabla^2 \right) \Phi = 4\pi G \rho (\vec {r}, t)</math> To calculate the gravitational potential at a given location <math>\vec {r}</math> at a specific time <math>t</math>, one must not use the current mass distribution <math>\rho (\vec {r}, t)</math>; rather, the mass distribution must be considered at a retarded time <math>t_{ret}</math>: :<math>t_{ret} = t - \frac {|\vec {r} - \vec {r}'|} {c}</math> The solution to this wave equation is the retarded potential: :<math>\Phi (\vec {r}, t) = -G \iiint \frac {\rho (\vec {r}', t_{ret})} {|\vec {r} - \vec {r}'|} d^3r'</math> In a universe with massive objects, gravity never acts instantaneously but always depends on the mass’s past position. This creates a phase shift between mass and force, as well as an attenuation of the retarded gravitational potentials. Since the particle horizon of a spherical kinematic universe expands at the speed of light in a vacuum, the density depends heavily on the distance from the observer. Observers at the centre see the edges as they were in the past, when the universe was still smaller and denser. For observers in the centre (<math>\vec {r} = 0</math>) of a mass distribution within a sphere with the radius <math>R</math> the integral above can be simplified with the linear shell mass densities <math>\lambda (r', t)</math> (in kilogram per metre) at their surfaces <math>A'</math>: :<math>\rho (r', t) = A' \cdot \lambda (r', t) = 4 \pi \cdot r'^2 \cdot \lambda (r', t)</math> :<math>\Phi (0, t) = -G \iiint \frac {\rho (\vec {r}', t_{ret})} {\vec {r}'} d^3r' = -4\pi G \int\limits_{0}^{R} \frac {\lambda (\vec {r}', t_{ret})} {\vec {r}'} r'^2 dr' = -4\pi G \int\limits_{0}^{R} \lambda (r', t_{ret}) \, r' dr'</math> The retarded radius <math>R_{ret}</math> of the surface of a sphere at the retarded time <math>t_{ret}</math> that moves away with the speed <math>v</math> is given by: :<math>R_{ret} (v) = c \cdot t_{ret} = v \left( t - \frac {R_{ret} (v)} {c} \right) = \frac {v \cdot t} {1 + \frac {v} {c}}</math> The maximum radius <math>R_{obs}</math> that can be experienced by an observer in the centre of the universe is the observable horizon at the retarded time <math>t_{ret}</math> that moved away with speed of light. It is given by the following limit: :<math>R_{obs} = \lim_{v \to c} R_{ret} (v) = \frac {c \cdot t} {2}</math> At a certain point in time <math>t_0</math> with a homogeneous mass distribution <math>\rho_0</math>, the retarded mass density <math>\rho_{ret}</math> is given by: :<math>\rho_{ret} = \rho (r', t_{ret}) = \rho \left( t - \frac {r'} {c} \right) = \rho_0 \cdot \left( \frac {t_0} {t - \frac {r'} {c}}\right)^3</math> Due to the effect of the retarded potentials the mass distribution becomes increasingly inhomogeneous over time. The gravitational potential in the centre at <math>r \approx 0</math> bocomes more and more flat, and the mass density in the out regions at <math>r \lessapprox R_{obs}</math> becomes higher and higher over time. Furthermore, the the radial velocity component <math>v (r, t)</math> of all mass points is increasing over time as well: :<math>0 \le v(r, t) \le v(r, t + \Delta t) < c</math> with <math>\Delta t \ge 0</math> This leads to an accelerated expansion with the acceleration <math>a(r, t)</math>: :<math>0 \le a(r, t) \le a(r, t + \Delta t)</math> An time-dependent inhomogenous mass distribution can be expressed by the dimensionless function <math>f (\xi, t_{ret})</math> with the dimensionless parameter <math>\xi</math>: :<math>\xi = \frac {r'} {c \cdot t_{ret}}</math> with <math>0 \le r' \le R_{ret}</math> and <math>0 \le \xi \le 1</math> With: :<math>t_{ret} = \frac {r'} {c \cdot \xi}</math> The Lorentz factor <math>\gamma</math> can also be taken into account. In special relativity it describes the increased relativistic mass <math>m_{rel} (v)</math> of a particle with the velocity <math>v</math> and the rest mass <math>m_0</math> as well as the increased mass density <math>\rho_{rel} (v)</math> of an appropriate space element with the rest mass density <math>\rho_0</math>: :<math>\gamma = \frac 1 {\sqrt{1 - \left( \frac{v}{c} \right) ^2}}</math> :<math>m_{rel} = \gamma \cdot m_0</math> :<math>\rho_{rel} = \gamma^2 \cdot \rho_0</math> Then the relativistic and retarded mass density distribution <math>\rho_{ret,rel}</math> is given by the initial shell mass density <math>\lambda_0</math> at the radius <math>r'_0</math> at the time <math>t_0</math>: :<math>\rho_{ret,rel} = \rho (r', t_{ret}, v) = \gamma^2 \cdot \rho_0 \cdot \left( \frac {t_0} {t - \frac {r'} {c}}\right)^3 \cdot f (\xi, t_{ret}) = \gamma^2 \cdot 4 \pi \cdot {r'_0}^2 \cdot \lambda_0 \cdot \left( \frac {t_0} {t_{ret}}\right)^3 \cdot f (\xi, t_{ret})</math> with <math>t_{ret,0} = \frac {r'_0} {c \cdot \xi}</math> === Cosmological mechanisms === ==== The apparent expansion ==== In general relativity, redshift is a stretching of spacetime. In the cosmology of retarded interaction, it is the result of a dynamic retardation in both time and space. Since the gravitational effect arrives retarded, the force of mass lags behind. In a system consisting of many particles, this leads to a continuous kinematic shift in their trajectories. When we receive light from distant sources, we do not observe an expansion of spacetime, but rather the cumulative effect of the net gravitational potentials on the propagation of light (gravitational redshift) and the relativistic potentials due to the motion of the source (Doppler redshift). ==== A replacement for dark matter ==== In the standard model of cosmology respectively the Lambda cold dark matter model (Lambda-CDM model or ΛCDM model), the flat rotation curves of galaxies are explained by dark matter which is even changing over time. In the cosmology of retarded interaction, they result from the retarded effect of the baryonic matter accreted by the galaxies. The stars in the outer regions of a galaxy respond to the gravitational potential of the center as it was millions of years ago. The force does not decrease as <math display="inline">1 / r^2</math> because the time delay generates an additional force component, similar to the Liénard–Wiechert potentials in electrodynamics. ==== A replacement for dark energy ==== In the cosmology of retarded interaction, accelerated expansion is interpreted as a cosmic phenomenon. The retarded gravitational potentials of homogeneously distributed masses – located in a spherical shell outside the sphere’s surface on which a moving test mass rests – lead to an net outward acceleration of the test mass, since masses in front of the test mass cause stronger retarded forces than opposing masses that reach the test mass with attenuated retarded forces. Consequently, all mass points moving in the universe drift apart at an accelerating rate because the net acting forces, due to the retardation, cause a radially outward acceleration force. As a result, matter in the outer regions of the universe becomes increasingly dense, creating an inhomogeneous mass distribution (black shell) that continuously amplifies the effect of the retarded potentials. The cosmology of retarded interaction therefore does not align with metric expansion, it only presupposes a static pseudo-Euclidean space. If spacetime itself were expanding, this would call into question or modify the speed of light <math display="inline">c</math> as a constant parameter for the retardation <math display="inline">\Delta t = r/c</math>. The cosmology of retarded interaction would thus actively dispute the thesis of metric expansion and interpret it as an optical illusion. In the cosmology of retarded interaction, expansion is not necessarily linked to an event such as the Big Bang, but is rather a dynamic process. The retardation of gravity gives rise to inhomogeneity. When moving masses are far enough apart that the time delay <math display="inline">\Delta t</math> effectively weakens and phase-shifts the effect of gravity, the objects begin to drift due to their kinetic motion. The farther they drift, the larger <math display="inline">\Delta t</math> becomes, and the weaker the retarded forces from the opposite side from the universe become the expansion accelerates without the need for dark energy. ==== The universe as a black hole ==== In general relativity, a black hole is a region of extreme spatial curvature. However, since cosmology of retarded interaction rejects spatial curvature and replaces it with retarded potentials, the concept of a black hole would have to be radically redefined. In cosmology of retarded interaction, a black hole would not be a geometric point, but rather a region of high mass density in which the gravitational potentials are so strong that the escape velocity <math display="inline">v_e \geq c</math> is reached. If our universe were the interior of such an object, we would find ourselves in a region where the retarded potentials are dominated by a massive external source which is located in the out regions of the universe. This region can be interpreted as a black shell. Since cosmology of retarded interaction is based on classical potentials, there is no mathematical necessity for a singularity. The retarded effect smooths out extreme gradients over time. A universe-black-hole in cosmology of retarded interaction would thus be more like a gigantic cluster of baryonic matter, within which we find ourselves. The observed physics would then be the superposition of the local forces and the global, retarded pull of the surrounding mass in the black shell. === Comparison with the standard model of cosmology === [[File:Gravitational.field.in.cosmology.of.retarded.interaction.png|thumb|upright=2|Gravitational field in the '''cosmology of retarded interaction''' within a '''spherical black shell''' of an expanding universe with retarded gravitational potentials:<br/>'''Vector field''' showing the direction of gravitational forces by {{blue|'''blue arrows'''}}.<br/>Corresponding '''scalar potential field''' indicating equipotential lines by {{red|'''red circles'''}}.]] The cosmology of retarded interaction does not rely on a priori hypotheses or ad hoc assumptions, which are taken for granted in the standard model of cosmology. {| class="wikitable" |+ Comparision standard model of cosmology (ΛCDM) and cosmology of retarded interaction (CRI) |- ! Concept !! Standard model of cosmology (GR / ΛCDM) !! Cosmology of retarded interaction (CRI) |- | Principle of equivalence || Hypothesis (general theory of relativity) confirmed on earth within the margins of measurement accuracy || No, gravitation has a scalar potential and its gradient is a force |- | Homogeneity || Ad hoc assumption (cosmological principle) || No homogeneity, higher mass and energy densities in outer regions of a kinematic universe |- | Isotropy || Ad hoc assumption (cosmological principle) || Only from the centre of a kinematic universe |- | Copernican principle || Ad hoc assumption || Milky Way in Local Group near the centre of a kinematic universe |- | Dark matter || Ad hoc assumption (non-baryonic particles) || Effect of retarded gravitational potentials |- | Dark energy || Ad hoc assumption (cosmological constant Λ) || Effect of retarded gravitational potentials |- | Rotation curves of spiral galaxies || Ad hoc assumption (dark matter) || Retarded gravitational potentials of accreted baryonic matter |- | High-redshift objects || Ad hoc assumption (cosmological redshift by expanding spacetime) || Gravitational redshift due to baryonic matter in black shell |- | Geometry || Dynamic differential geometry|| Static pseudo-Euclidean geometry |- | Spacetime || Curved spacetime || Minkowski spacetime |- | Spatial evolution of particle horizon || Accelerated expansion with superluminal speed || Expansion with speed of light |- | Spatial evolution of event horizon || Accelerated expansion with superluminal speed || Expansion of inner surface of massive mass shell with sub-light speed |- | Gravitational potential within universe || Constant || Increasing decrease as the distance from the center increases |- | Singularities || Points with infinite mass and energy density, event horizonts with infinite gravitational redshift || None |} === Summary === The universe is not expanding, and it is not curved. It is a system of masses distributed in flat space, whose mutual attraction is so time-delayed that the resulting trajectories and light signals create the illusion of an expanding geometry that is explained by dark matter and dark energy in the standard model of cosmology. The cosmology of retarded interaction consistently adheres to physical axioms (classical, relativistic, and retarded potentials). It dispenses with the geometric interpretation (no spatial curvature, no event horizon in the sense of general relativity) and regards everything as the result of forces, masses, and time delays. The dark components and spatial curvature are merely mathematical artifacts that arise when one attempts to describe the retarded force action using differential geometry. The universe is not viewed as a geometric black hole in the sense of general relativity, but rather as a massive and inhomogeneous system whose internal dynamics are governed by retarded potentials. Cosmology of retarded interaction is based solely on the view that the universe is a classical mechanical system with retardation. By introducing differential-geometric paradigms such as the curvature or stretching of spacetime, one departs from the disruptive paradigm of cosmology of retarded interaction and returns to general relativity. njagwplylqbfu29vckikk0fgrigkkl1 4671984 4671983 2026-09-23T16:27:33Z Bautsch 630029 /* Comparison with the standard model of cosmology */ non-baryonic particles without electromagnetic interaction 4671984 wikitext text/x-wiki <noinclude> {{Chapter navigation|Gravitational redshift|Conclusion}} </noinclude> == Cosmology of retarded interaction == Modern astrophysics is based on the general theory of relativity (GR) because it has been confirmed by experiments such as the perihelion precession of Mercury or the detection of gravitational waves. A new model must prove that it also correctly describes all the effects that the general theory of relativity explains geometrically. To devise a disruptive cosmology that relies solely on classical, relativistic, and retarded gravitational potentials and dispenses with all ad hoc and a priori hypotheses – such as the equivalence principle of general relativity, cosmological constants, dark matter, dark energy, homogeneity, or isotropy – we must return to a dynamic field approach. To this end, the differential geometry required for general relativity can be replaced by a model that relies on pseudo-Euclidean geometry in Minkowski space. The central challenge is that classical Newtonian gravity acts instantaneously. To construct a consistent cosmology, retarded gravitational potentials can be introduced. This leads to an inherent time dependence and dynamics of the universe without the need to postulate an expansion of spacetime. In what follows, a draft of the '''cosmology of retarded interaction (CRI)''' is outlined. === The axioms of retarded interaction === Established physics is based on three pillars, which are used to build the cosmology of retarded interaction: # '''Classical mechanics:''' The force <math display="inline">F = m \cdot a</math> as the basis of the acceleration <math display="inline">a</math> of a mass <math display="inline">m</math> . # '''Relativistic kinematics:''' time dilation and length contraction according to the special theory of relativity, but without the curvature of spacetime. # '''Retarded gravitation:''' The gravitational effect propagates at the speed of light <math display="inline">c</math>. The potential <math display="inline">\Phi</math> at a point <math display="inline">\mathbf {r}</math> at time <math display="inline">t</math> depends on the state of the source at time <math display="inline">t - \Delta t</math>, where <math display="inline">\Delta t = \frac {r} {c}</math>. === The mathematical core === For the mathematical formulation, the gravitational potential can be substituted into the wave equation: :<math>\square \Phi = \left( \frac {1} {c^2} \frac {\partial^2} {\partial t^2} - \nabla^2 \right) \Phi = 4\pi G \rho (\vec {r}, t)</math> To calculate the gravitational potential at a given location <math>\vec {r}</math> at a specific time <math>t</math>, one must not use the current mass distribution <math>\rho (\vec {r}, t)</math>; rather, the mass distribution must be considered at a retarded time <math>t_{ret}</math>: :<math>t_{ret} = t - \frac {|\vec {r} - \vec {r}'|} {c}</math> The solution to this wave equation is the retarded potential: :<math>\Phi (\vec {r}, t) = -G \iiint \frac {\rho (\vec {r}', t_{ret})} {|\vec {r} - \vec {r}'|} d^3r'</math> In a universe with massive objects, gravity never acts instantaneously but always depends on the mass’s past position. This creates a phase shift between mass and force, as well as an attenuation of the retarded gravitational potentials. Since the particle horizon of a spherical kinematic universe expands at the speed of light in a vacuum, the density depends heavily on the distance from the observer. Observers at the centre see the edges as they were in the past, when the universe was still smaller and denser. For observers in the centre (<math>\vec {r} = 0</math>) of a mass distribution within a sphere with the radius <math>R</math> the integral above can be simplified with the linear shell mass densities <math>\lambda (r', t)</math> (in kilogram per metre) at their surfaces <math>A'</math>: :<math>\rho (r', t) = A' \cdot \lambda (r', t) = 4 \pi \cdot r'^2 \cdot \lambda (r', t)</math> :<math>\Phi (0, t) = -G \iiint \frac {\rho (\vec {r}', t_{ret})} {\vec {r}'} d^3r' = -4\pi G \int\limits_{0}^{R} \frac {\lambda (\vec {r}', t_{ret})} {\vec {r}'} r'^2 dr' = -4\pi G \int\limits_{0}^{R} \lambda (r', t_{ret}) \, r' dr'</math> The retarded radius <math>R_{ret}</math> of the surface of a sphere at the retarded time <math>t_{ret}</math> that moves away with the speed <math>v</math> is given by: :<math>R_{ret} (v) = c \cdot t_{ret} = v \left( t - \frac {R_{ret} (v)} {c} \right) = \frac {v \cdot t} {1 + \frac {v} {c}}</math> The maximum radius <math>R_{obs}</math> that can be experienced by an observer in the centre of the universe is the observable horizon at the retarded time <math>t_{ret}</math> that moved away with speed of light. It is given by the following limit: :<math>R_{obs} = \lim_{v \to c} R_{ret} (v) = \frac {c \cdot t} {2}</math> At a certain point in time <math>t_0</math> with a homogeneous mass distribution <math>\rho_0</math>, the retarded mass density <math>\rho_{ret}</math> is given by: :<math>\rho_{ret} = \rho (r', t_{ret}) = \rho \left( t - \frac {r'} {c} \right) = \rho_0 \cdot \left( \frac {t_0} {t - \frac {r'} {c}}\right)^3</math> Due to the effect of the retarded potentials the mass distribution becomes increasingly inhomogeneous over time. The gravitational potential in the centre at <math>r \approx 0</math> bocomes more and more flat, and the mass density in the out regions at <math>r \lessapprox R_{obs}</math> becomes higher and higher over time. Furthermore, the the radial velocity component <math>v (r, t)</math> of all mass points is increasing over time as well: :<math>0 \le v(r, t) \le v(r, t + \Delta t) < c</math> with <math>\Delta t \ge 0</math> This leads to an accelerated expansion with the acceleration <math>a(r, t)</math>: :<math>0 \le a(r, t) \le a(r, t + \Delta t)</math> An time-dependent inhomogenous mass distribution can be expressed by the dimensionless function <math>f (\xi, t_{ret})</math> with the dimensionless parameter <math>\xi</math>: :<math>\xi = \frac {r'} {c \cdot t_{ret}}</math> with <math>0 \le r' \le R_{ret}</math> and <math>0 \le \xi \le 1</math> With: :<math>t_{ret} = \frac {r'} {c \cdot \xi}</math> The Lorentz factor <math>\gamma</math> can also be taken into account. In special relativity it describes the increased relativistic mass <math>m_{rel} (v)</math> of a particle with the velocity <math>v</math> and the rest mass <math>m_0</math> as well as the increased mass density <math>\rho_{rel} (v)</math> of an appropriate space element with the rest mass density <math>\rho_0</math>: :<math>\gamma = \frac 1 {\sqrt{1 - \left( \frac{v}{c} \right) ^2}}</math> :<math>m_{rel} = \gamma \cdot m_0</math> :<math>\rho_{rel} = \gamma^2 \cdot \rho_0</math> Then the relativistic and retarded mass density distribution <math>\rho_{ret,rel}</math> is given by the initial shell mass density <math>\lambda_0</math> at the radius <math>r'_0</math> at the time <math>t_0</math>: :<math>\rho_{ret,rel} = \rho (r', t_{ret}, v) = \gamma^2 \cdot \rho_0 \cdot \left( \frac {t_0} {t - \frac {r'} {c}}\right)^3 \cdot f (\xi, t_{ret}) = \gamma^2 \cdot 4 \pi \cdot {r'_0}^2 \cdot \lambda_0 \cdot \left( \frac {t_0} {t_{ret}}\right)^3 \cdot f (\xi, t_{ret})</math> with <math>t_{ret,0} = \frac {r'_0} {c \cdot \xi}</math> === Cosmological mechanisms === ==== The apparent expansion ==== In general relativity, redshift is a stretching of spacetime. In the cosmology of retarded interaction, it is the result of a dynamic retardation in both time and space. Since the gravitational effect arrives retarded, the force of mass lags behind. In a system consisting of many particles, this leads to a continuous kinematic shift in their trajectories. When we receive light from distant sources, we do not observe an expansion of spacetime, but rather the cumulative effect of the net gravitational potentials on the propagation of light (gravitational redshift) and the relativistic potentials due to the motion of the source (Doppler redshift). ==== A replacement for dark matter ==== In the standard model of cosmology respectively the Lambda cold dark matter model (Lambda-CDM model or ΛCDM model), the flat rotation curves of galaxies are explained by dark matter which is even changing over time. In the cosmology of retarded interaction, they result from the retarded effect of the baryonic matter accreted by the galaxies. The stars in the outer regions of a galaxy respond to the gravitational potential of the center as it was millions of years ago. The force does not decrease as <math display="inline">1 / r^2</math> because the time delay generates an additional force component, similar to the Liénard–Wiechert potentials in electrodynamics. ==== A replacement for dark energy ==== In the cosmology of retarded interaction, accelerated expansion is interpreted as a cosmic phenomenon. The retarded gravitational potentials of homogeneously distributed masses – located in a spherical shell outside the sphere’s surface on which a moving test mass rests – lead to an net outward acceleration of the test mass, since masses in front of the test mass cause stronger retarded forces than opposing masses that reach the test mass with attenuated retarded forces. Consequently, all mass points moving in the universe drift apart at an accelerating rate because the net acting forces, due to the retardation, cause a radially outward acceleration force. As a result, matter in the outer regions of the universe becomes increasingly dense, creating an inhomogeneous mass distribution (black shell) that continuously amplifies the effect of the retarded potentials. The cosmology of retarded interaction therefore does not align with metric expansion, it only presupposes a static pseudo-Euclidean space. If spacetime itself were expanding, this would call into question or modify the speed of light <math display="inline">c</math> as a constant parameter for the retardation <math display="inline">\Delta t = r/c</math>. The cosmology of retarded interaction would thus actively dispute the thesis of metric expansion and interpret it as an optical illusion. In the cosmology of retarded interaction, expansion is not necessarily linked to an event such as the Big Bang, but is rather a dynamic process. The retardation of gravity gives rise to inhomogeneity. When moving masses are far enough apart that the time delay <math display="inline">\Delta t</math> effectively weakens and phase-shifts the effect of gravity, the objects begin to drift due to their kinetic motion. The farther they drift, the larger <math display="inline">\Delta t</math> becomes, and the weaker the retarded forces from the opposite side from the universe become the expansion accelerates without the need for dark energy. ==== The universe as a black hole ==== In general relativity, a black hole is a region of extreme spatial curvature. However, since cosmology of retarded interaction rejects spatial curvature and replaces it with retarded potentials, the concept of a black hole would have to be radically redefined. In cosmology of retarded interaction, a black hole would not be a geometric point, but rather a region of high mass density in which the gravitational potentials are so strong that the escape velocity <math display="inline">v_e \geq c</math> is reached. If our universe were the interior of such an object, we would find ourselves in a region where the retarded potentials are dominated by a massive external source which is located in the out regions of the universe. This region can be interpreted as a black shell. Since cosmology of retarded interaction is based on classical potentials, there is no mathematical necessity for a singularity. The retarded effect smooths out extreme gradients over time. A universe-black-hole in cosmology of retarded interaction would thus be more like a gigantic cluster of baryonic matter, within which we find ourselves. The observed physics would then be the superposition of the local forces and the global, retarded pull of the surrounding mass in the black shell. === Comparison with the standard model of cosmology === [[File:Gravitational.field.in.cosmology.of.retarded.interaction.png|thumb|upright=2|Gravitational field in the '''cosmology of retarded interaction''' within a '''spherical black shell''' of an expanding universe with retarded gravitational potentials:<br/>'''Vector field''' showing the direction of gravitational forces by {{blue|'''blue arrows'''}}.<br/>Corresponding '''scalar potential field''' indicating equipotential lines by {{red|'''red circles'''}}.]] The cosmology of retarded interaction does not rely on a priori hypotheses or ad hoc assumptions, which are taken for granted in the standard model of cosmology. {| class="wikitable" |+ Comparision standard model of cosmology (ΛCDM) and cosmology of retarded interaction (CRI) |- ! Concept !! Standard model of cosmology (GR / ΛCDM) !! Cosmology of retarded interaction (CRI) |- | Principle of equivalence || Hypothesis (general theory of relativity) confirmed on earth within the margins of measurement accuracy || No, gravitation has a scalar potential and its gradient is a force |- | Homogeneity || Ad hoc assumption (cosmological principle) || No homogeneity, higher mass and energy densities in outer regions of a kinematic universe |- | Isotropy || Ad hoc assumption (cosmological principle) || Only from the centre of a kinematic universe |- | Copernican principle || Ad hoc assumption || Milky Way in Local Group near the centre of a kinematic universe |- | Dark matter || Ad hoc assumption (non-baryonic particles without electromagnetic interaction) || Effect of retarded gravitational potentials |- | Dark energy || Ad hoc assumption (cosmological constant Λ) || Effect of retarded gravitational potentials |- | Rotation curves of spiral galaxies || Ad hoc assumption (dark matter) || Retarded gravitational potentials of accreted baryonic matter |- | High-redshift objects || Ad hoc assumption (cosmological redshift by expanding spacetime) || Gravitational redshift due to baryonic matter in black shell |- | Geometry || Dynamic differential geometry|| Static pseudo-Euclidean geometry |- | Spacetime || Curved spacetime || Minkowski spacetime |- | Spatial evolution of particle horizon || Accelerated expansion with superluminal speed || Expansion with speed of light |- | Spatial evolution of event horizon || Accelerated expansion with superluminal speed || Expansion of inner surface of massive mass shell with sub-light speed |- | Gravitational potential within universe || Constant || Increasing decrease as the distance from the center increases |- | Singularities || Points with infinite mass and energy density, event horizonts with infinite gravitational redshift || None |} === Summary === The universe is not expanding, and it is not curved. It is a system of masses distributed in flat space, whose mutual attraction is so time-delayed that the resulting trajectories and light signals create the illusion of an expanding geometry that is explained by dark matter and dark energy in the standard model of cosmology. The cosmology of retarded interaction consistently adheres to physical axioms (classical, relativistic, and retarded potentials). It dispenses with the geometric interpretation (no spatial curvature, no event horizon in the sense of general relativity) and regards everything as the result of forces, masses, and time delays. The dark components and spatial curvature are merely mathematical artifacts that arise when one attempts to describe the retarded force action using differential geometry. The universe is not viewed as a geometric black hole in the sense of general relativity, but rather as a massive and inhomogeneous system whose internal dynamics are governed by retarded potentials. Cosmology of retarded interaction is based solely on the view that the universe is a classical mechanical system with retardation. By introducing differential-geometric paradigms such as the curvature or stretching of spacetime, one departs from the disruptive paradigm of cosmology of retarded interaction and returns to general relativity. le09vkntzbjuw7p8wpzojrzi9k6z8ep Wikijunior:Africa/Central African Republic 110 485720 4672017 4671598 2026-09-24T01:27:54Z TechVindicator 3626296 4672017 wikitext text/x-wiki [[File:Flag of the Central African Republic.svg|thumb|Flag of the Central African Republic|300px]] {{Under construction}} The '''Central African Republic''', commonly abbreviated CAR, is a country in Central Africa. The country borders Chad, Cameroon, the Republic of the Congo, the Democratic Republic of the Congo, South Sudan, and Sudan. The capital city of the Central African Republic is Bangui, which is also the country's largest city. The currency of the Central African Republic is the CFA franc, which is also used by five other Central African nations; Cameroon, Chad, Republic of the Congo, Equatorial Guinea and Gabon. == Central African Republic's History == [[File:Bokassa portrait (cropped).jpg|thumb|Jean-Bédel Bokassa in 1970]] === Beginnings === The Central African Republic as we know today was originally a colony of France, and gained independence from France on the 13th of August 1960, with David Dacko being the first president. Previously, the Central African Republic was an autonomous (being able to govern itself) part of France. === The Central African Empire and Coups === During 1976 and 1979, the name of the Central African Republic was the Central African Empire, after the then president of the Central African Republic and former member of the French Colonial Army, Jean-Bédel Bokassa, proclaimed himself as the emperor of Central Africa, which led to the name change. The coronation happened on the 4th of December, 1977, leading to Jean-Bédel Bokassa becoming Emperor Bokassa I. In 1979, Operation Caban happened, which was a plan backed by France to bring the Central African Republic, and Dacko back to power. This was successful, and Dacko was back in power. However, just two years later, another coup would happen in the Central African Republic. This new coup, which was led by the rebels of the army of the Central African Republic, would be supported by France and was led by André Kolingba. This coup succeeded, and Kolingba became the new president. ===Elections in 1992 and 1993=== After the Cold War in 1992, Kolingba was pressured to hold elections in 1992, which he finished last in. However, the result was cancelled by the Supreme Court, and in the following election, Kolingba lost to Ange-Félix Patassé, who won the election and became the new president. == Central African Republic's Geography == The Central African Republic borders six African countries, and it is located in the centre of Africa, north of the Equator. The capital city, Bangui, borders the Ubangi River, which separates Bangui and the northern part of the Democratic Republic of the Congo. The Central African Republic is a landlocked country, meaning it does not border any ocean. Mont Ngaoui is the highest point of the Central African Republic, with it being next to the border with Cameroon. <br> The Central African Republic is the 42nd biggest country in the world by size, covering 622,984 km², similar to the country of Ukraine == Central African Republic's People == The official languages of the Central African Republic are Sango and French. The current president of the Central African Republic is Faustin-Archange Touadéra, who became the president of the Central African Republic in 2016, having previously been the prime minister. Other famous politicians include: *Felix Moloua - the current prime minister of the Central African Republic. *Simplice Sarandji - the current leader of the National Assembly. *David Dacko - the first president of the Central African Republic. == Central African Republic's Sights == [[File:Manovo-Gounda St. Floris National Park map.png|thumb|The location of Manovo-Gounda St. Floris National Park on a map]] The Central African Republic has two UNESCO World Heritage Sites. These are: *Manovo-Gounda St Floris National Park - an area known for biodiversity. The area is marked in a red point on the map. It is considered '''endangered''' by UNESCO. *Sangha Trinational - This UNESCO world heritage site is divided with two other countries; Republic of the Congo and Cameroon. 2x258dd85dhaoaop0b33g8us9ah1545 Vehicle Identification Numbers (VIN codes)/Jaguar/VIN Codes 0 485791 4671986 4671933 2026-09-23T17:23:43Z JustTheFacts33 3434282 /* Engine Type (Position 7): */ 4671986 wikitext text/x-wiki {{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}} This VIN number decoding and designation system is used primarily for the North American Market. European and Asian markets use other decoding and designation systems. ==General Template for Jaguar's VIN format (2000 -)== ===Jaguar WMIs (2000-) (Position 1-3)=== * SAJ - Jaguar passenger car (UK) * SAD - Jaguar SUV (UK & Europe) * L2C - Chery Jaguar Land Rover (China) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * A - Solihull, West Midlands, England, UK * - Halewood, Merseyside, England, UK ==General Template for Jaguar's VIN format (1981 - 1999)== ===Jaguar WMIs (1981-1999) (Position 1-3)=== * SAJ - Jaguar passenger car ===Model Line=== {| class="wikitable" |+Position 4 !VIN code !Description |- |A |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ6]] ('81-'87), XJ6 Vanden Plas ('82-'87) |- |B |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '81-'88) |- |D |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '89-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('88-'89, '93-'94) |- |F |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('90-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6 Sovereign]] ('90-'92) |- |K |[[w:Jaguar XJ (XJ40)#Daimler/Vanden Plas|Jaguar XJ6 Vanden Plas]] ('88-'94) |- |M |[[w:Jaguar XJ (XJ40)#Majestic (1989–1992 – SWB; 1993–1994 – LWB)|Jaguar XJ6 Vanden Plas Majestic]] ('89-'90, '92) |- |M |[[w:Jaguar XJ (XJ40)#XJ12 and Daimler Double Six (XJ81)|Jaguar XJ12]] ('94) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6]] ('95-'97) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6L]] LWB [X330] ('97) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] SWB ('95) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] LWB [X330] ('96-'97) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] SWB ('95) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] LWB [X330] ('96) |- |P |[[w:Jaguar XJ (X300)#XJR (X306)|Jaguar XJR]] ('95-'97) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('98-'99) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] LWB ('98-'99) |- |K |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] LWB ('98-'99) |- |P |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('98-'99) |- |N |[[w:Jaguar XJS|Jaguar XJ-S]] ('82-'91), XJ-SC ('86-'88), XJS ('92-'96) |- |T |[[w:Jaguar XJS|Jaguar XJ-S]] Rouge Collection ('89-'90), Classic Collection ('90-'91) |- |S |[[w:Jaguar XJS#XJR-S|Jaguar XJR-S]] ('93) |- |G |[[w:Jaguar XK (X100)|Jaguar XK8]] ('97-'99) |} ===Class (Regional Spec)/Restraint System (Position 5):=== * V = N. American-spec (Manual seat belts) * L = Canadian-spec (Manual seat belts) * Y = XJ6 Vanden Plas [Series III] ('82-'87) (Manual seat belts) * A = Motorized Shoulder Belts (XJ-S coupe '88-'89, XJ-SC '88) * Y = Motorized Shoulder Belts (XJ-S coupe '89, XJ sedan '89-'92) * W = Manual seat belts, Driver-side airbag (US: XJ-S '90-'93, XJ6 '93, XJ12 Early '94) * X = Manual seat belts, Dual front airbags (US: XJS '94-'96, XJ6 '94-'97, XJ12 '94-'96, XJR '95-'97, XK8 '97-'99) * X = Manual seat belts, Dual front airbags, & Front Side Airbags (US: XJ8/XJR '98-'99) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: XJ8/XJR '99) * M = Manual seat belts, Driver-side airbag (Canada) * N = Manual seat belts, Dual front airbags (Canada) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: XJ8/XJR '99) ===Body Style (Position 6):=== * 1 = 4-door sedan (XJ-series sedan '81-'99) * 2 = 2-door convertible w/2+2 seating (XJS convertible '94-'96, XK8 convertible '97-'99) * 3 = 2-door Cabriolet (XJ-SC '86-'88) * 4 = 2-door convertible w/2-psgr. seating (factory-built XJS convertible '89-'94, XJR-S convertible '93) * 5 = 2-door coupe (XJS coupe '82-'96, XJR-S coupe '93, XK8 coupe '97-'99) * 5 = 2-door coupe (Hess & Eisenhardt-built XJS convertible '87-'88) [coupe conversion] ===Engine Type (Position 7):=== {| class="wikitable" |+Position 7 |- ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | 1 || 4.0L || I6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16S|Jaguar AJ16S I6]]. Jaguar XJR ('95-'97). |- | 2 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||CA & Canada-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'82). |- | 2 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('96-'97). |- | 3 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||N. America-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'87). |- | 3 || 6.0L || V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJR-S ('93), XJS ('94-'95), XJ12 ('94-'96). |- | 8 || 5.3L || V12 || Gas ||SOHC,<br /> 24 valve||N. America-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'92), XJ12 (Canada only: '88-'92). |- | 0 || 5.3L || V12 || Gas ||SOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'87), XJ12 (Canada only: '85-'87). |- | 5 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - Low Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88-'89). |- | 6 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - High Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'94), XJS ('93-'94). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('95-'96), XJS ('95-'96). |- | 7 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XK8 ('97). |- | 8 || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 AJ26S V8 engine]]. Jaguar XJR ('98-'99). |- | 9 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'93), XJS ('93). |} ===Transmission & Steering Location (Position 8):=== * 4 = Automatic / LHD * 8 = Manual / LHD ('93-'94 XJS 4.0 w/ optional 5-spd. manual) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * C - Browns Lane plant, Coventry, West Midlands, England, UK sm2ldu1nhrbia0dydhe6kaazyebc6nu 4672011 4671986 2026-09-24T01:07:33Z JustTheFacts33 3434282 /* Engine Type (Position 7): */ 4672011 wikitext text/x-wiki {{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}} This VIN number decoding and designation system is used primarily for the North American Market. European and Asian markets use other decoding and designation systems. ==General Template for Jaguar's VIN format (2000 -)== ===Jaguar WMIs (2000-) (Position 1-3)=== * SAJ - Jaguar passenger car (UK) * SAD - Jaguar SUV (UK & Europe) * L2C - Chery Jaguar Land Rover (China) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * A - Solihull, West Midlands, England, UK * - Halewood, Merseyside, England, UK ==General Template for Jaguar's VIN format (1981 - 1999)== ===Jaguar WMIs (1981-1999) (Position 1-3)=== * SAJ - Jaguar passenger car ===Model Line=== {| class="wikitable" |+Position 4 !VIN code !Description |- |A |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ6]] ('81-'87), XJ6 Vanden Plas ('82-'87) |- |B |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '81-'88) |- |D |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '89-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('88-'89, '93-'94) |- |F |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('90-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6 Sovereign]] ('90-'92) |- |K |[[w:Jaguar XJ (XJ40)#Daimler/Vanden Plas|Jaguar XJ6 Vanden Plas]] ('88-'94) |- |M |[[w:Jaguar XJ (XJ40)#Majestic (1989–1992 – SWB; 1993–1994 – LWB)|Jaguar XJ6 Vanden Plas Majestic]] ('89-'90, '92) |- |M |[[w:Jaguar XJ (XJ40)#XJ12 and Daimler Double Six (XJ81)|Jaguar XJ12]] ('94) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6]] ('95-'97) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6L]] LWB [X330] ('97) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] SWB ('95) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] LWB [X330] ('96-'97) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] SWB ('95) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] LWB [X330] ('96) |- |P |[[w:Jaguar XJ (X300)#XJR (X306)|Jaguar XJR]] ('95-'97) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('98-'99) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] LWB ('98-'99) |- |K |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] LWB ('98-'99) |- |P |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('98-'99) |- |N |[[w:Jaguar XJS|Jaguar XJ-S]] ('82-'91), XJ-SC ('86-'88), XJS ('92-'96) |- |T |[[w:Jaguar XJS|Jaguar XJ-S]] Rouge Collection ('89-'90), Classic Collection ('90-'91) |- |S |[[w:Jaguar XJS#XJR-S|Jaguar XJR-S]] ('93) |- |G |[[w:Jaguar XK (X100)|Jaguar XK8]] ('97-'99) |} ===Class (Regional Spec)/Restraint System (Position 5):=== * V = N. American-spec (Manual seat belts) * L = Canadian-spec (Manual seat belts) * Y = XJ6 Vanden Plas [Series III] ('82-'87) (Manual seat belts) * A = Motorized Shoulder Belts (XJ-S coupe '88-'89, XJ-SC '88) * Y = Motorized Shoulder Belts (XJ-S coupe '89, XJ sedan '89-'92) * W = Manual seat belts, Driver-side airbag (US: XJ-S '90-'93, XJ6 '93, XJ12 Early '94) * X = Manual seat belts, Dual front airbags (US: XJS '94-'96, XJ6 '94-'97, XJ12 '94-'96, XJR '95-'97, XK8 '97-'99) * X = Manual seat belts, Dual front airbags, & Front Side Airbags (US: XJ8/XJR '98-'99) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: XJ8/XJR '99) * M = Manual seat belts, Driver-side airbag (Canada) * N = Manual seat belts, Dual front airbags (Canada) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: XJ8/XJR '99) ===Body Style (Position 6):=== * 1 = 4-door sedan (XJ-series sedan '81-'99) * 2 = 2-door convertible w/2+2 seating (XJS convertible '94-'96, XK8 convertible '97-'99) * 3 = 2-door Cabriolet (XJ-SC '86-'88) * 4 = 2-door convertible w/2-psgr. seating (factory-built XJS convertible '89-'94, XJR-S convertible '93) * 5 = 2-door coupe (XJS coupe '82-'96, XJR-S coupe '93, XK8 coupe '97-'99) * 5 = 2-door coupe (Hess & Eisenhardt-built XJS convertible '87-'88) [coupe conversion] ===Engine Type (Position 7):=== {| class="wikitable" |+Position 7 |- ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | 1 || 4.0L || I6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16S|Jaguar AJ16S I6]]. Jaguar XJR ('95-'97). |- | 2 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||CA & Canada-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'82). |- | 2 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('96-'97). |- | 2 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XJ8 ('98), XK8 ('98). |- | 3 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||N. America-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'87). |- | 3 || 6.0L || V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJR-S ('93), XJS ('94-'95), XJ12 ('94-'96). |- | 5 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - Low Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88-'89). |- | 6 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - High Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'94), XJS ('93-'94). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('95-'96), XJS ('95-'96). |- | 7 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XK8 ('97). |- | 8 || 5.3L || V12 || Gas ||SOHC,<br /> 24 valve||N. America-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'92), XJ12 (Canada only: '88-'92). |- | 8 || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 AJ26S V8 engine]]. Jaguar XJR ('98-'99). |- | 9 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'93), XJS ('93). |- | 0 || 5.3L || V12 || Gas ||SOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'87), XJ12 (Canada only: '85-'87). |- | 0 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. Dual-canister evaporative emissions system. Enhanced evaporative emissions control system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ27 V8 engine]]. Jaguar XJ8 ('99), XK8 ('99). |} ===Transmission & Steering Location (Position 8):=== * 4 = Automatic / LHD * 8 = Manual / LHD ('93-'94 XJS 4.0 w/ optional 5-spd. manual) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * C - Browns Lane plant, Coventry, West Midlands, England, UK clwvfdscpjp0rkz8tx9nq0f3aly2cd4 4672012 4672011 2026-09-24T01:10:07Z JustTheFacts33 3434282 /* Engine Type (Position 7): */ 4672012 wikitext text/x-wiki {{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}} This VIN number decoding and designation system is used primarily for the North American Market. European and Asian markets use other decoding and designation systems. ==General Template for Jaguar's VIN format (2000 -)== ===Jaguar WMIs (2000-) (Position 1-3)=== * SAJ - Jaguar passenger car (UK) * SAD - Jaguar SUV (UK & Europe) * L2C - Chery Jaguar Land Rover (China) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * A - Solihull, West Midlands, England, UK * - Halewood, Merseyside, England, UK ==General Template for Jaguar's VIN format (1981 - 1999)== ===Jaguar WMIs (1981-1999) (Position 1-3)=== * SAJ - Jaguar passenger car ===Model Line=== {| class="wikitable" |+Position 4 !VIN code !Description |- |A |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ6]] ('81-'87), XJ6 Vanden Plas ('82-'87) |- |B |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '81-'88) |- |D |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '89-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('88-'89, '93-'94) |- |F |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('90-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6 Sovereign]] ('90-'92) |- |K |[[w:Jaguar XJ (XJ40)#Daimler/Vanden Plas|Jaguar XJ6 Vanden Plas]] ('88-'94) |- |M |[[w:Jaguar XJ (XJ40)#Majestic (1989–1992 – SWB; 1993–1994 – LWB)|Jaguar XJ6 Vanden Plas Majestic]] ('89-'90, '92) |- |M |[[w:Jaguar XJ (XJ40)#XJ12 and Daimler Double Six (XJ81)|Jaguar XJ12]] ('94) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6]] ('95-'97) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6L]] LWB [X330] ('97) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] SWB ('95) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] LWB [X330] ('96-'97) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] SWB ('95) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] LWB [X330] ('96) |- |P |[[w:Jaguar XJ (X300)#XJR (X306)|Jaguar XJR]] ('95-'97) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('98-'99) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] LWB ('98-'99) |- |K |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] LWB ('98-'99) |- |P |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('98-'99) |- |N |[[w:Jaguar XJS|Jaguar XJ-S]] ('82-'91), XJ-SC ('86-'88), XJS ('92-'96) |- |T |[[w:Jaguar XJS|Jaguar XJ-S]] Rouge Collection ('89-'90), Classic Collection ('90-'91) |- |S |[[w:Jaguar XJS#XJR-S|Jaguar XJR-S]] ('93) |- |G |[[w:Jaguar XK (X100)|Jaguar XK8]] ('97-'99) |} ===Class (Regional Spec)/Restraint System (Position 5):=== * V = N. American-spec (Manual seat belts) * L = Canadian-spec (Manual seat belts) * Y = XJ6 Vanden Plas [Series III] ('82-'87) (Manual seat belts) * A = Motorized Shoulder Belts (XJ-S coupe '88-'89, XJ-SC '88) * Y = Motorized Shoulder Belts (XJ-S coupe '89, XJ sedan '89-'92) * W = Manual seat belts, Driver-side airbag (US: XJ-S '90-'93, XJ6 '93, XJ12 Early '94) * X = Manual seat belts, Dual front airbags (US: XJS '94-'96, XJ6 '94-'97, XJ12 '94-'96, XJR '95-'97, XK8 '97-'99) * X = Manual seat belts, Dual front airbags, & Front Side Airbags (US: XJ8/XJR '98-'99) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: XJ8/XJR '99) * M = Manual seat belts, Driver-side airbag (Canada) * N = Manual seat belts, Dual front airbags (Canada) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: XJ8/XJR '99) ===Body Style (Position 6):=== * 1 = 4-door sedan (XJ-series sedan '81-'99) * 2 = 2-door convertible w/2+2 seating (XJS convertible '94-'96, XK8 convertible '97-'99) * 3 = 2-door Cabriolet (XJ-SC '86-'88) * 4 = 2-door convertible w/2-psgr. seating (factory-built XJS convertible '89-'94, XJR-S convertible '93) * 5 = 2-door coupe (XJS coupe '82-'96, XJR-S coupe '93, XK8 coupe '97-'99) * 5 = 2-door coupe (Hess & Eisenhardt-built XJS convertible '87-'88) [coupe conversion] ===Engine Type (Position 7):=== {| class="wikitable" |+Position 7 |- ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | 1 || 4.0L || I6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16S|Jaguar AJ16S I6]]. Jaguar XJR ('95-'97). |- | 2 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||CA & Canada-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'82). |- | 2 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('96-'97). |- | 2 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XJ8 ('98), XK8 ('98). |- | 3 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||N. America-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'87). |- | 3 || 6.0L || 60° V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJR-S ('93), XJS ('94-'95), XJ12 ('94-'96). |- | 5 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - Low Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88-'89). |- | 6 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - High Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'94), XJS ('93-'94). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('95-'96), XJS ('95-'96). |- | 7 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XK8 ('97). |- | 8 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||N. America-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'92), XJ12 (Canada only: '88-'92). |- | 8 || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 AJ26S V8 engine]]. Jaguar XJR ('98-'99). |- | 9 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'93), XJS ('93). |- | 0 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'87), XJ12 (Canada only: '85-'87). |- | 0 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. Dual-canister evaporative emissions system. Enhanced evaporative emissions control system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ27 V8 engine]]. Jaguar XJ8 ('99), XK8 ('99). |} ===Transmission & Steering Location (Position 8):=== * 4 = Automatic / LHD * 8 = Manual / LHD ('93-'94 XJS 4.0 w/ optional 5-spd. manual) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * C - Browns Lane plant, Coventry, West Midlands, England, UK 5sflrxki08z5e539pu58b1yc1u1lwuf 4672040 4672012 2026-09-24T03:28:22Z JustTheFacts33 3434282 /* Plant Codes (Position 11) */ 4672040 wikitext text/x-wiki {{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}} This VIN number decoding and designation system is used primarily for the North American Market. European and Asian markets use other decoding and designation systems. ==General Template for Jaguar's VIN format (2000 -)== ===Jaguar WMIs (2000-) (Position 1-3)=== * SAJ - Jaguar passenger car (UK) * SAD - Jaguar SUV (UK & Europe) * L2C - Chery Jaguar Land Rover (China) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Code/Model Line/Engine (Position 11)=== * X - Halewood, Merseyside, England, UK - X-Type 2.5 ('02-'05) * W - Halewood, Merseyside, England, UK - X-Type 3.0 ('02-'08) ===Plant Codes (Position 11)=== * A - Solihull, West Midlands, England, UK ==General Template for Jaguar's VIN format (1981 - 1999)== ===Jaguar WMIs (1981-1999) (Position 1-3)=== * SAJ - Jaguar passenger car ===Model Line=== {| class="wikitable" |+Position 4 !VIN code !Description |- |A |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ6]] ('81-'87), XJ6 Vanden Plas ('82-'87) |- |B |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '81-'88) |- |D |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '89-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('88-'89, '93-'94) |- |F |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('90-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6 Sovereign]] ('90-'92) |- |K |[[w:Jaguar XJ (XJ40)#Daimler/Vanden Plas|Jaguar XJ6 Vanden Plas]] ('88-'94) |- |M |[[w:Jaguar XJ (XJ40)#Majestic (1989–1992 – SWB; 1993–1994 – LWB)|Jaguar XJ6 Vanden Plas Majestic]] ('89-'90, '92) |- |M |[[w:Jaguar XJ (XJ40)#XJ12 and Daimler Double Six (XJ81)|Jaguar XJ12]] ('94) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6]] ('95-'97) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6L]] LWB [X330] ('97) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] SWB ('95) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] LWB [X330] ('96-'97) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] SWB ('95) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] LWB [X330] ('96) |- |P |[[w:Jaguar XJ (X300)#XJR (X306)|Jaguar XJR]] ('95-'97) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('98-'99) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] LWB ('98-'99) |- |K |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] LWB ('98-'99) |- |P |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('98-'99) |- |N |[[w:Jaguar XJS|Jaguar XJ-S]] ('82-'91), XJ-SC ('86-'88), XJS ('92-'96) |- |T |[[w:Jaguar XJS|Jaguar XJ-S]] Rouge Collection ('89-'90), Classic Collection ('90-'91) |- |S |[[w:Jaguar XJS#XJR-S|Jaguar XJR-S]] ('93) |- |G |[[w:Jaguar XK (X100)|Jaguar XK8]] ('97-'99) |} ===Class (Regional Spec)/Restraint System (Position 5):=== * V = N. American-spec (Manual seat belts) * L = Canadian-spec (Manual seat belts) * Y = XJ6 Vanden Plas [Series III] ('82-'87) (Manual seat belts) * A = Motorized Shoulder Belts (XJ-S coupe '88-'89, XJ-SC '88) * Y = Motorized Shoulder Belts (XJ-S coupe '89, XJ sedan '89-'92) * W = Manual seat belts, Driver-side airbag (US: XJ-S '90-'93, XJ6 '93, XJ12 Early '94) * X = Manual seat belts, Dual front airbags (US: XJS '94-'96, XJ6 '94-'97, XJ12 '94-'96, XJR '95-'97, XK8 '97-'99) * X = Manual seat belts, Dual front airbags, & Front Side Airbags (US: XJ8/XJR '98-'99) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: XJ8/XJR '99) * M = Manual seat belts, Driver-side airbag (Canada) * N = Manual seat belts, Dual front airbags (Canada) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: XJ8/XJR '99) ===Body Style (Position 6):=== * 1 = 4-door sedan (XJ-series sedan '81-'99) * 2 = 2-door convertible w/2+2 seating (XJS convertible '94-'96, XK8 convertible '97-'99) * 3 = 2-door Cabriolet (XJ-SC '86-'88) * 4 = 2-door convertible w/2-psgr. seating (factory-built XJS convertible '89-'94, XJR-S convertible '93) * 5 = 2-door coupe (XJS coupe '82-'96, XJR-S coupe '93, XK8 coupe '97-'99) * 5 = 2-door coupe (Hess & Eisenhardt-built XJS convertible '87-'88) [coupe conversion] ===Engine Type (Position 7):=== {| class="wikitable" |+Position 7 |- ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | 1 || 4.0L || I6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16S|Jaguar AJ16S I6]]. Jaguar XJR ('95-'97). |- | 2 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||CA & Canada-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'82). |- | 2 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('96-'97). |- | 2 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XJ8 ('98), XK8 ('98). |- | 3 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||N. America-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'87). |- | 3 || 6.0L || 60° V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJR-S ('93), XJS ('94-'95), XJ12 ('94-'96). |- | 5 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - Low Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88-'89). |- | 6 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - High Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'94), XJS ('93-'94). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('95-'96), XJS ('95-'96). |- | 7 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XK8 ('97). |- | 8 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||N. America-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'92), XJ12 (Canada only: '88-'92). |- | 8 || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 AJ26S V8 engine]]. Jaguar XJR ('98-'99). |- | 9 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'93), XJS ('93). |- | 0 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'87), XJ12 (Canada only: '85-'87). |- | 0 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. Dual-canister evaporative emissions system. Enhanced evaporative emissions control system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ27 V8 engine]]. Jaguar XJ8 ('99), XK8 ('99). |} ===Transmission & Steering Location (Position 8):=== * 4 = Automatic / LHD * 8 = Manual / LHD ('93-'94 XJS 4.0 w/ optional 5-spd. manual) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * C - Browns Lane plant, Coventry, West Midlands, England, UK 9jbkfbzt3az1g8gw4hi6gn0aumprsaq 4672047 4672040 2026-09-24T07:57:52Z JustTheFacts33 3434282 /* Plant Codes (Position 11) */ 4672047 wikitext text/x-wiki {{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}} This VIN number decoding and designation system is used primarily for the North American Market. European and Asian markets use other decoding and designation systems. ==General Template for Jaguar's VIN format (2000 -)== ===Jaguar WMIs (2000-) (Position 1-3)=== * SAJ - Jaguar passenger car (UK) * SAD - Jaguar SUV (UK & Europe) * L2C - Chery Jaguar Land Rover (China) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Code/Model Line/Engine (Position 11)=== * X - Halewood, Merseyside, England, UK - X-Type 2.5 ('02-'05) * W - Halewood, Merseyside, England, UK - X-Type 3.0 ('02-'08) ===Plant Codes (Position 11)=== * A - Solihull, West Midlands, England, UK (XE '17, F-Pace) * C - Castle Bromwich, West Midlands, England, UK (XE '17-'20, XF '16-'24, F-Type '18-'24) * 1 - Graz, Austria (Magna Steyr plant) (E-Pace, I-Pace EV) ==General Template for Jaguar's VIN format (1981 - 1999)== ===Jaguar WMIs (1981-1999) (Position 1-3)=== * SAJ - Jaguar passenger car ===Model Line=== {| class="wikitable" |+Position 4 !VIN code !Description |- |A |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ6]] ('81-'87), XJ6 Vanden Plas ('82-'87) |- |B |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '81-'88) |- |D |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '89-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('88-'89, '93-'94) |- |F |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('90-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6 Sovereign]] ('90-'92) |- |K |[[w:Jaguar XJ (XJ40)#Daimler/Vanden Plas|Jaguar XJ6 Vanden Plas]] ('88-'94) |- |M |[[w:Jaguar XJ (XJ40)#Majestic (1989–1992 – SWB; 1993–1994 – LWB)|Jaguar XJ6 Vanden Plas Majestic]] ('89-'90, '92) |- |M |[[w:Jaguar XJ (XJ40)#XJ12 and Daimler Double Six (XJ81)|Jaguar XJ12]] ('94) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6]] ('95-'97) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6L]] LWB [X330] ('97) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] SWB ('95) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] LWB [X330] ('96-'97) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] SWB ('95) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] LWB [X330] ('96) |- |P |[[w:Jaguar XJ (X300)#XJR (X306)|Jaguar XJR]] ('95-'97) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('98-'99) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] LWB ('98-'99) |- |K |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] LWB ('98-'99) |- |P |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('98-'99) |- |N |[[w:Jaguar XJS|Jaguar XJ-S]] ('82-'91), XJ-SC ('86-'88), XJS ('92-'96) |- |T |[[w:Jaguar XJS|Jaguar XJ-S]] Rouge Collection ('89-'90), Classic Collection ('90-'91) |- |S |[[w:Jaguar XJS#XJR-S|Jaguar XJR-S]] ('93) |- |G |[[w:Jaguar XK (X100)|Jaguar XK8]] ('97-'99) |} ===Class (Regional Spec)/Restraint System (Position 5):=== * V = N. American-spec (Manual seat belts) * L = Canadian-spec (Manual seat belts) * Y = XJ6 Vanden Plas [Series III] ('82-'87) (Manual seat belts) * A = Motorized Shoulder Belts (XJ-S coupe '88-'89, XJ-SC '88) * Y = Motorized Shoulder Belts (XJ-S coupe '89, XJ sedan '89-'92) * W = Manual seat belts, Driver-side airbag (US: XJ-S '90-'93, XJ6 '93, XJ12 Early '94) * X = Manual seat belts, Dual front airbags (US: XJS '94-'96, XJ6 '94-'97, XJ12 '94-'96, XJR '95-'97, XK8 '97-'99) * X = Manual seat belts, Dual front airbags, & Front Side Airbags (US: XJ8/XJR '98-'99) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: XJ8/XJR '99) * M = Manual seat belts, Driver-side airbag (Canada) * N = Manual seat belts, Dual front airbags (Canada) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: XJ8/XJR '99) ===Body Style (Position 6):=== * 1 = 4-door sedan (XJ-series sedan '81-'99) * 2 = 2-door convertible w/2+2 seating (XJS convertible '94-'96, XK8 convertible '97-'99) * 3 = 2-door Cabriolet (XJ-SC '86-'88) * 4 = 2-door convertible w/2-psgr. seating (factory-built XJS convertible '89-'94, XJR-S convertible '93) * 5 = 2-door coupe (XJS coupe '82-'96, XJR-S coupe '93, XK8 coupe '97-'99) * 5 = 2-door coupe (Hess & Eisenhardt-built XJS convertible '87-'88) [coupe conversion] ===Engine Type (Position 7):=== {| class="wikitable" |+Position 7 |- ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | 1 || 4.0L || I6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16S|Jaguar AJ16S I6]]. Jaguar XJR ('95-'97). |- | 2 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||CA & Canada-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'82). |- | 2 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('96-'97). |- | 2 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XJ8 ('98), XK8 ('98). |- | 3 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||N. America-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'87). |- | 3 || 6.0L || 60° V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJR-S ('93), XJS ('94-'95), XJ12 ('94-'96). |- | 5 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - Low Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88-'89). |- | 6 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - High Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'94), XJS ('93-'94). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('95-'96), XJS ('95-'96). |- | 7 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XK8 ('97). |- | 8 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||N. America-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'92), XJ12 (Canada only: '88-'92). |- | 8 || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 AJ26S V8 engine]]. Jaguar XJR ('98-'99). |- | 9 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'93), XJS ('93). |- | 0 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'87), XJ12 (Canada only: '85-'87). |- | 0 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. Dual-canister evaporative emissions system. Enhanced evaporative emissions control system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ27 V8 engine]]. Jaguar XJ8 ('99), XK8 ('99). |} ===Transmission & Steering Location (Position 8):=== * 4 = Automatic / LHD * 8 = Manual / LHD ('93-'94 XJS 4.0 w/ optional 5-spd. manual) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * C - Browns Lane plant, Coventry, West Midlands, England, UK cywsu812wtnqv2rzihc530e299bcies 4672049 4672047 2026-09-24T08:01:54Z JustTheFacts33 3434282 /* Plant Code/Model Line/Engine (Position 11) */ 4672049 wikitext text/x-wiki {{Vehicle Identification Numbers (VIN codes)/Warning}}{{clear}} This VIN number decoding and designation system is used primarily for the North American Market. European and Asian markets use other decoding and designation systems. ==General Template for Jaguar's VIN format (2000 -)== ===Jaguar WMIs (2000-) (Position 1-3)=== * SAJ - Jaguar passenger car (UK) * SAD - Jaguar SUV (UK & Europe) * L2C - Chery Jaguar Land Rover (China) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Code/Model Line/Engine (Position 11)=== * X - Halewood, Merseyside, England, UK - X-Type 2.5 ('02-'05) * W - Halewood, Merseyside, England, UK - X-Type 3.0 ('02-'08) * F - Castle Bromwich, West Midlands, England, UK - S-Type 3.0 ('00-'08) ===Plant Codes (Position 11)=== * A - Solihull, West Midlands, England, UK (XE '17, F-Pace) * C - Castle Bromwich, West Midlands, England, UK (XE '17-'20, XF '16-'24, F-Type '18-'24) * 1 - Graz, Austria (Magna Steyr plant) (E-Pace, I-Pace EV) ==General Template for Jaguar's VIN format (1981 - 1999)== ===Jaguar WMIs (1981-1999) (Position 1-3)=== * SAJ - Jaguar passenger car ===Model Line=== {| class="wikitable" |+Position 4 !VIN code !Description |- |A |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ6]] ('81-'87), XJ6 Vanden Plas ('82-'87) |- |B |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '81-'88) |- |D |[[w:Jaguar XJ#Series 3 (1979–1992)|Jaguar XJ12]] (Canada only: '89-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('88-'89, '93-'94) |- |F |[[w:Jaguar XJ (XJ40)|Jaguar XJ6]] ('90-'92) |- |H |[[w:Jaguar XJ (XJ40)|Jaguar XJ6 Sovereign]] ('90-'92) |- |K |[[w:Jaguar XJ (XJ40)#Daimler/Vanden Plas|Jaguar XJ6 Vanden Plas]] ('88-'94) |- |M |[[w:Jaguar XJ (XJ40)#Majestic (1989–1992 – SWB; 1993–1994 – LWB)|Jaguar XJ6 Vanden Plas Majestic]] ('89-'90, '92) |- |M |[[w:Jaguar XJ (XJ40)#XJ12 and Daimler Double Six (XJ81)|Jaguar XJ12]] ('94) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6]] ('95-'97) |- |H |[[w:Jaguar XJ (X300)|Jaguar XJ6L]] LWB [X330] ('97) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] SWB ('95) |- |K |[[w:Jaguar XJ (X300)#Daimler/Jaguar Vanden Plas|Jaguar XJ6 Vanden Plas]] LWB [X330] ('96-'97) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] SWB ('95) |- |M |[[w:Jaguar XJ (X300)#XJ12 (X305)|Jaguar XJ12]] LWB [X330] ('96) |- |P |[[w:Jaguar XJ (X300)#XJR (X306)|Jaguar XJR]] ('95-'97) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('98-'99) |- |H |[[w:Jaguar XJ (X308)|Jaguar XJ8L]] LWB ('98-'99) |- |K |[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] LWB ('98-'99) |- |P |[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('98-'99) |- |N |[[w:Jaguar XJS|Jaguar XJ-S]] ('82-'91), XJ-SC ('86-'88), XJS ('92-'96) |- |T |[[w:Jaguar XJS|Jaguar XJ-S]] Rouge Collection ('89-'90), Classic Collection ('90-'91) |- |S |[[w:Jaguar XJS#XJR-S|Jaguar XJR-S]] ('93) |- |G |[[w:Jaguar XK (X100)|Jaguar XK8]] ('97-'99) |} ===Class (Regional Spec)/Restraint System (Position 5):=== * V = N. American-spec (Manual seat belts) * L = Canadian-spec (Manual seat belts) * Y = XJ6 Vanden Plas [Series III] ('82-'87) (Manual seat belts) * A = Motorized Shoulder Belts (XJ-S coupe '88-'89, XJ-SC '88) * Y = Motorized Shoulder Belts (XJ-S coupe '89, XJ sedan '89-'92) * W = Manual seat belts, Driver-side airbag (US: XJ-S '90-'93, XJ6 '93, XJ12 Early '94) * X = Manual seat belts, Dual front airbags (US: XJS '94-'96, XJ6 '94-'97, XJ12 '94-'96, XJR '95-'97, XK8 '97-'99) * X = Manual seat belts, Dual front airbags, & Front Side Airbags (US: XJ8/XJR '98-'99) * D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: XJ8/XJR '99) * M = Manual seat belts, Driver-side airbag (Canada) * N = Manual seat belts, Dual front airbags (Canada) * F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: XJ8/XJR '99) ===Body Style (Position 6):=== * 1 = 4-door sedan (XJ-series sedan '81-'99) * 2 = 2-door convertible w/2+2 seating (XJS convertible '94-'96, XK8 convertible '97-'99) * 3 = 2-door Cabriolet (XJ-SC '86-'88) * 4 = 2-door convertible w/2-psgr. seating (factory-built XJS convertible '89-'94, XJR-S convertible '93) * 5 = 2-door coupe (XJS coupe '82-'96, XJR-S coupe '93, XK8 coupe '97-'99) * 5 = 2-door coupe (Hess & Eisenhardt-built XJS convertible '87-'88) [coupe conversion] ===Engine Type (Position 7):=== {| class="wikitable" |+Position 7 |- ! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications |- | 1 || 4.0L || I6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16S|Jaguar AJ16S I6]]. Jaguar XJR ('95-'97). |- | 2 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||CA & Canada-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'82). |- | 2 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('96-'97). |- | 2 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XJ8 ('98), XK8 ('98). |- | 3 || 4.2L || I6 || Gas ||DOHC,<br /> 12 valve||N. America-spec. MPI. [[w:Jaguar XK engine|Jaguar XK I6]]. Jaguar XJ6 ('81-'87). |- | 3 || 6.0L || 60° V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJR-S ('93), XJS ('94-'95), XJ12 ('94-'96). |- | 5 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - Low Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88-'89). |- | 6 || 3.6L || I6 || Gas ||DOHC,<br /> 24 valve||N. America-spec - High Compression. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('88). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'94), XJS ('93-'94). |- | 7 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||MPI. [[w:Jaguar AJ6 engine#AJ16|Jaguar AJ16 I6]]. Jaguar XJ6 ('95-'96), XJS ('95-'96). |- | 7 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ26 V8 engine]]. Jaguar XK8 ('97). |- | 8 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||N. America-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'92), XJ12 (Canada only: '88-'92). |- | 8 || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. Dual-canister evaporative emissions system. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 AJ26S V8 engine]]. Jaguar XJR ('98-'99). |- | 9 || 4.0L || I6 || Gas ||DOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar AJ6 engine|Jaguar AJ6 I6]]. Jaguar XJ6 ('90-'93), XJS ('93). |- | 0 || 5.3L || 60° V12 || Gas ||SOHC,<br /> 24 valve||Canada-spec. MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar XJ-S ('82-'87), XJ12 (Canada only: '85-'87). |- | 0 || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. Dual-canister evaporative emissions system. Enhanced evaporative emissions control system. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 AJ27 V8 engine]]. Jaguar XJ8 ('99), XK8 ('99). |} ===Transmission & Steering Location (Position 8):=== * 4 = Automatic / LHD * 8 = Manual / LHD ('93-'94 XJS 4.0 w/ optional 5-spd. manual) ===Check Digit/Gearbox (Position 9)=== * USA /Canada [[Vehicle Identification Numbers (VIN codes)/Check digit|Check digit]] ===Model Year Code (Position 10)=== ''See: [[Vehicle Identification Numbers (VIN codes)/Model year]]'' ===Plant Codes (Position 11)=== * C - Browns Lane plant, Coventry, West Midlands, England, UK 1nfnwm6sql5zo51ijmh1v39ib9gcge3 User talk:Makowe2026/sandbox/Social Media Management 3 485809 4671965 2026-09-23T13:00:38Z Makowe2026 3620023 Responded to an email 4671965 wikitext text/x-wiki Hello Eggroll. I am responding to an email that you sent to me about the possibility of deleting the book i had started writing. While the book is not perfect, its totally understandable on my side since this is my very first attempt to write a book! For this reason, i think that its unfair to suggest that this book should be deleted with such speed! Secondly, i am reliably aware that i can use the sandbox to learn how to do any project without limitations! Does this therefore mean that i accidently published the book in the main space!? I also think that it would be appropriate for you to suggest to me helpful ways that will aid me to improve on this book! deleting the book immediately without underscoring the reasons for the same would be unfair. 67f9mktsw1r9g1rgxcolwk1bf3yi1lx User talk:Atiedebee 3 485810 4671966 2026-09-23T13:16:42Z TechVindicator 3626296 Welcoming user with {{Welcome}} 4671966 wikitext text/x-wiki ==Welcome!== {| style="background:white; border:1px solid #abd5f5;; padding:0px; border-spacing:0px; color: #000000;" ! style="background:#d0e5f5; color: #000000;" | [[Wikibooks:Welcome|Getting started]] with Wikibooks |- | style="padding:5px;" | * Wikibooks is a collection of open-source textbooks. Find out [[WB:WIW|what this means]]. * To sign your name (on discussion pages), use four tildes, like this: &#126;&#126;&#126;&#126; * Learn how to [[Using Wikibooks|use Wikibooks]] and learn more about the community. * [[WB:CCO|Explore]], [[Wikibooks:Be bold|be bold]], and have fun! |} If you have any questions, you can ask in the [[Wikibooks:Reading room/Assistance|assistance reading room]] or possibly contact me personally. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:16, 23 September 2026 (UTC) f3705rgyf02sdthlnsfiz14rdd2cvvc Cookbook:Family Pizza 102 485811 4671967 2026-09-23T13:48:41Z TechVindicator 3626296 Create. This is a translated text from frwikibooks, with the original at [[fr:Livre de cuisine/Pizza familiale]] version 710474. This content has been adapted and translated into English. 4671967 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of flour * 180ml warm water * ⅔ sachet of baker's yeast * 1 teaspoon salt * 1 teaspoon granulated sugar * 1 tablespoon olive oil ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Dice the mozzarella. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (022).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 15 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 16 (after cooking) </gallery> [[fr:Livre de cuisine/Pizza familiale]] 7nqfb21i6ibti14wruz95jra6slpbqw 4671968 4671967 2026-09-23T13:49:05Z TechVindicator 3626296 added [[Category:Recipes for pizza]] using [[Help:Gadget-HotCat|HotCat]] 4671968 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of flour * 180ml warm water * ⅔ sachet of baker's yeast * 1 teaspoon salt * 1 teaspoon granulated sugar * 1 tablespoon olive oil ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Dice the mozzarella. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (022).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 15 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 16 (after cooking) </gallery> [[Category:Recipes for pizza]] [[fr:Livre de cuisine/Pizza familiale]] 0bgij0i8jwzgmyqxhb4wjghhcn420so 4671970 4671968 2026-09-23T13:50:46Z TechVindicator 3626296 added [[Category:Recipes using emmental]] using [[Help:Gadget-HotCat|HotCat]] 4671970 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of flour * 180ml warm water * ⅔ sachet of baker's yeast * 1 teaspoon salt * 1 teaspoon granulated sugar * 1 tablespoon olive oil ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Dice the mozzarella. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (022).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 15 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 16 (after cooking) </gallery> [[Category:Recipes for pizza]] [[Category:Recipes using emmental]] [[fr:Livre de cuisine/Pizza familiale]] mr513mjeknus7xazlimmekfx928yll2 4671971 4671970 2026-09-23T13:51:06Z TechVindicator 3626296 added [[Category:Recipes using mozzarella]] using [[Help:Gadget-HotCat|HotCat]] 4671971 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of flour * 180ml warm water * ⅔ sachet of baker's yeast * 1 teaspoon salt * 1 teaspoon granulated sugar * 1 tablespoon olive oil ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Dice the mozzarella. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (022).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 15 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 16 (after cooking) </gallery> [[Category:Recipes for pizza]] [[Category:Recipes using emmental]] [[Category:Recipes using mozzarella]] [[fr:Livre de cuisine/Pizza familiale]] 49b4yte1d26yxsk5dkxetnh9tpauji4 4671972 4671971 2026-09-23T13:54:25Z TechVindicator 3626296 /* Dough */ +links 4671972 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of [[Cookbook:Flour|flour]] * 180ml warm water * ⅔ sachet of [[Cookbook:Yeast|baker's yeast]] * 1 teaspoon [[Cookbook:Salt|salt]] * 1 teaspoon [[Cookbook:Sugar|granulated sugar]] * 1 tablespoon [[Cookbook:Olive Oil|olive oil]] ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Dice the mozzarella. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (022).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 15 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 16 (after cooking) </gallery> [[Category:Recipes for pizza]] [[Category:Recipes using emmental]] [[Category:Recipes using mozzarella]] [[fr:Livre de cuisine/Pizza familiale]] lycfwn89zxb53ry6edqgoklixiyg5ng 4671974 4671972 2026-09-23T13:57:10Z TechVindicator 3626296 +[[Category:Recipes using yeast]]; +[[Category:Recipes using flour]] using [[Help:Gadget-HotCat|HotCat]] 4671974 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of [[Cookbook:Flour|flour]] * 180ml warm water * ⅔ sachet of [[Cookbook:Yeast|baker's yeast]] * 1 teaspoon [[Cookbook:Salt|salt]] * 1 teaspoon [[Cookbook:Sugar|granulated sugar]] * 1 tablespoon [[Cookbook:Olive Oil|olive oil]] ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Dice the mozzarella. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (022).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 15 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 16 (after cooking) </gallery> [[Category:Recipes for pizza]] [[Category:Recipes using emmental]] [[Category:Recipes using mozzarella]] [[Category:Recipes using yeast]] [[Category:Recipes using flour]] [[fr:Livre de cuisine/Pizza familiale]] mnvtarmx4ht3dvxupdeponlqw2c3nh6 4671975 4671974 2026-09-23T13:58:18Z TechVindicator 3626296 +recipe 4671975 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} {{recipe}} '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of [[Cookbook:Flour|flour]] * 180ml warm water * ⅔ sachet of [[Cookbook:Yeast|baker's yeast]] * 1 teaspoon [[Cookbook:Salt|salt]] * 1 teaspoon [[Cookbook:Sugar|granulated sugar]] * 1 tablespoon [[Cookbook:Olive Oil|olive oil]] ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Dice the mozzarella. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (022).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 15 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 16 (after cooking) </gallery> [[Category:Recipes for pizza]] [[Category:Recipes using emmental]] [[Category:Recipes using mozzarella]] [[Category:Recipes using yeast]] [[Category:Recipes using flour]] [[fr:Livre de cuisine/Pizza familiale]] 9lst0kl53vfnupkc9q1v8cqm0d1dqfu 4672044 4671975 2026-09-24T04:51:23Z TechVindicator 3626296 4672044 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} {{recipe}} <br> '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of [[Cookbook:Flour|flour]] * 180ml warm water * ⅔ sachet of [[Cookbook:Yeast|baker's yeast]] * 1 teaspoon [[Cookbook:Salt|salt]] * 1 teaspoon [[Cookbook:Sugar|granulated sugar]] * 1 tablespoon [[Cookbook:Olive Oil|olive oil]] ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Dice the mozzarella. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (022).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 15 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 16 (after cooking) </gallery> [[Category:Recipes for pizza]] [[Category:Recipes using emmental]] [[Category:Recipes using mozzarella]] [[Category:Recipes using yeast]] [[Category:Recipes using flour]] [[fr:Livre de cuisine/Pizza familiale]] 2q6dwk2uve624wnlm6azq8hpzw08x9o 4672045 4672044 2026-09-24T04:54:39Z TechVindicator 3626296 4672045 wikitext text/x-wiki {{recipe summary | servings = 4 | time = | difficulty = 3 | image = [[File:Préparation d'une pizza maison, mars 2020 (025).jpg|300px]] | energy = <!-- Should if provided contain the number of calories and cal (can include kJ)--> | note = }} {{recipe}} <br> '''Pizza''' is a traditional Italian dish. == Ingredients == This recipe is for 4 servings. ===Dough=== * 330g of [[Cookbook:Flour|flour]] * 180ml warm water * ⅔ sachet of [[Cookbook:Yeast|baker's yeast]] * 1 teaspoon [[Cookbook:Salt|salt]] * 1 teaspoon [[Cookbook:Sugar|granulated sugar]] * 1 tablespoon [[Cookbook:Olive Oil|olive oil]] ===Topping=== * 5 generous tablespoons of tomato sauce * 6 slices of [[Cookbook:Prosciutto|prosciutto cotto]] * 1 ball of buffalo mozzarella, diced *40g Emmental, grated == Method == # Pour the flour in a bowl or a salad bowl. # In a measuring jug, pour warm water. # Add the salt, the sugar and the baker's yeast. # Mix well, until the yeast has dissolved. # Leave the mixture for 3-4 minutes. # Pour the mixture into a bowl. # Knead the dough. #* <small>(Add more flour if the dough is too sticky).</small> # Once a smooth dough has been formed, add the olive oil and knead again. # Cover with a damp cloth and let the dough rest for around 20 min. # Knead again, before rolling the dough out with a rolling pin until the dough is thin. # Spread the tomato sauce on the dough. # Add the slices of prosciutto cotto, without cutting them, and arrange them closely together. # Scatter the mozzarella over the pizza. # Top with the grated Emmental cheese. #Place the pizza in an oven at 180°C (356°F), and cook for 15 minutes. ==Images== <gallery mode="packed" heights="180px"> Préparation d'une pizza maison, mars 2020 (002).jpg|Step 1 Préparation d'une pizza maison, mars 2020 (003).jpg|Step 2 Préparation d'une pizza maison, mars 2020 (004).jpg|Step 5 Préparation d'une pizza maison, mars 2020 (005).jpg|Step 6 Préparation d'une pizza maison, mars 2020 (006).jpg|Step 7 Préparation d'une pizza maison, mars 2020 (008).jpg|Step 8 Préparation d'une pizza maison, mars 2020 (009).jpg|Step 9 Préparation d'une pizza maison, mars 2020 (010).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (011).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (012).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (013).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (014).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (015).jpg|Step 10 Préparation d'une pizza maison, mars 2020 (016).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (017).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (018).jpg|Step 11 Préparation d'une pizza maison, mars 2020 (019).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (020).jpg|Step 12 Préparation d'une pizza maison, mars 2020 (023).jpg|Step 13 Préparation d'une pizza maison, mars 2020 (024).jpg|Step 14 Préparation d'une pizza maison, mars 2020 (026).jpg|Step 15 (after cooking) </gallery> [[Category:Recipes for pizza]] [[Category:Recipes using emmental]] [[Category:Recipes using mozzarella]] [[Category:Recipes using yeast]] [[Category:Recipes using flour]] [[fr:Livre de cuisine/Pizza familiale]] hudie7hzrrm8r69dmwgmiptjh43fbxb Extensions: Open Scholarship Policy Observatory, 2021-2024/Market Consolidation in Scholarly Communications 0 485812 4672004 2026-09-23T22:02:46Z LodestarChariot2 3138880 LodestarChariot2 moved page [[Extensions: Open Scholarship Policy Observatory, 2021-2024/Market Consolidation in Scholarly Communications]] to [[Extensions: Open Scholarship Policy Observatory, 2021-2024/Market Consolidation and Scholarly Communications]]: Misspelled title 4672004 wikitext text/x-wiki #REDIRECT [[Extensions: Open Scholarship Policy Observatory, 2021-2024/Market Consolidation and Scholarly Communications]] 5512h2t7yl8gwmhqz1vsz1ycvzent9b User talk:Schweikhardt 3 485813 4672006 2026-09-23T22:20:39Z TechVindicator 3626296 Welcoming user with {{Welcome}} 4672006 wikitext text/x-wiki ==Welcome!== {| style="background:white; border:1px solid #abd5f5;; padding:0px; border-spacing:0px; color: #000000;" ! style="background:#d0e5f5; color: #000000;" | [[Wikibooks:Welcome|Getting started]] with Wikibooks |- | style="padding:5px;" | * Wikibooks is a collection of open-source textbooks. Find out [[WB:WIW|what this means]]. * To sign your name (on discussion pages), use four tildes, like this: &#126;&#126;&#126;&#126; * Learn how to [[Using Wikibooks|use Wikibooks]] and learn more about the community. * [[WB:CCO|Explore]], [[Wikibooks:Be bold|be bold]], and have fun! |} If you have any questions, you can ask in the [[Wikibooks:Reading room/Assistance|assistance reading room]] or possibly contact me personally. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 22:20, 23 September 2026 (UTC) lor2r3gmbstt8lsb94l1qfaked7wq9x User talk:Serayinterlude 3 485814 4672008 2026-09-23T23:49:28Z TechVindicator 3626296 Welcoming user with {{Welcome}} 4672008 wikitext text/x-wiki ==Welcome!== {| style="background:white; border:1px solid #abd5f5;; padding:0px; border-spacing:0px; color: #000000;" ! style="background:#d0e5f5; color: #000000;" | [[Wikibooks:Welcome|Getting started]] with Wikibooks |- | style="padding:5px;" | * Wikibooks is a collection of open-source textbooks. Find out [[WB:WIW|what this means]]. * To sign your name (on discussion pages), use four tildes, like this: &#126;&#126;&#126;&#126; * Learn how to [[Using Wikibooks|use Wikibooks]] and learn more about the community. * [[WB:CCO|Explore]], [[Wikibooks:Be bold|be bold]], and have fun! |} If you have any questions, you can ask in the [[Wikibooks:Reading room/Assistance|assistance reading room]] or possibly contact me personally. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:49, 23 September 2026 (UTC) rqjd12h5yeu81e65n27ihenyk2jyoto Talk:Anna Delvey Appointment 1 485815 4672010 2026-09-24T01:06:19Z ~2026-49281-08 3625662 /* Appointment */ new section 4672010 wikitext text/x-wiki == Appointment == tio work sit dowN talk come tomorrow Thursday hellp mommy Girl friend Doctor work come hold hand help look Doctor work come hold hand help look car please tonight come work hold hand tomorrow Room Evy sleep hold hand Rest pain Bed Anna Delvey Doctor come help look tonight hold hand help look please look talk sorry come sad please [[Special:Contributions/~2026-49281-08|~2026-49281-08]] ([[User talk:~2026-49281-08|talk]]) 01:06, 24 September 2026 (UTC) kuwsdm38jxh25ikduvef3p6y6i6osoi User:ColdPotatoNugget/sandbox 2 485816 4672013 2026-09-24T01:12:08Z ColdPotatoNugget 3626718 Created page and used as testing ground 4672013 wikitext text/x-wiki Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Normal '''Bold''' ''Italic'' [[wikipedia:Chanson_de_l'Oignon|testing]] testing2<ref>{{Citation |title=Chanson de l'Oignon |date=2026-05-03 |url=https://en.wikipedia.org/w/index.php?title=Chanson_de_l%27Oignon&oldid=1352305577 |work=Wikipedia |access-date=2026-09-24 |language=en}}</ref> = Page title! = gasp :O "to be or not to be?" {| class="wikitable" |+ !naiton !Thang !than2 !tkgfgrfngfr |- |Aus |1900 |231 |235 |- |Usa |1777 |32 |55 |- |UK |1601 |233 |964 |} qfbfadvtpjjjtdlm2g03fwi191fgaz4 User:ColdPotatoNugget 2 485817 4672014 2026-09-24T01:14:59Z ColdPotatoNugget 3626718 created page 4672014 wikitext text/x-wiki {{User:ColdPotatoNugget}} ぉおあtめいかんtyぺいんじゃぱねせ! 85z7q2a4dt8twhmtlazf7qv98xdvwyx 4672018 4672014 2026-09-24T01:29:59Z ColdPotatoNugget 3626718 Added greeting 4672018 wikitext text/x-wiki {{User:ColdPotatoNugget}} ^ Ignore this please. :/ Hello this i am ColdPotatoNugget i uh dont have much to say here mxvuuqo8stxuusi107avupgf0jyo5ts User talk:ColdPotatoNugget 3 485818 4672015 2026-09-24T01:22:58Z TechVindicator 3626296 Welcoming user with {{Welcome}} 4672015 wikitext text/x-wiki ==Welcome!== {| style="background:white; border:1px solid #abd5f5;; padding:0px; border-spacing:0px; color: #000000;" ! style="background:#d0e5f5; color: #000000;" | [[Wikibooks:Welcome|Getting started]] with Wikibooks |- | style="padding:5px;" | * Wikibooks is a collection of open-source textbooks. Find out [[WB:WIW|what this means]]. * To sign your name (on discussion pages), use four tildes, like this: &#126;&#126;&#126;&#126; * Learn how to [[Using Wikibooks|use Wikibooks]] and learn more about the community. * [[WB:CCO|Explore]], [[Wikibooks:Be bold|be bold]], and have fun! |} If you have any questions, you can ask in the [[Wikibooks:Reading room/Assistance|assistance reading room]] or possibly contact me personally. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 01:22, 24 September 2026 (UTC) 48g87vh8nkikhpmpl2liqzjd0f96j46 4672016 4672015 2026-09-24T01:27:18Z ColdPotatoNugget 3626718 /* Welcome! */ Reply 4672016 wikitext text/x-wiki ==Welcome!== {| style="background:white; border:1px solid #abd5f5;; padding:0px; border-spacing:0px; color: #000000;" ! style="background:#d0e5f5; color: #000000;" | [[Wikibooks:Welcome|Getting started]] with Wikibooks |- | style="padding:5px;" | * Wikibooks is a collection of open-source textbooks. Find out [[WB:WIW|what this means]]. * To sign your name (on discussion pages), use four tildes, like this: &#126;&#126;&#126;&#126; * Learn how to [[Using Wikibooks|use Wikibooks]] and learn more about the community. * [[WB:CCO|Explore]], [[Wikibooks:Be bold|be bold]], and have fun! |} If you have any questions, you can ask in the [[Wikibooks:Reading room/Assistance|assistance reading room]] or possibly contact me personally. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 01:22, 24 September 2026 (UTC) :thank you, i will keep that in mind. [[User:ColdPotatoNugget|ColdPotatoNugget]] ([[User talk:ColdPotatoNugget|discuss]] • [[Special:Contributions/ColdPotatoNugget|contribs]]) 01:27, 24 September 2026 (UTC) aggeg8hgk10s6uohw72gxmbi1rb54ww Active Directory Security and Penetration Testing 0 485819 4672020 2026-09-24T02:50:45Z נתנאל שטרן 3337472 Created page with "{{Wikibook|title=Active Directory Security & Penetration Testing|image=|status=C (Substantial content)|subject=IT Security|level=Intermediate to Advanced|required=Basic networking knowledge, Linux/Windows command line}} == Welcome == This wikibook provides a comprehensive guide to '''Active Directory (AD) penetration testing''', with a focus on the '''ADPenTest''' framework—a powerful Python-based tool for automated AD security assessments. Whether you're a security..." 4672020 wikitext text/x-wiki {{Wikibook|title=Active Directory Security & Penetration Testing|image=|status=C (Substantial content)|subject=IT Security|level=Intermediate to Advanced|required=Basic networking knowledge, Linux/Windows command line}} == Welcome == This wikibook provides a comprehensive guide to '''Active Directory (AD) penetration testing''', with a focus on the '''ADPenTest''' framework—a powerful Python-based tool for automated AD security assessments. Whether you're a security professional preparing for real-world engagements, a penetration tester looking to streamline your workflow, or a student learning AD attack vectors, this book will guide you through: * {{colorbox|lightblue|'''Foundational concepts'''}} of Active Directory architecture and security * {{colorbox|lightblue|'''ADPenTest framework'''}} installation, configuration, and usage * {{colorbox|lightblue|'''Attack vectors'''}} including Kerberoasting, ADCS exploitation, and privilege escalation * {{colorbox|lightblue|'''Defensive measures'''}} to detect and mitigate AD-based attacks * {{colorbox|lightblue|'''Real-world case studies'''}} and practical hands-on exercises == Table of Contents == [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Chapter 4: Introduction to ADPenTest]] * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors|Part 3: Attack Vectors & Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Chapter 10 - ADCS Exploitation|Chapter 10: ADCS Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 11 - Privilege Escalation|Chapter 11: Privilege Escalation]] * [[Active Directory Security and Penetration Testing/Chapter 12 - Persistence Mechanisms|Chapter 12: Persistence Mechanisms]] [[Active Directory Security and Penetration Testing/Part 4 - CVE Scanning|Part 4: CVE Scanning & Vulnerability Detection]] * [[Active Directory Security and Penetration Testing/Chapter 13 - Built-in CVE Scanners|Chapter 13: Built-in CVE Scanners]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * [[Active Directory Security and Penetration Testing/Chapter 15 - Custom Tool Integration|Chapter 15: Custom Tool Integration]] * [[Active Directory Security and Penetration Testing/Chapter 16 - Performance Optimization|Chapter 16: Performance Optimization]] * [[Active Directory Security and Penetration Testing/Chapter 17 - Defensive Measures|Chapter 17: Defensive Measures & Hardening]] * [[Active Directory Security and Penetration Testing/Chapter 18 - Case Studies|Chapter 18: Case Studies & Real-World Scenarios]] == Quick Start == {{Note|Before using ADPenTest, ensure you have proper authorization from the system owner. Unauthorized access is illegal.}} To get started quickly:<syntaxhighlight lang="bash"> # Install ADPenTest pip install adpentest # Run your first scan (dry-run mode by default) adpentest --target corp.local # Execute scan with authorization adpentest --target corp.local --scope-confirmed # View scan history adpentest --history # Generate CVE report adpentest --cve-report </syntaxhighlight>See [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6]] for detailed usage instructions. == Key Features of ADPenTest == {| class="wikitable" !Feature !Description |- |'''Multi-threaded Execution''' |35+ integrated tools running in parallel for 10-15x speedup |- |'''Automated DC Discovery''' |DNS SRV records, LDAP probes, port fingerprinting |- |'''CVE Scanning''' |7 built-in scanners for critical AD vulnerabilities (CVSS 7.5-9.4) |- |'''WAF Bypass Engine''' |Techniques for testing behind firewalls (LDAP/Kerberos over raw protocols) |- |'''Persistent History''' |SQLite database of all scan results for trend analysis |- |'''Safety-First Design''' |Dry-run by default, requires explicit authorization flags |} == Prerequisites == * {{colorbox|lightyellow|Python 3.8 or higher}} * {{colorbox|lightyellow|Linux or Windows system}} * {{colorbox|lightyellow|Network access to target Active Directory}} * {{colorbox|lightyellow|Proper authorization/scope agreement}} * {{colorbox|lightyellow|Understanding of AD fundamentals}} == How to Use This Book == This wikibook is designed to be read in order, but you can jump to specific chapters: * '''Beginners:''' Start with [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * '''Intermediate:''' Jump to [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * '''Advanced:''' Explore [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * '''Reference:''' Use the {{colorbox|lightgray|Appendices}} for quick lookups Each chapter includes: * Clear learning objectives * Hands-on exercises * Real-world examples * Knowledge checks * Further reading links == Contributing == This is a community-driven wikibook. To contribute: 1. Create a Wikimedia account on [[en.wikibooks.org]] 2. Click "Edit" on any page you'd like to improve 3. Follow the [[Active Directory Security and Penetration Testing/Contributing|Contributing Guidelines]] 4. Submit your changes All contributions are welcome—from fixing typos to writing new chapters! == Legal & Ethical Notice == {{Important|This wikibook covers penetration testing techniques that should ''only'' be used on systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal in most jurisdictions.}}Always: * Obtain proper authorization in writing * Define scope clearly with the system owner * Follow responsible disclosure practices * Report vulnerabilities ethically See [[Active Directory Security and Penetration Testing/Legal and Ethical Considerations|Legal & Ethical Considerations]] for more details. == Related Resources == * [[En.wikipedia:Active Directory|Wikipedia: Active Directory]] * [[En.wikipedia:Penetration testing|Wikipedia: Penetration Testing]] * [[github:netanelcyber/AdPentestAI-Python|ADPenTest GitHub Repository]] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [[En.wikibooks:Category:IT Security|IT Security Category]] == License == This wikibook is licensed under the {{colorbox|lightgreen|Creative Commons Attribution-ShareAlike License (CC-BY-SA 4.0)}} --- gzr7yyk4fewcqd0os5pnixowrrdqh30 4672021 4672020 2026-09-24T02:53:57Z נתנאל שטרן 3337472 4672021 wikitext text/x-wiki {{Wikibook|title=Active Directory Security & Penetration Testing|image=|status=C (Substantial content)|subject=IT Security|level=Intermediate to Advanced|required=Basic networking knowledge, Linux/Windows command line}} == Welcome == This wikibook provides a comprehensive guide to '''Active Directory (AD) penetration testing''', with a focus on the '''ADPenTest''' framework—a powerful Python-based tool for automated AD security assessments. Whether you're a security professional preparing for real-world engagements, a penetration tester looking to streamline your workflow, or a student learning AD attack vectors, this book will guide you through: * {{color box|lightblue|'''Foundational concepts'''}} of Active Directory architecture and security * {{color box|lightblue|'''ADPenTest framework'''}} installation, configuration, and usage * {{color box|lightblue|'''Attack vectors'''}} including Kerberoasting, ADCS exploitation, and privilege escalation * {{color box|lightblue|'''Defensive measures'''}} to detect and mitigate AD-based attacks * {{color box|lightblue|'''Real-world case studies'''}} and practical hands-on exercises == Table of Contents == [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Chapter 4: Introduction to ADPenTest]] * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors|Part 3: Attack Vectors & Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Chapter 10 - ADCS Exploitation|Chapter 10: ADCS Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 11 - Privilege Escalation|Chapter 11: Privilege Escalation]] * [[Active Directory Security and Penetration Testing/Chapter 12 - Persistence Mechanisms|Chapter 12: Persistence Mechanisms]] [[Active Directory Security and Penetration Testing/Part 4 - CVE Scanning|Part 4: CVE Scanning & Vulnerability Detection]] * [[Active Directory Security and Penetration Testing/Chapter 13 - Built-in CVE Scanners|Chapter 13: Built-in CVE Scanners]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * [[Active Directory Security and Penetration Testing/Chapter 15 - Custom Tool Integration|Chapter 15: Custom Tool Integration]] * [[Active Directory Security and Penetration Testing/Chapter 16 - Performance Optimization|Chapter 16: Performance Optimization]] * [[Active Directory Security and Penetration Testing/Chapter 17 - Defensive Measures|Chapter 17: Defensive Measures & Hardening]] * [[Active Directory Security and Penetration Testing/Chapter 18 - Case Studies|Chapter 18: Case Studies & Real-World Scenarios]] == Quick Start == {{Note|Before using ADPenTest, ensure you have proper authorization from the system owner. Unauthorized access is illegal.}} To get started quickly:<syntaxhighlight lang="bash"> # Install ADPenTest pip install adpentest # Run your first scan (dry-run mode by default) adpentest --target corp.local # Execute scan with authorization adpentest --target corp.local --scope-confirmed # View scan history adpentest --history # Generate CVE report adpentest --cve-report </syntaxhighlight>See [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6]] for detailed usage instructions. == Key Features of ADPenTest == {| class="wikitable" !Feature !Description |- |'''Multi-threaded Execution''' |35+ integrated tools running in parallel for 10-15x speedup |- |'''Automated DC Discovery''' |DNS SRV records, LDAP probes, port fingerprinting |- |'''CVE Scanning''' |7 built-in scanners for critical AD vulnerabilities (CVSS 7.5-9.4) |- |'''WAF Bypass Engine''' |Techniques for testing behind firewalls (LDAP/Kerberos over raw protocols) |- |'''Persistent History''' |SQLite database of all scan results for trend analysis |- |'''Safety-First Design''' |Dry-run by default, requires explicit authorization flags |} == Prerequisites == * {{colorbox|lightyellow|Python 3.8 or higher}} * {{colorbox|lightyellow|Linux or Windows system}} * {{colorbox|lightyellow|Network access to target Active Directory}} * {{colorbox|lightyellow|Proper authorization/scope agreement}} * {{colorbox|lightyellow|Understanding of AD fundamentals}} == How to Use This Book == This wikibook is designed to be read in order, but you can jump to specific chapters: * '''Beginners:''' Start with [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * '''Intermediate:''' Jump to [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * '''Advanced:''' Explore [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * '''Reference:''' Use the {{colorbox|lightgray|Appendices}} for quick lookups Each chapter includes: * Clear learning objectives * Hands-on exercises * Real-world examples * Knowledge checks * Further reading links == Contributing == This is a community-driven wikibook. To contribute: 1. Create a Wikimedia account on [[en.wikibooks.org]] 2. Click "Edit" on any page you'd like to improve 3. Follow the [[Active Directory Security and Penetration Testing/Contributing|Contributing Guidelines]] 4. Submit your changes All contributions are welcome—from fixing typos to writing new chapters! == Legal & Ethical Notice == {{Important|This wikibook covers penetration testing techniques that should ''only'' be used on systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal in most jurisdictions.}}Always: * Obtain proper authorization in writing * Define scope clearly with the system owner * Follow responsible disclosure practices * Report vulnerabilities ethically See [[Active Directory Security and Penetration Testing/Legal and Ethical Considerations|Legal & Ethical Considerations]] for more details. == Related Resources == * [[En.wikipedia:Active Directory|Wikipedia: Active Directory]] * [[En.wikipedia:Penetration testing|Wikipedia: Penetration Testing]] * [[github:netanelcyber/AdPentestAI-Python|ADPenTest GitHub Repository]] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [[En.wikibooks:Category:IT Security|IT Security Category]] == License == This wikibook is licensed under the {{colorbox|lightgreen|Creative Commons Attribution-ShareAlike License (CC-BY-SA 4.0)}} --- gwz60l6ki635eqtbhr37589r1smbzwi 4672028 4672021 2026-09-24T03:08:11Z נתנאל שטרן 3337472 נתנאל שטרן moved page [[Active Directory Security & Penetration Testing]] to [[Active Directory Security and Penetration Testing]] 4672021 wikitext text/x-wiki {{Wikibook|title=Active Directory Security & Penetration Testing|image=|status=C (Substantial content)|subject=IT Security|level=Intermediate to Advanced|required=Basic networking knowledge, Linux/Windows command line}} == Welcome == This wikibook provides a comprehensive guide to '''Active Directory (AD) penetration testing''', with a focus on the '''ADPenTest''' framework—a powerful Python-based tool for automated AD security assessments. Whether you're a security professional preparing for real-world engagements, a penetration tester looking to streamline your workflow, or a student learning AD attack vectors, this book will guide you through: * {{color box|lightblue|'''Foundational concepts'''}} of Active Directory architecture and security * {{color box|lightblue|'''ADPenTest framework'''}} installation, configuration, and usage * {{color box|lightblue|'''Attack vectors'''}} including Kerberoasting, ADCS exploitation, and privilege escalation * {{color box|lightblue|'''Defensive measures'''}} to detect and mitigate AD-based attacks * {{color box|lightblue|'''Real-world case studies'''}} and practical hands-on exercises == Table of Contents == [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Chapter 4: Introduction to ADPenTest]] * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors|Part 3: Attack Vectors & Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Chapter 10 - ADCS Exploitation|Chapter 10: ADCS Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 11 - Privilege Escalation|Chapter 11: Privilege Escalation]] * [[Active Directory Security and Penetration Testing/Chapter 12 - Persistence Mechanisms|Chapter 12: Persistence Mechanisms]] [[Active Directory Security and Penetration Testing/Part 4 - CVE Scanning|Part 4: CVE Scanning & Vulnerability Detection]] * [[Active Directory Security and Penetration Testing/Chapter 13 - Built-in CVE Scanners|Chapter 13: Built-in CVE Scanners]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * [[Active Directory Security and Penetration Testing/Chapter 15 - Custom Tool Integration|Chapter 15: Custom Tool Integration]] * [[Active Directory Security and Penetration Testing/Chapter 16 - Performance Optimization|Chapter 16: Performance Optimization]] * [[Active Directory Security and Penetration Testing/Chapter 17 - Defensive Measures|Chapter 17: Defensive Measures & Hardening]] * [[Active Directory Security and Penetration Testing/Chapter 18 - Case Studies|Chapter 18: Case Studies & Real-World Scenarios]] == Quick Start == {{Note|Before using ADPenTest, ensure you have proper authorization from the system owner. Unauthorized access is illegal.}} To get started quickly:<syntaxhighlight lang="bash"> # Install ADPenTest pip install adpentest # Run your first scan (dry-run mode by default) adpentest --target corp.local # Execute scan with authorization adpentest --target corp.local --scope-confirmed # View scan history adpentest --history # Generate CVE report adpentest --cve-report </syntaxhighlight>See [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6]] for detailed usage instructions. == Key Features of ADPenTest == {| class="wikitable" !Feature !Description |- |'''Multi-threaded Execution''' |35+ integrated tools running in parallel for 10-15x speedup |- |'''Automated DC Discovery''' |DNS SRV records, LDAP probes, port fingerprinting |- |'''CVE Scanning''' |7 built-in scanners for critical AD vulnerabilities (CVSS 7.5-9.4) |- |'''WAF Bypass Engine''' |Techniques for testing behind firewalls (LDAP/Kerberos over raw protocols) |- |'''Persistent History''' |SQLite database of all scan results for trend analysis |- |'''Safety-First Design''' |Dry-run by default, requires explicit authorization flags |} == Prerequisites == * {{colorbox|lightyellow|Python 3.8 or higher}} * {{colorbox|lightyellow|Linux or Windows system}} * {{colorbox|lightyellow|Network access to target Active Directory}} * {{colorbox|lightyellow|Proper authorization/scope agreement}} * {{colorbox|lightyellow|Understanding of AD fundamentals}} == How to Use This Book == This wikibook is designed to be read in order, but you can jump to specific chapters: * '''Beginners:''' Start with [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * '''Intermediate:''' Jump to [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * '''Advanced:''' Explore [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * '''Reference:''' Use the {{colorbox|lightgray|Appendices}} for quick lookups Each chapter includes: * Clear learning objectives * Hands-on exercises * Real-world examples * Knowledge checks * Further reading links == Contributing == This is a community-driven wikibook. To contribute: 1. Create a Wikimedia account on [[en.wikibooks.org]] 2. Click "Edit" on any page you'd like to improve 3. Follow the [[Active Directory Security and Penetration Testing/Contributing|Contributing Guidelines]] 4. Submit your changes All contributions are welcome—from fixing typos to writing new chapters! == Legal & Ethical Notice == {{Important|This wikibook covers penetration testing techniques that should ''only'' be used on systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal in most jurisdictions.}}Always: * Obtain proper authorization in writing * Define scope clearly with the system owner * Follow responsible disclosure practices * Report vulnerabilities ethically See [[Active Directory Security and Penetration Testing/Legal and Ethical Considerations|Legal & Ethical Considerations]] for more details. == Related Resources == * [[En.wikipedia:Active Directory|Wikipedia: Active Directory]] * [[En.wikipedia:Penetration testing|Wikipedia: Penetration Testing]] * [[github:netanelcyber/AdPentestAI-Python|ADPenTest GitHub Repository]] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [[En.wikibooks:Category:IT Security|IT Security Category]] == License == This wikibook is licensed under the {{colorbox|lightgreen|Creative Commons Attribution-ShareAlike License (CC-BY-SA 4.0)}} --- gwz60l6ki635eqtbhr37589r1smbzwi 4672030 4672028 2026-09-24T03:08:51Z נתנאל שטרן 3337472 4672030 wikitext text/x-wiki {{Wikibook|title=Active Directory Security and Penetration Testing|image=|status=C (Substantial content)|subject=IT Security|level=Intermediate to Advanced|required=Basic networking knowledge, Linux/Windows command line}} == Welcome == This wikibook provides a comprehensive guide to '''Active Directory (AD) penetration testing''', with a focus on the '''ADPenTest''' framework—a powerful Python-based tool for automated AD security assessments. Whether you're a security professional preparing for real-world engagements, a penetration tester looking to streamline your workflow, or a student learning AD attack vectors, this book will guide you through: * {{color box|lightblue|'''Foundational concepts'''}} of Active Directory architecture and security * {{color box|lightblue|'''ADPenTest framework'''}} installation, configuration, and usage * {{color box|lightblue|'''Attack vectors'''}} including Kerberoasting, ADCS exploitation, and privilege escalation * {{color box|lightblue|'''Defensive measures'''}} to detect and mitigate AD-based attacks * {{color box|lightblue|'''Real-world case studies'''}} and practical hands-on exercises == Table of Contents == [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Chapter 4: Introduction to ADPenTest]] * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors|Part 3: Attack Vectors & Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Chapter 10 - ADCS Exploitation|Chapter 10: ADCS Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 11 - Privilege Escalation|Chapter 11: Privilege Escalation]] * [[Active Directory Security and Penetration Testing/Chapter 12 - Persistence Mechanisms|Chapter 12: Persistence Mechanisms]] [[Active Directory Security and Penetration Testing/Part 4 - CVE Scanning|Part 4: CVE Scanning & Vulnerability Detection]] * [[Active Directory Security and Penetration Testing/Chapter 13 - Built-in CVE Scanners|Chapter 13: Built-in CVE Scanners]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * [[Active Directory Security and Penetration Testing/Chapter 15 - Custom Tool Integration|Chapter 15: Custom Tool Integration]] * [[Active Directory Security and Penetration Testing/Chapter 16 - Performance Optimization|Chapter 16: Performance Optimization]] * [[Active Directory Security and Penetration Testing/Chapter 17 - Defensive Measures|Chapter 17: Defensive Measures & Hardening]] * [[Active Directory Security and Penetration Testing/Chapter 18 - Case Studies|Chapter 18: Case Studies & Real-World Scenarios]] == Quick Start == {{Note|Before using ADPenTest, ensure you have proper authorization from the system owner. Unauthorized access is illegal.}} To get started quickly:<syntaxhighlight lang="bash"> # Install ADPenTest pip install adpentest # Run your first scan (dry-run mode by default) adpentest --target corp.local # Execute scan with authorization adpentest --target corp.local --scope-confirmed # View scan history adpentest --history # Generate CVE report adpentest --cve-report </syntaxhighlight>See [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6]] for detailed usage instructions. == Key Features of ADPenTest == {| class="wikitable" !Feature !Description |- |'''Multi-threaded Execution''' |35+ integrated tools running in parallel for 10-15x speedup |- |'''Automated DC Discovery''' |DNS SRV records, LDAP probes, port fingerprinting |- |'''CVE Scanning''' |7 built-in scanners for critical AD vulnerabilities (CVSS 7.5-9.4) |- |'''WAF Bypass Engine''' |Techniques for testing behind firewalls (LDAP/Kerberos over raw protocols) |- |'''Persistent History''' |SQLite database of all scan results for trend analysis |- |'''Safety-First Design''' |Dry-run by default, requires explicit authorization flags |} == Prerequisites == * {{colorbox|lightyellow|Python 3.8 or higher}} * {{colorbox|lightyellow|Linux or Windows system}} * {{colorbox|lightyellow|Network access to target Active Directory}} * {{colorbox|lightyellow|Proper authorization/scope agreement}} * {{colorbox|lightyellow|Understanding of AD fundamentals}} == How to Use This Book == This wikibook is designed to be read in order, but you can jump to specific chapters: * '''Beginners:''' Start with [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * '''Intermediate:''' Jump to [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * '''Advanced:''' Explore [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * '''Reference:''' Use the {{colorbox|lightgray|Appendices}} for quick lookups Each chapter includes: * Clear learning objectives * Hands-on exercises * Real-world examples * Knowledge checks * Further reading links == Contributing == This is a community-driven wikibook. To contribute: 1. Create a Wikimedia account on [[en.wikibooks.org]] 2. Click "Edit" on any page you'd like to improve 3. Follow the [[Active Directory Security and Penetration Testing/Contributing|Contributing Guidelines]] 4. Submit your changes All contributions are welcome—from fixing typos to writing new chapters! == Legal & Ethical Notice == {{Important|This wikibook covers penetration testing techniques that should ''only'' be used on systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal in most jurisdictions.}}Always: * Obtain proper authorization in writing * Define scope clearly with the system owner * Follow responsible disclosure practices * Report vulnerabilities ethically See [[Active Directory Security and Penetration Testing/Legal and Ethical Considerations|Legal & Ethical Considerations]] for more details. == Related Resources == * [[En.wikipedia:Active Directory|Wikipedia: Active Directory]] * [[En.wikipedia:Penetration testing|Wikipedia: Penetration Testing]] * [[github:netanelcyber/AdPentestAI-Python|ADPenTest GitHub Repository]] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [[En.wikibooks:Category:IT Security|IT Security Category]] == License == This wikibook is licensed under the {{colorbox|lightgreen|Creative Commons Attribution-ShareAlike License (CC-BY-SA 4.0)}} --- 6a52412fzfcn0ka4ncu14u4so4f5gze 4672033 4672030 2026-09-24T03:12:06Z נתנאל שטרן 3337472 /* Table of Contents */ 4672033 wikitext text/x-wiki {{Wikibook|title=Active Directory Security and Penetration Testing|image=|status=C (Substantial content)|subject=IT Security|level=Intermediate to Advanced|required=Basic networking knowledge, Linux/Windows command line}} == Welcome == This wikibook provides a comprehensive guide to '''Active Directory (AD) penetration testing''', with a focus on the '''ADPenTest''' framework—a powerful Python-based tool for automated AD security assessments. Whether you're a security professional preparing for real-world engagements, a penetration tester looking to streamline your workflow, or a student learning AD attack vectors, this book will guide you through: * {{color box|lightblue|'''Foundational concepts'''}} of Active Directory architecture and security * {{color box|lightblue|'''ADPenTest framework'''}} installation, configuration, and usage * {{color box|lightblue|'''Attack vectors'''}} including Kerberoasting, ADCS exploitation, and privilege escalation * {{color box|lightblue|'''Defensive measures'''}} to detect and mitigate AD-based attacks * {{color box|lightblue|'''Real-world case studies'''}} and practical hands-on exercises == Table of Contents == [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Part 2: ADPenTest Framework]] * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors|Part 3: Attack Vectors & Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Chapter 10 - ADCS Exploitation|Chapter 10: ADCS Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 11 - Privilege Escalation|Chapter 11: Privilege Escalation]] * [[Active Directory Security and Penetration Testing/Chapter 12 - Persistence Mechanisms|Chapter 12: Persistence Mechanisms]] [[Active Directory Security and Penetration Testing/Part 4 - CVE Scanning|Part 4: CVE Scanning & Vulnerability Detection]] * [[Active Directory Security and Penetration Testing/Chapter 13 - Built-in CVE Scanners|Chapter 13: Built-in CVE Scanners]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * [[Active Directory Security and Penetration Testing/Chapter 15 - Custom Tool Integration|Chapter 15: Custom Tool Integration]] * [[Active Directory Security and Penetration Testing/Chapter 16 - Performance Optimization|Chapter 16: Performance Optimization]] * [[Active Directory Security and Penetration Testing/Chapter 17 - Defensive Measures|Chapter 17: Defensive Measures & Hardening]] * [[Active Directory Security and Penetration Testing/Chapter 18 - Case Studies|Chapter 18: Case Studies & Real-World Scenarios]] == Quick Start == {{Note|Before using ADPenTest, ensure you have proper authorization from the system owner. Unauthorized access is illegal.}} To get started quickly:<syntaxhighlight lang="bash"> # Install ADPenTest pip install adpentest # Run your first scan (dry-run mode by default) adpentest --target corp.local # Execute scan with authorization adpentest --target corp.local --scope-confirmed # View scan history adpentest --history # Generate CVE report adpentest --cve-report </syntaxhighlight>See [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6]] for detailed usage instructions. == Key Features of ADPenTest == {| class="wikitable" !Feature !Description |- |'''Multi-threaded Execution''' |35+ integrated tools running in parallel for 10-15x speedup |- |'''Automated DC Discovery''' |DNS SRV records, LDAP probes, port fingerprinting |- |'''CVE Scanning''' |7 built-in scanners for critical AD vulnerabilities (CVSS 7.5-9.4) |- |'''WAF Bypass Engine''' |Techniques for testing behind firewalls (LDAP/Kerberos over raw protocols) |- |'''Persistent History''' |SQLite database of all scan results for trend analysis |- |'''Safety-First Design''' |Dry-run by default, requires explicit authorization flags |} == Prerequisites == * {{colorbox|lightyellow|Python 3.8 or higher}} * {{colorbox|lightyellow|Linux or Windows system}} * {{colorbox|lightyellow|Network access to target Active Directory}} * {{colorbox|lightyellow|Proper authorization/scope agreement}} * {{colorbox|lightyellow|Understanding of AD fundamentals}} == How to Use This Book == This wikibook is designed to be read in order, but you can jump to specific chapters: * '''Beginners:''' Start with [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * '''Intermediate:''' Jump to [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * '''Advanced:''' Explore [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * '''Reference:''' Use the {{colorbox|lightgray|Appendices}} for quick lookups Each chapter includes: * Clear learning objectives * Hands-on exercises * Real-world examples * Knowledge checks * Further reading links == Contributing == This is a community-driven wikibook. To contribute: 1. Create a Wikimedia account on [[en.wikibooks.org]] 2. Click "Edit" on any page you'd like to improve 3. Follow the [[Active Directory Security and Penetration Testing/Contributing|Contributing Guidelines]] 4. Submit your changes All contributions are welcome—from fixing typos to writing new chapters! == Legal & Ethical Notice == {{Important|This wikibook covers penetration testing techniques that should ''only'' be used on systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal in most jurisdictions.}}Always: * Obtain proper authorization in writing * Define scope clearly with the system owner * Follow responsible disclosure practices * Report vulnerabilities ethically See [[Active Directory Security and Penetration Testing/Legal and Ethical Considerations|Legal & Ethical Considerations]] for more details. == Related Resources == * [[En.wikipedia:Active Directory|Wikipedia: Active Directory]] * [[En.wikipedia:Penetration testing|Wikipedia: Penetration Testing]] * [[github:netanelcyber/AdPentestAI-Python|ADPenTest GitHub Repository]] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [[En.wikibooks:Category:IT Security|IT Security Category]] == License == This wikibook is licensed under the {{colorbox|lightgreen|Creative Commons Attribution-ShareAlike License (CC-BY-SA 4.0)}} --- g7bfr2ogw5ssg95fjjrupg5ckkom5pj 4672038 4672033 2026-09-24T03:19:27Z נתנאל שטרן 3337472 /* License */ 4672038 wikitext text/x-wiki {{Wikibook|title=Active Directory Security and Penetration Testing|image=|status=C (Substantial content)|subject=IT Security|level=Intermediate to Advanced|required=Basic networking knowledge, Linux/Windows command line}} == Welcome == This wikibook provides a comprehensive guide to '''Active Directory (AD) penetration testing''', with a focus on the '''ADPenTest''' framework—a powerful Python-based tool for automated AD security assessments. Whether you're a security professional preparing for real-world engagements, a penetration tester looking to streamline your workflow, or a student learning AD attack vectors, this book will guide you through: * {{color box|lightblue|'''Foundational concepts'''}} of Active Directory architecture and security * {{color box|lightblue|'''ADPenTest framework'''}} installation, configuration, and usage * {{color box|lightblue|'''Attack vectors'''}} including Kerberoasting, ADCS exploitation, and privilege escalation * {{color box|lightblue|'''Defensive measures'''}} to detect and mitigate AD-based attacks * {{color box|lightblue|'''Real-world case studies'''}} and practical hands-on exercises == Table of Contents == [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Part 2: ADPenTest Framework]] * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors|Part 3: Attack Vectors & Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Chapter 10 - ADCS Exploitation|Chapter 10: ADCS Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 11 - Privilege Escalation|Chapter 11: Privilege Escalation]] * [[Active Directory Security and Penetration Testing/Chapter 12 - Persistence Mechanisms|Chapter 12: Persistence Mechanisms]] [[Active Directory Security and Penetration Testing/Part 4 - CVE Scanning|Part 4: CVE Scanning & Vulnerability Detection]] * [[Active Directory Security and Penetration Testing/Chapter 13 - Built-in CVE Scanners|Chapter 13: Built-in CVE Scanners]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * [[Active Directory Security and Penetration Testing/Chapter 15 - Custom Tool Integration|Chapter 15: Custom Tool Integration]] * [[Active Directory Security and Penetration Testing/Chapter 16 - Performance Optimization|Chapter 16: Performance Optimization]] * [[Active Directory Security and Penetration Testing/Chapter 17 - Defensive Measures|Chapter 17: Defensive Measures & Hardening]] * [[Active Directory Security and Penetration Testing/Chapter 18 - Case Studies|Chapter 18: Case Studies & Real-World Scenarios]] == Quick Start == {{Note|Before using ADPenTest, ensure you have proper authorization from the system owner. Unauthorized access is illegal.}} To get started quickly:<syntaxhighlight lang="bash"> # Install ADPenTest pip install adpentest # Run your first scan (dry-run mode by default) adpentest --target corp.local # Execute scan with authorization adpentest --target corp.local --scope-confirmed # View scan history adpentest --history # Generate CVE report adpentest --cve-report </syntaxhighlight>See [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6]] for detailed usage instructions. == Key Features of ADPenTest == {| class="wikitable" !Feature !Description |- |'''Multi-threaded Execution''' |35+ integrated tools running in parallel for 10-15x speedup |- |'''Automated DC Discovery''' |DNS SRV records, LDAP probes, port fingerprinting |- |'''CVE Scanning''' |7 built-in scanners for critical AD vulnerabilities (CVSS 7.5-9.4) |- |'''WAF Bypass Engine''' |Techniques for testing behind firewalls (LDAP/Kerberos over raw protocols) |- |'''Persistent History''' |SQLite database of all scan results for trend analysis |- |'''Safety-First Design''' |Dry-run by default, requires explicit authorization flags |} == Prerequisites == * {{colorbox|lightyellow|Python 3.8 or higher}} * {{colorbox|lightyellow|Linux or Windows system}} * {{colorbox|lightyellow|Network access to target Active Directory}} * {{colorbox|lightyellow|Proper authorization/scope agreement}} * {{colorbox|lightyellow|Understanding of AD fundamentals}} == How to Use This Book == This wikibook is designed to be read in order, but you can jump to specific chapters: * '''Beginners:''' Start with [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * '''Intermediate:''' Jump to [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * '''Advanced:''' Explore [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * '''Reference:''' Use the {{colorbox|lightgray|Appendices}} for quick lookups Each chapter includes: * Clear learning objectives * Hands-on exercises * Real-world examples * Knowledge checks * Further reading links == Contributing == This is a community-driven wikibook. To contribute: 1. Create a Wikimedia account on [[en.wikibooks.org]] 2. Click "Edit" on any page you'd like to improve 3. Follow the [[Active Directory Security and Penetration Testing/Contributing|Contributing Guidelines]] 4. Submit your changes All contributions are welcome—from fixing typos to writing new chapters! == Legal & Ethical Notice == {{Important|This wikibook covers penetration testing techniques that should ''only'' be used on systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal in most jurisdictions.}}Always: * Obtain proper authorization in writing * Define scope clearly with the system owner * Follow responsible disclosure practices * Report vulnerabilities ethically See [[Active Directory Security and Penetration Testing/Legal and Ethical Considerations|Legal & Ethical Considerations]] for more details. == Related Resources == * [[En.wikipedia:Active Directory|Wikipedia: Active Directory]] * [[En.wikipedia:Penetration testing|Wikipedia: Penetration Testing]] * [[github:netanelcyber/AdPentestAI-Python|ADPenTest GitHub Repository]] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [[En.wikibooks:Category:IT Security|IT Security Category]] == License == This wikibook is licensed under the {{color box|lightgreen|Creative Commons Attribution-ShareAlike License (CC-BY-SA 4.0)}} --- i4d28tnb71slxsff7rysluvgmuxko0l 4672039 4672038 2026-09-24T03:19:47Z נתנאל שטרן 3337472 /* Contributing */ 4672039 wikitext text/x-wiki {{Wikibook|title=Active Directory Security and Penetration Testing|image=|status=C (Substantial content)|subject=IT Security|level=Intermediate to Advanced|required=Basic networking knowledge, Linux/Windows command line}} == Welcome == This wikibook provides a comprehensive guide to '''Active Directory (AD) penetration testing''', with a focus on the '''ADPenTest''' framework—a powerful Python-based tool for automated AD security assessments. Whether you're a security professional preparing for real-world engagements, a penetration tester looking to streamline your workflow, or a student learning AD attack vectors, this book will guide you through: * {{color box|lightblue|'''Foundational concepts'''}} of Active Directory architecture and security * {{color box|lightblue|'''ADPenTest framework'''}} installation, configuration, and usage * {{color box|lightblue|'''Attack vectors'''}} including Kerberoasting, ADCS exploitation, and privilege escalation * {{color box|lightblue|'''Defensive measures'''}} to detect and mitigate AD-based attacks * {{color box|lightblue|'''Real-world case studies'''}} and practical hands-on exercises == Table of Contents == [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Part 2: ADPenTest Framework]] * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors|Part 3: Attack Vectors & Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Chapter 10 - ADCS Exploitation|Chapter 10: ADCS Exploitation]] * [[Active Directory Security and Penetration Testing/Chapter 11 - Privilege Escalation|Chapter 11: Privilege Escalation]] * [[Active Directory Security and Penetration Testing/Chapter 12 - Persistence Mechanisms|Chapter 12: Persistence Mechanisms]] [[Active Directory Security and Penetration Testing/Part 4 - CVE Scanning|Part 4: CVE Scanning & Vulnerability Detection]] * [[Active Directory Security and Penetration Testing/Chapter 13 - Built-in CVE Scanners|Chapter 13: Built-in CVE Scanners]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * [[Active Directory Security and Penetration Testing/Chapter 15 - Custom Tool Integration|Chapter 15: Custom Tool Integration]] * [[Active Directory Security and Penetration Testing/Chapter 16 - Performance Optimization|Chapter 16: Performance Optimization]] * [[Active Directory Security and Penetration Testing/Chapter 17 - Defensive Measures|Chapter 17: Defensive Measures & Hardening]] * [[Active Directory Security and Penetration Testing/Chapter 18 - Case Studies|Chapter 18: Case Studies & Real-World Scenarios]] == Quick Start == {{Note|Before using ADPenTest, ensure you have proper authorization from the system owner. Unauthorized access is illegal.}} To get started quickly:<syntaxhighlight lang="bash"> # Install ADPenTest pip install adpentest # Run your first scan (dry-run mode by default) adpentest --target corp.local # Execute scan with authorization adpentest --target corp.local --scope-confirmed # View scan history adpentest --history # Generate CVE report adpentest --cve-report </syntaxhighlight>See [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6]] for detailed usage instructions. == Key Features of ADPenTest == {| class="wikitable" !Feature !Description |- |'''Multi-threaded Execution''' |35+ integrated tools running in parallel for 10-15x speedup |- |'''Automated DC Discovery''' |DNS SRV records, LDAP probes, port fingerprinting |- |'''CVE Scanning''' |7 built-in scanners for critical AD vulnerabilities (CVSS 7.5-9.4) |- |'''WAF Bypass Engine''' |Techniques for testing behind firewalls (LDAP/Kerberos over raw protocols) |- |'''Persistent History''' |SQLite database of all scan results for trend analysis |- |'''Safety-First Design''' |Dry-run by default, requires explicit authorization flags |} == Prerequisites == * {{colorbox|lightyellow|Python 3.8 or higher}} * {{colorbox|lightyellow|Linux or Windows system}} * {{colorbox|lightyellow|Network access to target Active Directory}} * {{colorbox|lightyellow|Proper authorization/scope agreement}} * {{colorbox|lightyellow|Understanding of AD fundamentals}} == How to Use This Book == This wikibook is designed to be read in order, but you can jump to specific chapters: * '''Beginners:''' Start with [[Active Directory Security and Penetration Testing/Part 1 - Foundations|Part 1: Foundations]] * '''Intermediate:''' Jump to [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]] * '''Advanced:''' Explore [[Active Directory Security and Penetration Testing/Part 5 - Advanced Topics|Part 5: Advanced Topics]] * '''Reference:''' Use the {{colorbox|lightgray|Appendices}} for quick lookups Each chapter includes: * Clear learning objectives * Hands-on exercises * Real-world examples * Knowledge checks * Further reading links == Legal & Ethical Notice == {{Important|This wikibook covers penetration testing techniques that should ''only'' be used on systems you own or have explicit written permission to test. Unauthorized access to computer systems is illegal in most jurisdictions.}}Always: * Obtain proper authorization in writing * Define scope clearly with the system owner * Follow responsible disclosure practices * Report vulnerabilities ethically See [[Active Directory Security and Penetration Testing/Legal and Ethical Considerations|Legal & Ethical Considerations]] for more details. == Related Resources == * [[En.wikipedia:Active Directory|Wikipedia: Active Directory]] * [[En.wikipedia:Penetration testing|Wikipedia: Penetration Testing]] * [[github:netanelcyber/AdPentestAI-Python|ADPenTest GitHub Repository]] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [[En.wikibooks:Category:IT Security|IT Security Category]] == License == This wikibook is licensed under the {{color box|lightgreen|Creative Commons Attribution-ShareAlike License (CC-BY-SA 4.0)}} --- dyym2cp476adxg0gcz4p754w8q1kazd Active Directory Security and Penetration Testing/Part 1 - Foundations 0 485820 4672022 2026-09-24T02:56:52Z נתנאל שטרן 3337472 Created page with "== Part 1: Foundations == This part covers the foundational knowledge needed for Active Directory penetration testing. You'll learn about AD architecture, basic security concepts, and how to set up your testing environment. === What You'll Learn === * How Active Directory is structured and organized * Basic penetration testing methodology and phases * How to set up a lab environment for safe testing * Key security concepts specific to AD * Tools and prerequisites need..." 4672022 wikitext text/x-wiki == Part 1: Foundations == This part covers the foundational knowledge needed for Active Directory penetration testing. You'll learn about AD architecture, basic security concepts, and how to set up your testing environment. === What You'll Learn === * How Active Directory is structured and organized * Basic penetration testing methodology and phases * How to set up a lab environment for safe testing * Key security concepts specific to AD * Tools and prerequisites needed for testing === Chapters in This Part === * [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] Learn how Active Directory works, including domains, trusts, organizational units, and group policy fundamentals. * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] Understand the penetration testing methodology, attack phases, and how they apply to AD environments. * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] Set up your testing environment safely, including lab network configuration and tool installation. === Prerequisites === * Basic understanding of networking (TCP/IP, DNS) * Familiarity with Windows and Linux command-line interfaces * Understanding of basic authentication concepts === Estimated Time === Plan for 6-10 hours to complete this part. === Next Steps === After completing Part 1, proceed to [[Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework|Part 2: ADPenTest Framework]]. --- [[Category:Active Directory Security and Penetration Testing]] 62hlf1t7jzhf3z1ytgjhkm5t3n00fss Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics 0 485821 4672024 2026-09-24T02:58:35Z נתנאל שטרן 3337472 Created page with "== Chapter 1: Active Directory Basics == === Learning Objectives === By the end of this chapter, you will understand: * What Active Directory is and its role in enterprise IT * The hierarchical structure of AD domains and forests * Key AD components and their functions * Trust relationships and how they work * Organizational Units (OUs) and Group Policy * Security principals and access control in AD * Why AD is a common penetration testing target === Prerequisites ===..." 4672024 wikitext text/x-wiki == Chapter 1: Active Directory Basics == === Learning Objectives === By the end of this chapter, you will understand: * What Active Directory is and its role in enterprise IT * The hierarchical structure of AD domains and forests * Key AD components and their functions * Trust relationships and how they work * Organizational Units (OUs) and Group Policy * Security principals and access control in AD * Why AD is a common penetration testing target === Prerequisites === * Basic understanding of networking (TCP/IP, DNS) * Familiarity with Windows server concepts * Understanding of user authentication basics * No prior AD experience required --- === Introduction to Active Directory === '''Active Directory (AD)''' is Microsoft's centralized directory service for managing users, computers, and resources in an enterprise network. It serves as the backbone of most corporate IT environments, making it both a critical asset and a high-value target for penetration testing. ==== Why Active Directory Matters ==== Active Directory is used by approximately 90% of Fortune 500 companies and controls: * {{colorbox|lightblue|User authentication}} - Credentials and access control * {{colorbox|lightblue|Device management}} - Computer configurations and security policies * {{colorbox|lightblue|Resource access}} - File shares, printers, and applications * {{colorbox|lightblue|Security policies}} - Group Policy enforcement * {{colorbox|lightblue|Enterprise infrastructure}} - DNS, DHCP, and certificate services {{Important|Understanding AD architecture is critical for penetration testers because compromise of AD often means compromise of the entire enterprise.}} --- === Active Directory Architecture === ==== Core Components === AD consists of several interconnected components: ===== 1. Domain ===== A '''domain''' is the basic administrative unit in Active Directory. * Contains users, computers, and other resources * Has a unique name (e.g., corp.local, example.com) * Managed by Domain Controllers (DCs) * Contains a directory database with all security information * Enforces security policies across member computers Example domain structure: <syntaxhighlight lang="text"> corp.local (Domain) ├─ Users (1,000+ user accounts) ├─ Computers (500+ computer accounts) ├─ Groups (security and distribution groups) ├─ Printers, File Shares, Applications └─ Group Policy Objects (GPOs) </syntaxhighlight> ===== 2. Forest ===== A '''forest''' is a collection of domains that share a common schema and trust relationship. * Multiple domains can be in a single forest * Domains share a common Global Catalog * Transitive trusts between domains * Single schema for the entire forest * Single Enterprise forest root domain Example: <syntaxhighlight lang="text"> Example.com Forest ├─ example.com (root domain) │ ├─ DC1.example.com │ └─ DC2.example.com ├─ sales.example.com (child domain) │ ├─ DC1.sales.example.com │ └─ DC2.sales.example.com └─ engineering.example.com (child domain) ├─ DC1.engineering.example.com └─ DC2.engineering.example.com </syntaxhighlight> ===== 3. Domain Controllers (DCs) ===== '''Domain Controllers''' are servers running Active Directory Domain Services (AD DS). Key responsibilities: * Authenticate user logons * Store the directory database * Replicate AD data to other DCs * Enforce security policies * Serve Kerberos tickets * Manage DNS and LDAP services {{Note|Every domain has at least one Domain Controller, but most enterprises have 2+ for redundancy and load balancing.}} ===== 4. Organizational Units (OUs) ===== '''Organizational Units''' are containers used to organize AD objects hierarchically. * Group users, computers, and other objects * Apply Group Policy to specific OUs * Delegate administrative permissions * Reflect organizational structure Example OU hierarchy: <syntaxhighlight lang="text"> corp.local ├─ Departments │ ├─ Engineering │ │ ├─ Servers │ │ ├─ Workstations │ │ └─ Users │ ├─ Finance │ │ ├─ Servers │ │ └─ Users │ └─ Marketing ├─ Locations │ ├─ New York │ ├─ London │ └─ Tokyo └─ Service Accounts ├─ Application Accounts └─ Service Accounts </syntaxhighlight> ===== 5. Schema ===== The '''schema''' defines the structure and attributes of all objects in Active Directory. * Defines object types (users, computers, groups) * Specifies allowed attributes for each object * Enforced across the entire forest * Rarely modified in production environments {{Warning|Schema modifications can affect the entire forest and should only be done by experienced administrators.}} --- === Security Principals === A '''security principal''' is any object in Active Directory that can be assigned permissions. The main types are: ==== Users ==== User accounts represent people who log into the network. * Individual identity and credentials * Associated with a SID (Security Identifier) * Can own resources and have group memberships * Subject to password policies * Can be enabled/disabled <syntaxhighlight lang="text"> User Account Properties: ├─ Username (samAccountName) ├─ Full Name (displayName) ├─ Password (hashed) ├─ Home Folder ├─ Email Address ├─ Department ├─ Manager ├─ Phone Number └─ Group Memberships </syntaxhighlight> ==== Computers ==== Computer accounts represent physical or virtual machines on the network. * One account per computer * Authenticates to the domain * Has its own password (managed by Windows) * Subject to Group Policy * Can be members of groups {{Note|Computer accounts are often overlooked in security assessments but can be valuable penetration testing targets.}} ==== Groups ==== Groups are containers for organizing security principals. '''Security Groups:''' * Used for assigning permissions to resources * Can have users, computers, and other groups as members * Types: Global, Domain Local, Universal '''Distribution Groups:''' * Used for email distribution lists * Not used for access control * Cannot be used in ACLs (Access Control Lists) Examples: <syntaxhighlight lang="text"> Security Groups: ├─ Domain Admins (highest privilege) ├─ Enterprise Admins (forest-wide privilege) ├─ Server Operators (server management) ├─ Backup Operators (backup permissions) └─ Custom Groups (application-specific) Distribution Groups: ├─ All Company ├─ Engineering Team └─ Finance Department </syntaxhighlight> ==== Service Accounts ==== Service accounts are special accounts used by applications and services. * Run Windows services * Often have high privileges * Passwords stored in plaintext in service configuration * Commonly overlooked in security audits {{Important|Service accounts are frequently weak points in AD security. Many service accounts have overly broad permissions or weak passwords.}} --- === Active Directory Trusts === '''Trusts''' establish relationships between domains, allowing users in one domain to access resources in another domain. ==== Types of Trusts ==== ===== Parent-Child Trust ===== Automatically created when a domain is added to a forest. * Two-way transitive * Child trusts parent and parent trusts child * Automatic across the forest <syntaxhighlight lang="text"> example.com (Parent) ↕ Two-way Transitive Trust sales.example.com (Child) </syntaxhighlight> ===== External Trust ===== Manually created between domains in different forests. * One-way or two-way * Non-transitive (doesn't extend to other domains) * Requires explicit configuration * Common between company and partner networks ===== Forest Trust ===== Trust relationship between entire forests. * Can be one-way or two-way * Allows transitive access across forests * Used for mergers/acquisitions * Most powerful trust type ===== Shortcut Trust ===== Manually created to optimize authentication performance. * Non-transitive * Between domains in same forest * Reduces authentication latency {{Warning|Trust relationships are often exploited in penetration testing to move between domains. Understanding trust configurations is critical for attack planning.}} ==== Trust Direction ==== Trusts can be configured in different directions: * '''Inbound Trust:''' Trusting domain trusts the trusted domain * '''Outbound Trust:''' Trusting domain is trusted by the trusted domain * '''Two-way Trust:''' Bidirectional authentication --- === Group Policy === '''Group Policy''' is the mechanism for centrally managing configurations and security settings across an enterprise. ==== Group Policy Objects (GPOs) ==== A '''Group Policy Object (GPO)''' contains policy settings that apply to users and computers. Typical GPO settings: * Password requirements * Account lockout policies * Software installation * Script execution * Firewall rules * Drive encryption (BitLocker) * Windows updates ==== GPO Application ==== GPOs are applied hierarchically: <syntaxhighlight lang="text"> Application Hierarchy: 1. Local Group Policy (computer-specific) 2. Site policies (if computer in AD site) 3. Domain policies 4. Organizational Unit (OU) policies 5. Child OU policies (if nested) Note: Later policies override earlier ones (LSDO - Last Sue Wins in Domain Order) </syntaxhighlight> ==== Group Policy and Security ==== Group Policy is used to enforce: * Strong password policies * Account lockout after failed attempts * Disable unnecessary services * Configure firewalls * Install security software * Enforce encryption {{Important|Misconfigured Group Policy is a common source of security vulnerabilities. GPO auditing and review should be part of any AD security assessment.}} --- === Authentication in Active Directory === ==== Kerberos Protocol ==== Kerberos is the primary authentication protocol in Active Directory. ===== How Kerberos Works ===== <syntaxhighlight lang="text"> Simplified Kerberos Flow: 1. User enters credentials → Local machine 2. Local machine contacts Key Distribution Center (KDC) 3. KDC issues Ticket Granting Ticket (TGT) 4. User uses TGT to request service tickets 5. User presents service ticket to access resource 6. Resource grants access (or denies) </syntaxhighlight> ===== Key Components ===== * '''Key Distribution Center (KDC):''' Runs on every Domain Controller * '''Ticket Granting Ticket (TGT):''' Proves user identity * '''Service Ticket:''' Grants access to specific service {{Note|Kerberos is secure ''by design'', but implementation vulnerabilities exist (Kerberoasting, AS-REP roasting, etc.). See [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9]] for details.}} ==== NTLM ==== NTLM is the legacy authentication protocol in Active Directory. * Still used for backwards compatibility * Less secure than Kerberos * Vulnerable to relay and replay attacks * Being phased out in modern Windows {{Warning|NTLM should be disabled where possible, but many legacy systems still require it. This creates security gaps that penetration testers often exploit.}} --- === Access Control in Active Directory === ==== Access Control Lists (ACLs) ==== '''Access Control Lists''' define who can access AD objects and what permissions they have. * Applied to every AD object * Specify allowed and denied permissions * Inherited from parent objects (by default) * Can be delegated to other administrators Common permissions: * Read * Write * Create Child Objects * Delete Child Objects * Modify Object Permissions * Full Control ==== Delegation === Administrative tasks can be delegated to other users or groups. Common delegations: * Password reset authority * Add computers to domain * Create users in specific OUs * Manage group memberships * Manage mailboxes (if Exchange integrated) {{Important|Over-delegation is a common security issue. Users often have more permissions than needed for their job. This increases the risk of both accidental misuse and intentional abuse.}} --- === Common AD Objects === {| class="wikitable" |- ! Object Type !! Purpose !! Example |- | User || Represent people || john.smith@corp.local |- | Computer || Represent machines || WORKSTATION-01, SERVER-01 |- | Group || Organize security principals || Domain Admins, Engineering Team |- | Organizational Unit || Organize objects hierarchically || OU=Engineering,DC=corp,DC=local |- | Group Policy Object || Apply settings to users/computers || Domain Password Policy |- | Contact || External person/resource || partner@external.com |- | Service Principal Name || Service on computer || HTTP/webserver.corp.local |- | Certificate || Digital identity || AD-integrated certificates |} --- === AD Security Best Practices === Organizations should implement: ✓ '''Strong password policies''' - Length, complexity, history ✓ '''Account lockout protection''' - Lock after N failed attempts ✓ '''Privileged Access Management (PAM)''' - Protect admin accounts ✓ '''Multi-factor authentication (MFA)''' - Additional factor beyond password ✓ '''Regular AD audits''' - Review permissions and GPOs ✓ '''Principle of least privilege''' - Users have minimum required permissions ✓ '''Disable unnecessary services''' - Reduce attack surface ✓ '''Monitor for suspicious activity''' - Detect attacks ✓ '''Keep AD patched''' - Apply security updates ✓ '''Separate admin and user accounts''' - Privileged accounts not used for daily work {{Note|The best AD security comes from a combination of technical controls and administrative discipline. Penetration testing helps identify where these controls are lacking.}} --- === Real-World AD Scenarios === {{Example| '''Scenario 1: Multi-Domain Forest''' A large corporation has: * Root domain: example.com (central IT) * Child domain: sales.example.com (sales division) * Child domain: engineering.example.com (engineering division) * Each domain has 2-3 Domain Controllers * Users can log in with any domain account (transitive trusts) * Group Policy applied at multiple levels '''Penetration Testing Implications:''' * Must test all domains and trusts * Privilege escalation in one domain may grant access to others * Cross-domain attack paths common }} {{Example| '''Scenario 2: External Trust for Merger''' Company A (example.com) acquires Company B (acmecorp.local) * External trust created between forests * Limited to specific groups (integration team) * Allows some cross-company access while maintaining separation * Regular audits needed to ensure trust is still appropriate '''Penetration Testing Implications:''' * Test the external trust configuration * Identify who can access across trust * Look for over-privileged accounts * Test for trust exploitation techniques }} --- === Key Takeaways === Before moving to the next chapter, remember: ✓ AD controls '''authentication and access''' for most enterprises ✓ '''Domain Controllers''' store and manage all AD data ✓ '''Organizational Units''' organize objects and apply Group Policy ✓ '''Security principals''' (users, computers, groups) can be assigned permissions ✓ '''Trusts''' enable access across domains ✓ '''Kerberos''' is the primary authentication protocol ✓ '''Group Policy''' enforces security settings ✓ '''ACLs''' control who can access what ✓ AD security depends on '''proper configuration and monitoring''' --- === Knowledge Check === Test your understanding of AD basics: # What are the three main types of security principals in Active Directory? # Explain the difference between a domain and a forest. # What is the purpose of an Organizational Unit (OU)? # Name three components that make up Active Directory architecture. # What is a Group Policy Object (GPO) used for? # Describe how Kerberos authentication works in simplified steps. # What is an external trust and when would it be used? # Why are service accounts often security risks? # True or False: All trusts in a forest are transitive. # What does the principle of least privilege mean? {{Note|Answers: 1) Users, Computers, Groups 2) Domain=admin unit, Forest=collection of domains with trust 3) Organize objects hierarchically and apply policies 4) Domains, DCs, OUs, Schema 5) Apply security settings/configs to users/computers 6) User→KDC for TGT→TGT for service ticket→access service 7) Between different forests, manual config, for mergers/partners 8) Often have high privilege, weak password, overly broad permissions 9) False - only some are transitive 10) Users have minimum permissions needed for job}} --- === Hands-On Exercise === {{Note| '''Exercise: Explore an Active Directory Domain''' If you have access to an AD lab or test environment: 1. '''Connect to a Domain Controller''' via Remote Desktop 2. '''Open Active Directory Users and Computers''' (dsa.msc) 3. '''Explore the structure:''' - Expand the domain tree - Examine OUs and their organization - Review built-in groups - Check user properties 4. '''Find Domain Controllers:''' - Locate Domain Controller objects - Note their names and locations 5. '''Review Group Policy:''' - Open Group Policy Management (gpmc.msc) - Examine applied GPOs - Review policy inheritance 6. '''Check Trust Relationships:''' - Open Active Directory Domains and Trusts - View configured trusts - Note trust direction This exercise helps you understand AD structure in a real environment. }} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/get-started-with-active-directory-domain-services Microsoft Learn: Active Directory Domain Services] * [https://en.wikipedia.org/wiki/Active_Directory Wikipedia: Active Directory] * [https://attack.mitre.org/tactics/TA0007/ MITRE ATT&CK: Discovery] --- [[Category:Active Directory Security and Penetration Testing]] [[Category:Active Directory]] [[Category:Foundational Knowledge]] 9wr8pbzwatmlmopli2gjupidurm3epa 4672025 4672024 2026-09-24T02:59:08Z נתנאל שטרן 3337472 /* Why Active Directory Matters */ 4672025 wikitext text/x-wiki == Chapter 1: Active Directory Basics == === Learning Objectives === By the end of this chapter, you will understand: * What Active Directory is and its role in enterprise IT * The hierarchical structure of AD domains and forests * Key AD components and their functions * Trust relationships and how they work * Organizational Units (OUs) and Group Policy * Security principals and access control in AD * Why AD is a common penetration testing target === Prerequisites === * Basic understanding of networking (TCP/IP, DNS) * Familiarity with Windows server concepts * Understanding of user authentication basics * No prior AD experience required --- === Introduction to Active Directory === '''Active Directory (AD)''' is Microsoft's centralized directory service for managing users, computers, and resources in an enterprise network. It serves as the backbone of most corporate IT environments, making it both a critical asset and a high-value target for penetration testing. ==== Why Active Directory Matters ==== Active Directory is used by approximately 90% of Fortune 500 companies and controls: * {{color box|lightblue|User authentication}} - Credentials and access control * {{color box|lightblue|Device management}} - Computer configurations and security policies * {{color box|lightblue|Resource access}} - File shares, printers, and applications * {{color box|lightblue|Security policies}} - Group Policy enforcement * {{color box|lightblue|Enterprise infrastructure}} - DNS, DHCP, and certificate services {{Important|Understanding AD architecture is critical for penetration testers because compromise of AD often means compromise of the entire enterprise.}} --- === Active Directory Architecture === ==== Core Components === AD consists of several interconnected components: ===== 1. Domain ===== A '''domain''' is the basic administrative unit in Active Directory. * Contains users, computers, and other resources * Has a unique name (e.g., corp.local, example.com) * Managed by Domain Controllers (DCs) * Contains a directory database with all security information * Enforces security policies across member computers Example domain structure: <syntaxhighlight lang="text"> corp.local (Domain) ├─ Users (1,000+ user accounts) ├─ Computers (500+ computer accounts) ├─ Groups (security and distribution groups) ├─ Printers, File Shares, Applications └─ Group Policy Objects (GPOs) </syntaxhighlight> ===== 2. Forest ===== A '''forest''' is a collection of domains that share a common schema and trust relationship. * Multiple domains can be in a single forest * Domains share a common Global Catalog * Transitive trusts between domains * Single schema for the entire forest * Single Enterprise forest root domain Example: <syntaxhighlight lang="text"> Example.com Forest ├─ example.com (root domain) │ ├─ DC1.example.com │ └─ DC2.example.com ├─ sales.example.com (child domain) │ ├─ DC1.sales.example.com │ └─ DC2.sales.example.com └─ engineering.example.com (child domain) ├─ DC1.engineering.example.com └─ DC2.engineering.example.com </syntaxhighlight> ===== 3. Domain Controllers (DCs) ===== '''Domain Controllers''' are servers running Active Directory Domain Services (AD DS). Key responsibilities: * Authenticate user logons * Store the directory database * Replicate AD data to other DCs * Enforce security policies * Serve Kerberos tickets * Manage DNS and LDAP services {{Note|Every domain has at least one Domain Controller, but most enterprises have 2+ for redundancy and load balancing.}} ===== 4. Organizational Units (OUs) ===== '''Organizational Units''' are containers used to organize AD objects hierarchically. * Group users, computers, and other objects * Apply Group Policy to specific OUs * Delegate administrative permissions * Reflect organizational structure Example OU hierarchy: <syntaxhighlight lang="text"> corp.local ├─ Departments │ ├─ Engineering │ │ ├─ Servers │ │ ├─ Workstations │ │ └─ Users │ ├─ Finance │ │ ├─ Servers │ │ └─ Users │ └─ Marketing ├─ Locations │ ├─ New York │ ├─ London │ └─ Tokyo └─ Service Accounts ├─ Application Accounts └─ Service Accounts </syntaxhighlight> ===== 5. Schema ===== The '''schema''' defines the structure and attributes of all objects in Active Directory. * Defines object types (users, computers, groups) * Specifies allowed attributes for each object * Enforced across the entire forest * Rarely modified in production environments {{Warning|Schema modifications can affect the entire forest and should only be done by experienced administrators.}} --- === Security Principals === A '''security principal''' is any object in Active Directory that can be assigned permissions. The main types are: ==== Users ==== User accounts represent people who log into the network. * Individual identity and credentials * Associated with a SID (Security Identifier) * Can own resources and have group memberships * Subject to password policies * Can be enabled/disabled <syntaxhighlight lang="text"> User Account Properties: ├─ Username (samAccountName) ├─ Full Name (displayName) ├─ Password (hashed) ├─ Home Folder ├─ Email Address ├─ Department ├─ Manager ├─ Phone Number └─ Group Memberships </syntaxhighlight> ==== Computers ==== Computer accounts represent physical or virtual machines on the network. * One account per computer * Authenticates to the domain * Has its own password (managed by Windows) * Subject to Group Policy * Can be members of groups {{Note|Computer accounts are often overlooked in security assessments but can be valuable penetration testing targets.}} ==== Groups ==== Groups are containers for organizing security principals. '''Security Groups:''' * Used for assigning permissions to resources * Can have users, computers, and other groups as members * Types: Global, Domain Local, Universal '''Distribution Groups:''' * Used for email distribution lists * Not used for access control * Cannot be used in ACLs (Access Control Lists) Examples: <syntaxhighlight lang="text"> Security Groups: ├─ Domain Admins (highest privilege) ├─ Enterprise Admins (forest-wide privilege) ├─ Server Operators (server management) ├─ Backup Operators (backup permissions) └─ Custom Groups (application-specific) Distribution Groups: ├─ All Company ├─ Engineering Team └─ Finance Department </syntaxhighlight> ==== Service Accounts ==== Service accounts are special accounts used by applications and services. * Run Windows services * Often have high privileges * Passwords stored in plaintext in service configuration * Commonly overlooked in security audits {{Important|Service accounts are frequently weak points in AD security. Many service accounts have overly broad permissions or weak passwords.}} --- === Active Directory Trusts === '''Trusts''' establish relationships between domains, allowing users in one domain to access resources in another domain. ==== Types of Trusts ==== ===== Parent-Child Trust ===== Automatically created when a domain is added to a forest. * Two-way transitive * Child trusts parent and parent trusts child * Automatic across the forest <syntaxhighlight lang="text"> example.com (Parent) ↕ Two-way Transitive Trust sales.example.com (Child) </syntaxhighlight> ===== External Trust ===== Manually created between domains in different forests. * One-way or two-way * Non-transitive (doesn't extend to other domains) * Requires explicit configuration * Common between company and partner networks ===== Forest Trust ===== Trust relationship between entire forests. * Can be one-way or two-way * Allows transitive access across forests * Used for mergers/acquisitions * Most powerful trust type ===== Shortcut Trust ===== Manually created to optimize authentication performance. * Non-transitive * Between domains in same forest * Reduces authentication latency {{Warning|Trust relationships are often exploited in penetration testing to move between domains. Understanding trust configurations is critical for attack planning.}} ==== Trust Direction ==== Trusts can be configured in different directions: * '''Inbound Trust:''' Trusting domain trusts the trusted domain * '''Outbound Trust:''' Trusting domain is trusted by the trusted domain * '''Two-way Trust:''' Bidirectional authentication --- === Group Policy === '''Group Policy''' is the mechanism for centrally managing configurations and security settings across an enterprise. ==== Group Policy Objects (GPOs) ==== A '''Group Policy Object (GPO)''' contains policy settings that apply to users and computers. Typical GPO settings: * Password requirements * Account lockout policies * Software installation * Script execution * Firewall rules * Drive encryption (BitLocker) * Windows updates ==== GPO Application ==== GPOs are applied hierarchically: <syntaxhighlight lang="text"> Application Hierarchy: 1. Local Group Policy (computer-specific) 2. Site policies (if computer in AD site) 3. Domain policies 4. Organizational Unit (OU) policies 5. Child OU policies (if nested) Note: Later policies override earlier ones (LSDO - Last Sue Wins in Domain Order) </syntaxhighlight> ==== Group Policy and Security ==== Group Policy is used to enforce: * Strong password policies * Account lockout after failed attempts * Disable unnecessary services * Configure firewalls * Install security software * Enforce encryption {{Important|Misconfigured Group Policy is a common source of security vulnerabilities. GPO auditing and review should be part of any AD security assessment.}} --- === Authentication in Active Directory === ==== Kerberos Protocol ==== Kerberos is the primary authentication protocol in Active Directory. ===== How Kerberos Works ===== <syntaxhighlight lang="text"> Simplified Kerberos Flow: 1. User enters credentials → Local machine 2. Local machine contacts Key Distribution Center (KDC) 3. KDC issues Ticket Granting Ticket (TGT) 4. User uses TGT to request service tickets 5. User presents service ticket to access resource 6. Resource grants access (or denies) </syntaxhighlight> ===== Key Components ===== * '''Key Distribution Center (KDC):''' Runs on every Domain Controller * '''Ticket Granting Ticket (TGT):''' Proves user identity * '''Service Ticket:''' Grants access to specific service {{Note|Kerberos is secure ''by design'', but implementation vulnerabilities exist (Kerberoasting, AS-REP roasting, etc.). See [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9]] for details.}} ==== NTLM ==== NTLM is the legacy authentication protocol in Active Directory. * Still used for backwards compatibility * Less secure than Kerberos * Vulnerable to relay and replay attacks * Being phased out in modern Windows {{Warning|NTLM should be disabled where possible, but many legacy systems still require it. This creates security gaps that penetration testers often exploit.}} --- === Access Control in Active Directory === ==== Access Control Lists (ACLs) ==== '''Access Control Lists''' define who can access AD objects and what permissions they have. * Applied to every AD object * Specify allowed and denied permissions * Inherited from parent objects (by default) * Can be delegated to other administrators Common permissions: * Read * Write * Create Child Objects * Delete Child Objects * Modify Object Permissions * Full Control ==== Delegation === Administrative tasks can be delegated to other users or groups. Common delegations: * Password reset authority * Add computers to domain * Create users in specific OUs * Manage group memberships * Manage mailboxes (if Exchange integrated) {{Important|Over-delegation is a common security issue. Users often have more permissions than needed for their job. This increases the risk of both accidental misuse and intentional abuse.}} --- === Common AD Objects === {| class="wikitable" |- ! Object Type !! Purpose !! Example |- | User || Represent people || john.smith@corp.local |- | Computer || Represent machines || WORKSTATION-01, SERVER-01 |- | Group || Organize security principals || Domain Admins, Engineering Team |- | Organizational Unit || Organize objects hierarchically || OU=Engineering,DC=corp,DC=local |- | Group Policy Object || Apply settings to users/computers || Domain Password Policy |- | Contact || External person/resource || partner@external.com |- | Service Principal Name || Service on computer || HTTP/webserver.corp.local |- | Certificate || Digital identity || AD-integrated certificates |} --- === AD Security Best Practices === Organizations should implement: ✓ '''Strong password policies''' - Length, complexity, history ✓ '''Account lockout protection''' - Lock after N failed attempts ✓ '''Privileged Access Management (PAM)''' - Protect admin accounts ✓ '''Multi-factor authentication (MFA)''' - Additional factor beyond password ✓ '''Regular AD audits''' - Review permissions and GPOs ✓ '''Principle of least privilege''' - Users have minimum required permissions ✓ '''Disable unnecessary services''' - Reduce attack surface ✓ '''Monitor for suspicious activity''' - Detect attacks ✓ '''Keep AD patched''' - Apply security updates ✓ '''Separate admin and user accounts''' - Privileged accounts not used for daily work {{Note|The best AD security comes from a combination of technical controls and administrative discipline. Penetration testing helps identify where these controls are lacking.}} --- === Real-World AD Scenarios === {{Example| '''Scenario 1: Multi-Domain Forest''' A large corporation has: * Root domain: example.com (central IT) * Child domain: sales.example.com (sales division) * Child domain: engineering.example.com (engineering division) * Each domain has 2-3 Domain Controllers * Users can log in with any domain account (transitive trusts) * Group Policy applied at multiple levels '''Penetration Testing Implications:''' * Must test all domains and trusts * Privilege escalation in one domain may grant access to others * Cross-domain attack paths common }} {{Example| '''Scenario 2: External Trust for Merger''' Company A (example.com) acquires Company B (acmecorp.local) * External trust created between forests * Limited to specific groups (integration team) * Allows some cross-company access while maintaining separation * Regular audits needed to ensure trust is still appropriate '''Penetration Testing Implications:''' * Test the external trust configuration * Identify who can access across trust * Look for over-privileged accounts * Test for trust exploitation techniques }} --- === Key Takeaways === Before moving to the next chapter, remember: ✓ AD controls '''authentication and access''' for most enterprises ✓ '''Domain Controllers''' store and manage all AD data ✓ '''Organizational Units''' organize objects and apply Group Policy ✓ '''Security principals''' (users, computers, groups) can be assigned permissions ✓ '''Trusts''' enable access across domains ✓ '''Kerberos''' is the primary authentication protocol ✓ '''Group Policy''' enforces security settings ✓ '''ACLs''' control who can access what ✓ AD security depends on '''proper configuration and monitoring''' --- === Knowledge Check === Test your understanding of AD basics: # What are the three main types of security principals in Active Directory? # Explain the difference between a domain and a forest. # What is the purpose of an Organizational Unit (OU)? # Name three components that make up Active Directory architecture. # What is a Group Policy Object (GPO) used for? # Describe how Kerberos authentication works in simplified steps. # What is an external trust and when would it be used? # Why are service accounts often security risks? # True or False: All trusts in a forest are transitive. # What does the principle of least privilege mean? {{Note|Answers: 1) Users, Computers, Groups 2) Domain=admin unit, Forest=collection of domains with trust 3) Organize objects hierarchically and apply policies 4) Domains, DCs, OUs, Schema 5) Apply security settings/configs to users/computers 6) User→KDC for TGT→TGT for service ticket→access service 7) Between different forests, manual config, for mergers/partners 8) Often have high privilege, weak password, overly broad permissions 9) False - only some are transitive 10) Users have minimum permissions needed for job}} --- === Hands-On Exercise === {{Note| '''Exercise: Explore an Active Directory Domain''' If you have access to an AD lab or test environment: 1. '''Connect to a Domain Controller''' via Remote Desktop 2. '''Open Active Directory Users and Computers''' (dsa.msc) 3. '''Explore the structure:''' - Expand the domain tree - Examine OUs and their organization - Review built-in groups - Check user properties 4. '''Find Domain Controllers:''' - Locate Domain Controller objects - Note their names and locations 5. '''Review Group Policy:''' - Open Group Policy Management (gpmc.msc) - Examine applied GPOs - Review policy inheritance 6. '''Check Trust Relationships:''' - Open Active Directory Domains and Trusts - View configured trusts - Note trust direction This exercise helps you understand AD structure in a real environment. }} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/get-started-with-active-directory-domain-services Microsoft Learn: Active Directory Domain Services] * [https://en.wikipedia.org/wiki/Active_Directory Wikipedia: Active Directory] * [https://attack.mitre.org/tactics/TA0007/ MITRE ATT&CK: Discovery] --- [[Category:Active Directory Security and Penetration Testing]] [[Category:Active Directory]] [[Category:Foundational Knowledge]] 55pv4yk8nd9vdc6b1xz1afhf3tyum97 Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals 0 485822 4672026 2026-09-24T03:03:41Z נתנאל שטרן 3337472 Created page with "== Chapter 2: Penetration Testing Fundamentals == === Learning Objectives === By the end of this chapter, you will understand: * What penetration testing is and its purpose * Standard penetration testing methodologies and phases * How penetration testing applies to Active Directory * The complete AD attack lifecycle * Common attack vectors specific to AD * How to approach an AD penetration test systematically * The relationship between reconnaissance, enumeration, and..." 4672026 wikitext text/x-wiki == Chapter 2: Penetration Testing Fundamentals == === Learning Objectives === By the end of this chapter, you will understand: * What penetration testing is and its purpose * Standard penetration testing methodologies and phases * How penetration testing applies to Active Directory * The complete AD attack lifecycle * Common attack vectors specific to AD * How to approach an AD penetration test systematically * The relationship between reconnaissance, enumeration, and exploitation * Ethical and legal considerations in penetration testing === Prerequisites === * Completion of [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * Understanding of basic networking concepts * Familiarity with Windows and Linux command-line interfaces * No prior penetration testing experience required --- === What is Penetration Testing? === '''Penetration Testing''' is a controlled, authorized security assessment where qualified professionals attempt to identify and exploit security vulnerabilities in systems, networks, or applications. ==== Key Characteristics ==== ✓ '''Authorized:''' Explicit written permission from system owner ✓ '''Controlled:''' Defined scope and rules of engagement ✓ '''Professional:''' Conducted by trained security professionals ✓ '''Systematic:''' Follows established methodologies ✓ '''Documented:''' Detailed findings and recommendations provided ✓ '''Actionable:''' Results lead to security improvements ==== Goals of Penetration Testing ==== 1. '''Identify vulnerabilities''' - Find security weaknesses before attackers do 2. '''Assess risk''' - Evaluate the real-world impact of vulnerabilities 3. '''Validate controls''' - Test if security measures actually work 4. '''Simulate attacks''' - Understand how attackers would compromise systems 5. '''Provide recommendations''' - Give actionable remediation advice 6. '''Improve security posture''' - Help organizations become more secure {{Important|Penetration testing is NOT hacking. It is an authorized, ethical, and legal assessment conducted with proper scope definition and rules of engagement.}} --- === Penetration Testing Methodologies === Several standardized methodologies guide penetration testing work. ==== NIST SP 800-115 ==== The NIST Cybersecurity Framework defines four phases: # '''Planning and Scoping''' # '''Discovery and Enumeration''' # '''Vulnerability Detection and Analysis''' # '''Reporting and Recommendations''' ==== PTES (Penetration Testing Execution Standard) ==== PTES defines seven phases: # '''Pre-engagement Interactions''' - Define scope, rules of engagement, timeline # '''Intelligence Gathering''' - Passive reconnaissance # '''Threat Modeling''' - Identify likely attack vectors # '''Vulnerability Analysis''' - Active scanning and testing # '''Exploitation''' - Attempt to compromise systems # '''Post-Exploitation''' - Maintain access, assess impact # '''Reporting''' - Document findings and recommendations ==== OWASP Testing Guide ==== OWASP (though primarily for web applications) provides a systematic approach to security testing. ==== OSSTMM ==== Open Source Security Testing Methodology Manual provides comprehensive security testing framework. {{Note|While different methodologies exist, they all follow the same general flow: plan → reconnaissance → enumerate → exploit → document. Most practitioners adapt these frameworks to their needs and organizational requirements.}} --- === Active Directory Penetration Testing Phases === AD penetration testing typically follows this flow: <syntaxhighlight lang="text"> AD Penetration Test Phases: ┌─────────────────────────────────────────────────────────────┐ │ Phase 1: Planning & Scoping │ │ - Define targets and scope │ │ - Obtain written authorization │ │ - Set rules of engagement │ │ - Identify key stakeholders │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ Phase 2: Reconnaissance │ │ - Passive information gathering │ │ - No direct system interaction │ │ - OSINT (Open Source Intelligence) │ │ - Identify domain structure from public sources │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ Phase 3: Enumeration │ │ - Active probing of AD infrastructure │ │ - Identify Domain Controllers │ │ - Enumerate users, groups, computers │ │ - Discover services and open ports │ │ - Assess initial access options │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ Phase 4: Vulnerability Assessment │ │ - Identify security misconfigurations │ │ - Test for known vulnerabilities │ │ - Weak credentials │ │ - Over-privileged accounts │ │ - Poor Group Policy settings │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ Phase 5: Exploitation │ │ - Attempt to compromise systems │ │ - Gain initial access │ │ - Escalate privileges │ │ - Move laterally across domain │ │ - Reach primary objectives │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ Phase 6: Post-Exploitation │ │ - Maintain access │ │ - Document the attack chain │ │ - Assess business impact │ │ - Identify lateral movement paths │ │ - Gather evidence of compromise │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ Phase 7: Reporting & Remediation │ │ - Document all findings │ │ - Provide risk ratings │ │ - Recommend remediations │ │ - Prioritize by impact and effort │ │ - Support remediation validation │ └─────────────────────────────────────────────────────────────┘ </syntaxhighlight> --- === Phase 1: Planning & Scoping === ==== Defining Scope ==== The scope defines what systems can and cannot be tested. '''In-scope items:''' * Which domains to test (corp.local, sales.local, etc.) * Which OUs to target (Engineering, Finance, etc.) * Which servers/systems can be tested * Testing timeframe and duration * Who should be contacted in case of issues '''Out-of-scope items:''' * Systems that should NOT be tested * Production systems that cannot be disrupted * Restricted areas or data * Third-party systems without permission {{Important|Clear scope definition protects both the tester and the organization. Ambiguous scope leads to misunderstandings and potential legal issues.}} ==== Authorization ==== Written authorization is '''legally required'''. Authorization should include: * Explicit permission to conduct testing * Start and end dates * Scope of testing * Names of authorized testers * Contact person for questions * Description of testing techniques * Acceptable impact level (non-disruptive, can disrupt services, etc.) ==== Rules of Engagement ==== Rules of engagement define how testing will be conducted. Typical ROE covers: * '''Timing:''' When testing can occur (business hours? weekends? 24/7?) * '''Techniques:''' Which attack techniques are allowed * '''Data handling:''' How sensitive data discovered will be handled * '''Communication:''' How to report issues/escalations * '''Escalation procedures:''' What to do if problems occur * '''Exit procedures:''' How to cleanly leave systems post-test {{Warning|Always follow the rules of engagement. Going beyond approved scope or techniques can result in legal consequences, even if testing is authorized.}} --- === Phase 2: Reconnaissance === '''Reconnaissance''' is passive information gathering about the target domain. ==== Passive Information Gathering ==== Conducted without directly interacting with target systems. '''Public DNS Records:''' <syntaxhighlight lang="bash"> # Query DNS for domain information nslookup corp.local dig corp.local MX dig corp.local NS dig corp.local TXT </syntaxhighlight> '''WHOIS Lookups:''' <syntaxhighlight lang="bash"> # Get domain registration information whois corp.local </syntaxhighlight> '''Search Engine Results:''' * Google: "corp.local" filetype:pdf * LinkedIn: Employees listing * Company websites: Technology stack, infrastructure hints '''Public Records:''' * SEC filings (if public company) * Job postings (reveal technologies in use) * Press releases * Email addresses found in public repositories '''Social Engineering Reconnaissance:''' * Dumpster diving for discarded documents * Pretexting via phone calls * Observation of employee behavior * Studying organizational charts {{Note|Reconnaissance is completely passive and legal. It gathers information that's already public or easily discoverable.}} --- === Phase 3: Enumeration === '''Enumeration''' is active probing to discover AD infrastructure and resources. ==== Domain Controller Discovery ==== Finding all Domain Controllers in the target domain. <syntaxhighlight lang="bash"> # Method 1: DNS SRV records nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.local # Method 2: LDAP query ldapsearch -x -h corp.local -b "DC=corp,DC=local" "(objectClass=computer)" # Method 3: Port scanning nmap -p 53,88,389,636,3268,3269 corp.local </syntaxhighlight> Results should identify: * DC names (DC1.corp.local, DC2.corp.local) * IP addresses * Operating system versions * LDAP versions {{Important|Domain Controller discovery is critical because DCs are the keys to the kingdom in AD. Compromising a DC usually means full domain compromise.}} ==== User and Group Enumeration ==== Discovering users, groups, and their memberships. <syntaxhighlight lang="bash"> # Enumerate users ldapsearch -x -h corp.local -b "DC=corp,DC=local" "(objectClass=user)" | grep uid # Enumerate groups ldapsearch -x -h corp.local -b "DC=corp,DC=local" "(objectClass=group)" # Find privileged users ldapsearch -x -h corp.local -b "DC=corp,DC=local" "(memberOf=CN=Domain Admins*)" </syntaxhighlight> Information gathered: * Usernames (for brute force or social engineering) * Email addresses * Phone numbers * Job titles * Department * Manager relationships * Group memberships ==== Service Discovery ==== Identifying services running on domain. <syntaxhighlight lang="bash"> # Find service principals ldapsearch -x -h corp.local -b "DC=corp,DC=local" "(servicePrincipalName=*)" # Port scanning for services masscan 192.168.1.0/24 -p 80,443,445,3389,5985,5986 # SMB enumeration crackmapexec smb 192.168.1.0/24 --shares </syntaxhighlight> Services commonly found: * HTTP/HTTPS (web servers) * SMB (file shares) * RDP (remote access) * MSSQL (databases) * Exchange (email) * Sharepoint * Custom applications --- === Phase 4: Vulnerability Assessment === '''Vulnerability Assessment''' identifies security weaknesses without attempting to exploit them. ==== Common AD Vulnerabilities ==== ===== 1. Weak Passwords ===== Users with weak, default, or reused passwords. <syntaxhighlight lang="bash"> # Check for weak passwords hydra -L users.txt -P wordlist.txt smb://dc1.corp.local # Common default passwords admin:admin administrator:password guest:guest </syntaxhighlight> Impact: User account compromise, credential theft ===== 2. Privilege Escalation Paths ===== Misconfigurations allowing users to gain higher privileges. * Over-privileged service accounts * Misconfigured Group Policy * Weak delegation settings * Kerberoasting vulnerable accounts * AS-REP roasting Impact: Privilege escalation to admin or domain admin ===== 3. Misconfigured Group Policy ===== Group Policy settings that weaken security. * Weak password policies (8 chars, no complexity) * Disabled account lockout * Anonymous LDAP queries allowed * Null session access enabled * Unnecessary services enabled Impact: Credential attacks, unauthorized access ===== 4. Outdated Systems ===== Unpatched systems with known vulnerabilities. <syntaxhighlight lang="bash"> # Check Windows patch level wmic qfe list # Check system version systeminfo | grep "OS" </syntaxhighlight> Impact: Exploitation via known CVEs ===== 5. Certificate Services Vulnerabilities ===== Misconfigured AD Certificate Services (ADCS). * Overly permissive certificate templates * ESC1/ESC3/ESC9 vulnerabilities * Weak enrollment rights Impact: Certificate abuse for privilege escalation {{Important|Vulnerability assessment informs the exploitation phase. Findings here guide which attack paths to attempt in Phase 5.}} --- === Phase 5: Exploitation === '''Exploitation''' is the actual attempt to compromise systems using identified vulnerabilities. ==== Initial Access ==== Getting a foothold in the AD environment. '''Common Initial Access Methods:''' 1. '''Weak Credentials''' - Credential brute-forcing - Default credentials - Credentials found in public repositories 2. '''Social Engineering''' - Phishing for credentials - Pretexting to gain information - Physical security exploits 3. '''External Attack Surface''' - Compromised web application - VPN vulnerability - Email server vulnerability - Remote access service (RDP, SSH) 4. '''Supply Chain''' - Compromised third-party software - Compromised vendor access - Trusted partner compromise {{Note|Initial access is often the hardest part. Once inside AD, lateral movement and privilege escalation are often straightforward.}} ==== Privilege Escalation ==== Escalating from initial access to higher privileges. '''Privilege Escalation Techniques:''' 1. '''Kerberoasting''' - Extract service tickets - Crack offline to recover passwords - Use recovered credentials for access 2. '''AS-REP Roasting''' - Exploit accounts with Kerberos preauthentication disabled - Recover password hashes - Crack offline 3. '''Group Policy Abuse''' - Schedule tasks with admin privileges - Deploy malware via GPO - Modify startup scripts 4. '''Delegation Abuse''' - Constrained delegation misconfiguration - Unconstrained delegation abuse - Resource-based constrained delegation 5. '''SeImpersonate/SeAssignPrimaryToken''' - Token impersonation attacks - Potato exploits - Service account privilege escalation ==== Lateral Movement ==== Moving from compromised system to other systems. '''Lateral Movement Techniques:''' 1. '''Pass-the-Hash (PTH)''' - Use captured NTLM hashes directly - Bypass password hashing 2. '''Pass-the-Ticket (PTT)''' - Steal Kerberos tickets - Use tickets to access services 3. '''DCSync Attack''' - Replicate AD database - Extract credential hashes - Compromise all users 4. '''Living off the Land''' - Use legitimate tools (PowerShell, certutil, etc.) - Avoid detection by using known-good tools <syntaxhighlight lang="bash"> # Example lateral movement chain 1. Compromise user account 2. Enumerate group memberships 3. Identify admin accounts 4. Check where admins are logged in 5. Move to that system 6. Extract credentials 7. Repeat until domain admin reached </syntaxhighlight> --- === Phase 6: Post-Exploitation === '''Post-Exploitation''' involves maintaining access and assessing impact after successful compromise. ==== Maintaining Access ==== Establishing persistent backdoors to maintain access. '''Persistence Techniques:''' 1. '''Golden Tickets''' - Create valid TGT valid for 10 years - Can impersonate any user - Survives password changes - Most powerful persistence mechanism 2. '''Silver Tickets''' - Create valid service tickets - Targeted to specific service - Lasts until password change (30 days typical) 3. '''DCSync Attacks''' - Grant replication permissions - Continuously extract hashes - Persistent access to credentials 4. '''Scheduled Tasks''' - Create hidden scheduled tasks - Run malware on schedule - Survive reboot 5. '''Backdoor Accounts''' - Create hidden user accounts - Set to never expire - Hide from normal listing ==== Impact Assessment ==== Understanding the damage potential of the compromise. '''Questions to Answer:''' * What systems can be accessed? * What data can be exfiltrated? * What damage could be caused? * How many users are affected? * What critical services would be disrupted? * What compliance requirements are violated? {{Important|Impact assessment helps prioritize remediation. High-impact vulnerabilities should be fixed first.}} --- === Phase 7: Reporting & Remediation === '''Reporting''' communicates findings to stakeholders in a clear, actionable manner. ==== Report Contents ==== A comprehensive penetration test report includes: 1. '''Executive Summary''' - High-level overview for leadership - Key findings and business risk - Overall risk rating 2. '''Methodology''' - Testing approach used - Standards and frameworks followed - Scope and timeline 3. '''Technical Findings''' - Detailed vulnerability descriptions - Attack chains demonstrating impact - Proof-of-concept evidence 4. '''Risk Assessment''' - CVSS scores for each finding - Business impact analysis - Likelihood and severity ratings 5. '''Recommendations''' - Prioritized remediation roadmap - Specific, actionable advice - Estimated effort and timeline 6. '''Appendices''' - Tool output - Screenshots - Detailed technical data - Glossary of terms ==== Remediation Support ==== Post-report activities: * '''Debrief meeting:''' Present findings to stakeholders * '''Q&A:''' Answer questions about findings * '''Remediation advice:''' Help prioritize fixes * '''Validation:''' Test that fixes actually work * '''Follow-up testing:''' Verify vulnerabilities are resolved {{Note|The best penetration test is one that leads to actual security improvements. Good reporting and remediation support increase the likelihood that findings will be fixed.}} --- === Common AD Attack Chains === Real-world penetration tests often follow recognizable attack patterns. ==== Attack Chain 1: Weak Credential → Admin ==== <syntaxhighlight lang="text"> 1. Discover weak password policy (8 chars, no complexity) 2. Brute-force user credentials 3. Gain access as regular user 4. Enumerate domain structure 5. Find user in admin group 6. Kerberoast admin service accounts 7. Crack offline to recover admin password 8. Access as domain admin </syntaxhighlight> ==== Attack Chain 2: ADCS Exploitation ==== <syntaxhighlight lang="text"> 1. Enumerate AD Certificate Services 2. Find overly permissive certificate template 3. Request certificate with admin identity 4. Use certificate to authenticate as admin 5. Access as domain admin </syntaxhighlight> ==== Attack Chain 3: Unconstrained Delegation ==== <syntaxhighlight lang="text"> 1. Find server with unconstrained delegation 2. Compromise that server 3. Trigger interaction from admin 4. Capture admin's Kerberos ticket 5. Use ticket to access as admin </syntaxhighlight> {{Note|Understanding these attack chains helps penetration testers identify likely compromise paths. See [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors and Exploitation|Part 3]] for detailed exploitation techniques.}} --- === Tools Used in AD Penetration Testing === {| class="wikitable" |- ! Tool !! Purpose !! Example |- | nmap || Port scanning || nmap -p 53,88,389 dc1.corp.local |- | Kerberoast || Extract service tickets || python3 GetUserSPNs.py corp.local/user |- | ADPenTest || Orchestrate multiple tools || adpentest --target corp.local --scope-confirmed |- | crackmapexec || SMB enumeration || crackmapexec smb 192.168.1.0/24 --shares |- | Impacket Suite || AD exploitation || secretsdump.py corp.local/admin:pass@dc1 |- | BloodHound || Attack path visualization || python3 bloodhound.py -u admin -d corp.local |- | Mimikatz || Credential dumping || mimikatz.exe "token::elevate" "lsadump::sam" |- | certutil || Certificate operations || certutil -ca.b |} --- === Ethical & Legal Considerations === Penetration testing must be conducted ethically and legally. {{Important|Unauthorized access to computer systems is illegal. Penetration testing is only legal with explicit written authorization.}} ==== Legal Framework ==== In the United States: * '''CFAA (Computer Fraud and Abuse Act)''' - Criminalizes unauthorized computer access * '''State laws''' - Many states have additional computer crime statutes * '''Contracts''' - Written authorization provides legal protection Internationally: * EU countries have similar data protection and computer crime laws * Authorization requirements vary by jurisdiction * Always consult legal counsel before testing ==== Responsible Disclosure ==== When vulnerabilities are discovered: 1. '''Notify the organization''' - Alert appropriate internal parties 2. '''Provide timeline''' - Give time to fix before public disclosure 3. '''Avoid public disclosure''' - Don't publicize vulnerabilities immediately 4. '''Support remediation''' - Help fix the issues 5. '''Document resolution''' - Verify fixes are effective {{Warning|Public disclosure of vulnerability details before organization has time to fix puts end users at risk. Responsible disclosure protects everyone.}} ==== Professional Ethics ==== Penetration testers should: ✓ Only test systems with explicit authorization ✓ Follow rules of engagement precisely ✓ Handle confidential data appropriately ✓ Maintain professional conduct ✓ Avoid causing unnecessary disruption ✓ Report findings honestly and completely ✓ Protect client confidentiality ✓ Continuously improve skills and knowledge --- === Penetration Test Engagement Model === '''Typical penetration test engagement:''' <syntaxhighlight lang="text"> Week 1-2: Planning & Scoping ├─ Define scope ├─ Obtain authorization └─ Establish communication plan Week 2-4: Reconnaissance & Enumeration ├─ Passive information gathering ├─ Active probing └─ Vulnerability assessment Week 4-6: Exploitation & Post-Exploitation ├─ Attempt to compromise systems ├─ Maintain access └─ Document attack paths Week 6-8: Reporting & Remediation ├─ Write detailed report ├─ Present findings ├─ Support remediation └─ Validate fixes </syntaxhighlight> {{Note|Timelines vary based on scope, environment size, and findings complexity. A small company might take 2-3 weeks, while large enterprises might require months.}} --- === Knowledge Check === Test your understanding of penetration testing fundamentals: # What is the primary goal of a penetration test? # Name three key components of a penetration test authorization. # Explain the difference between reconnaissance and enumeration. # What is the purpose of the exploitation phase? # True or False: Penetration testing can proceed without written authorization. # Name four common AD vulnerability types. # What is an attack chain and why is it important? # Describe a golden ticket and why it's dangerous. # What should be included in a penetration test report? # Why is responsible disclosure important? {{Note|Answers: 1) Identify vulnerabilities before attackers do, assess risk, validate controls 2) Written permission, scope definition, rules of engagement 3) Recon is passive (no direct contact), enumeration is active (probing systems) 4) To compromise systems using identified vulnerabilities 5) False - authorization is legally required 6) Weak passwords, privilege escalation, group policy, outdated systems, ADCS issues 7) Series of exploitation steps leading to objective; important for understanding real compromise 8) Persistent Kerberos ticket valid for ~10 years; allows impersonating any user even after password change 9) Executive summary, methodology, findings, risk assessment, recommendations, appendices 10) Protects end users by giving organizations time to fix before public disclosure}} --- === Hands-On Exercise === {{Note| '''Exercise: Plan a Penetration Test''' Using a lab environment or hypothetical scenario: 1. '''Define Scope:''' - Which domains to test? - Which OUs/systems in-scope? - Which are out-of-scope? - Testing duration? 2. '''Write Authorization:''' - Create sample authorization letter - Define rules of engagement - Set escalation procedures 3. '''Plan Reconnaissance:''' - List passive information gathering methods - Identify publicly available information - Plan OSINT approach 4. '''Plan Enumeration:''' - What Domain Controllers need to be found? - Which users/groups are interesting? - What services need to be identified? 5. '''Identify Potential Vulnerabilities:''' - What likely vulnerabilities might exist? - What attack chains might work? - What would be the business impact? This exercise helps you think like a penetration tester and approach AD testing systematically. }} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites|Chapter 3: Lab Setup and Prerequisites]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Part 3 - Attack Vectors and Exploitation|Part 3: Attack Vectors & Exploitation]] * [https://www.nist.gov/publications/guide-general-server-security NIST SP 800-123: Guide to General Server Security] * [https://penteststandards.com/ PTES - Penetration Testing Execution Standard] * [https://owasp.org/www-project-web-security-testing-guide/ OWASP Testing Guide] --- [[Category:Active Directory Security and Penetration Testing]] [[Category:Penetration Testing Methodology]] [[Category:Foundational Knowledge]] azw0iwkbw1iup8pqcnf0od5y95uk64a Active Directory Security and Penetration Testing/Chapter 3 - Lab Setup and Prerequisites 0 485823 4672027 2026-09-24T03:06:17Z נתנאל שטרן 3337472 Created page with " == Chapter 3: Lab Setup and Prerequisites == === Learning Objectives === By the end of this chapter, you will be able to: * Understand the requirements for setting up an AD penetration testing lab * Create a virtual AD domain from scratch * Set up Domain Controllers, workstations, and servers * Configure realistic AD environments * Install and configure necessary tools * Establish proper network isolation for testing * Understand common lab architectures and their use..." 4672027 wikitext text/x-wiki == Chapter 3: Lab Setup and Prerequisites == === Learning Objectives === By the end of this chapter, you will be able to: * Understand the requirements for setting up an AD penetration testing lab * Create a virtual AD domain from scratch * Set up Domain Controllers, workstations, and servers * Configure realistic AD environments * Install and configure necessary tools * Establish proper network isolation for testing * Understand common lab architectures and their use cases * Troubleshoot common lab setup issues === Prerequisites === * Completion of [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1: Active Directory Basics]] * Completion of [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2: Penetration Testing Fundamentals]] * Basic familiarity with virtualization concepts * Administrator access to a computer or server * Sufficient hardware resources (16GB+ RAM recommended) --- === Why a Lab Environment is Essential === A dedicated lab environment is crucial for AD penetration testing practice. ==== Benefits of a Lab ==== ✓ '''Safe to break things''' - No risk to production systems ✓ '''Test new techniques''' - Experiment without consequences ✓ '''Reproduce vulnerabilities''' - Practice exploitation methods ✓ '''Develop skills''' - Build proficiency before client engagements ✓ '''Realistic scenarios''' - Mirror actual corporate environments ✓ '''Tool familiarization''' - Learn tools in controlled setting ✓ '''Compliance testing''' - Validate security configurations ✓ '''Training platform''' - Teach others security concepts{{Important|Never practice penetration testing techniques against systems you don't own. A personal lab is the appropriate place to learn and practice.}}--- === Hardware Requirements === ==== Minimum Configuration ==== For a basic single-domain lab: {| class="wikitable" !Component !Minimum !Recommended |- |CPU |4 cores |8+ cores |- |RAM |16GB |32GB+ |- |Disk Space |200GB SSD |500GB+ SSD |- |Network |Single NIC |Dedicated lab NIC |} === = Recommended Hardware === For realistic multi-domain testing: * '''CPU:''' Intel/AMD with 8+ cores (enables nested virtualization) * '''RAM:''' 32GB-64GB (each VM needs 2-4GB minimum) * '''Storage:''' 500GB+ NVMe SSD (VMs perform better on fast storage) * '''Network:''' Dedicated NIC for lab network isolation * '''Backup:''' External drive for lab snapshots/recovery {{Note|Older hardware works but setup will be slower. The better your hardware, the more realistic your lab can be (more simultaneous VMs).}} --- === Virtualization Platforms === Several hypervisors can host AD lab environments. ==== Hyperv (Windows) ==== Built into Windows Pro/Enterprise. '''Pros:''' * Free with Windows Pro * Native integration * Good performance * Linux support via kernel '''Cons:''' * Windows-only * Steeper learning curve * Licensing for nested virtualization '''Lab Setup:'''<syntaxhighlight lang="powershell"> # Enable Hyper-V Enable-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V ` -Online -All </syntaxhighlight> ==== VMware ESXi / vSphere ==== Enterprise-grade hypervisor. '''Pros:''' * Very stable * Excellent performance * Industry standard * Great snapshotting '''Cons:''' * Requires licensing (free ESXi available) * Steeper learning curve * More resource intensive ==== KVM (Linux) ==== Linux-based hypervisor. '''Pros:''' * Free and open source * Good performance * Linux-native '''Cons:''' * Requires Linux experience * Windows VM performance not optimal * Steep learning curve ==== VirtualBox ==== Free, easy-to-use hypervisor. '''Pros:''' * Completely free * Easy to use * Works on any OS '''Cons:''' * Slower performance than alternatives * Limited snapshots/cloning * Not ideal for large labs {{Note|For AD penetration testing, '''VMware or Hyper-V''' are recommended due to better performance and native Windows support. VirtualBox works but is slower.}} --- === Building a Basic Single-Domain Lab === Step-by-step process to create a minimal AD environment. ==== Step 1: Create the Domain Controller VM ==== ===== Prerequisites ===== * Windows Server 2019 or 2022 ISO * At least 2 vCPUs and 4GB RAM allocated * 50GB disk space ===== Installation ===== <syntaxhighlight lang="text"> 1. Create new VM (Generation 2 for Hyper-V) 2. Allocate 2+ vCPUs, 4GB RAM, 50GB disk 3. Attach Windows Server ISO 4. Install Windows Server (Desktop Experience recommended) 5. Configure static IP address: IP: 192.168.1.10 Netmask: 255.255.255.0 Gateway: 192.168.1.1 DNS: 192.168.1.10 (itself) 6. Set hostname to "DC1" 7. Install AD DS role </syntaxhighlight> ===== AD DS Installation ===== <syntaxhighlight lang="powershell"> # Install AD DS role Add-WindowsFeature AD-Domain-Services, ` AD-Certificate, ` DNS, ` GPMC, ` RSAT-ADDS # Create new forest and domain Install-ADDSForest ` -DomainName "corp.local" ` -SafeModeAdministratorPassword (ConvertTo-SecureString "P@ssw0rd!Secure" -AsPlainText -Force) ` -CreateDnsDelegation:$false ` -DatabasePath "C:\Windows\NTDS" ` -LogPath "C:\Windows\NTDS" ` -SysvolPath "C:\Windows\SYSVOL" ` -Force </syntaxhighlight>{{Note|Choose a strong DSRM password and store it securely. You'll need it for disaster recovery.}} ==== Step 2: Create Workstation VMs ==== ===== Windows 10/11 Workstations ===== <syntaxhighlight lang="text"> 1. Create 2-3 workstation VMs 2. Allocate 2 vCPUs, 4GB RAM each 3. Install Windows 10 or 11 4. Configure static IP addresses: WS1: 192.168.1.20 WS2: 192.168.1.21 WS3: 192.168.1.22 5. Set hostnames: WS1, WS2, WS3 6. Join to corp.local domain 7. Create local users for testing </syntaxhighlight> ===== Join to Domain ===== <syntaxhighlight lang="powershell"> # Set DNS to point to DC $ipconfig = @{ InterfaceAlias = "Ethernet" AddressFamily = "IPv4" Validate = $false } Set-DnsClientServerAddress @ipconfig -ServerAddresses "192.168.1.10" # Join domain Add-Computer -DomainName corp.local ` -NewName WS1 ` -Restart </syntaxhighlight> ==== Step 3: Create Test Users and Groups ==== ===== Create User Accounts ===== <syntaxhighlight lang="powershell"> # Create test users $users = @( @{Name="john.smith"; Dept="Engineering"; Group="Engineers"}, @{Name="jane.doe"; Dept="Finance"; Group="Finance"}, @{Name="admin.service"; Dept="IT"; Group="ServiceAccounts"}, @{Name="db.service"; Dept="IT"; Group="ServiceAccounts"}, ) foreach ($user in $users) { New-ADUser -Name $user.Name ` -SamAccountName $user.Name ` -UserPrincipalName "$($user.Name)@corp.local" ` -Path "CN=Users,DC=corp,DC=local" ` -AccountPassword (ConvertTo-SecureString "P@ssw0rd123!" -AsPlainText -Force) ` -Enabled $true ` -Department $user.Dept } </syntaxhighlight> ===== Create Security Groups ===== <syntaxhighlight lang="powershell"> # Create security groups $groups = @("Engineers", "Finance", "ServiceAccounts", "Admins") foreach ($group in $groups) { New-ADGroup -Name $group ` -GroupScope Global ` -GroupCategory Security ` -Path "CN=Users,DC=corp,DC=local" } # Add users to groups Add-ADGroupMember -Identity "Engineers" -Members "john.smith" Add-ADGroupMember -Identity "Finance" -Members "jane.doe" Add-ADGroupMember -Identity "ServiceAccounts" -Members "admin.service", "db.service" Add-ADGroupMember -Identity "Admins" -Members "administrator" </syntaxhighlight> ===== Create Organizational Units ===== <syntaxhighlight lang="powershell"> # Create OU structure New-ADOrganizationalUnit -Name "Engineering" ` -Path "DC=corp,DC=local" New-ADOrganizationalUnit -Name "Finance" ` -Path "DC=corp,DC=local" New-ADOrganizationalUnit -Name "IT" ` -Path "DC=corp,DC=local" # Move users to OUs Move-ADObject -Identity (Get-ADUser john.smith).DistinguishedName ` -TargetPath "OU=Engineering,DC=corp,DC=local" </syntaxhighlight> ==== Step 4: Configure Group Policy ==== ===== Create Test GPO ===== <syntaxhighlight lang="powershell"> # Create a test Group Policy Object New-GPO -Name "Test-Password-Policy" ` -Comment "Test password policy GPO" # Link to domain New-GPLink -Name "Test-Password-Policy" ` -Target "DC=corp,DC=local" # Configure password policy Set-GPRegistryValue -Name "Test-Password-Policy" ` -Key "HKLM\System\CurrentControlSet\Services\Netlogon\Parameters" ` -ValueName "RequireSignOrSeal" ` -Value 1 ` -Type DWORD </syntaxhighlight>--- === Advanced Lab Scenarios === ==== Multi-Domain Forest ==== Create multiple domains in a single forest for realistic testing.<syntaxhighlight lang="text"> corp.local (Forest Root) ├─ DC1.corp.local (Domain Controller) └─ sales.corp.local (Child Domain) ├─ DC1.sales.corp.local (Domain Controller) └─ Users, Computers, Groups </syntaxhighlight>{{Note|Multi-domain labs are more complex but provide realistic environments for testing cross-domain attacks and trust relationships.}} ==== Multiple Domain Controllers ==== Create multiple DCs for redundancy and load balancing testing.<syntaxhighlight lang="powershell"> # Promote second DC Install-ADDSDomainController ` -DomainName corp.local ` -Credential (Get-Credential) ` -SafeModeAdministratorPassword (ConvertTo-SecureString "P@ssw0rd!Secure" -AsPlainText -Force) ` -Force </syntaxhighlight> ==== Certificate Services ==== Set up AD Certificate Services (ADCS) for certificate-based testing.<syntaxhighlight lang="powershell"> # Install ADCS Add-WindowsFeature ADCS-Cert-Authority, ADCS-Enroll-Web-Svc # Configure ADCS Install-AdcsCertificationAuthority ` -CAType EnterpriseRootCa ` -Confirm:$false </syntaxhighlight>{{Important|ADCS setup is complex. Misconfigured ADCS is a common real-world vulnerability, making it valuable to practice in a lab.}}--- === Pre-Built Lab Environments === Several ready-made lab environments are available. ==== GOAD (Game of Active Directory) ==== Open-source Active Directory lab project. '''Features:''' * Multi-domain forest (5 domains) * Realistic infrastructure * Intentional vulnerabilities for learning * Terraform/Ansible automation * ~1 hour automated setup '''URL:''' https://github.com/Orange-Cyberdefense/GOAD '''Setup:'''<syntaxhighlight lang="bash"> git clone https://github.com/Orange-Cyberdefense/GOAD.git cd GOAD # Follow README for installation </syntaxhighlight>{{Note|GOAD is excellent for learning attack chains. It contains realistic vulnerabilities and complex scenarios. Highly recommended for intermediate/advanced testers.}} ==== DetectionLab ==== Another popular multi-domain lab environment. '''Features:''' * Three-tier architecture (DC, servers, workstations) * Logging and monitoring setup * Sysmon/WinLogBeat integration * Splunk for log analysis '''URL:''' https://github.com/clong/DetectionLab ==== VulnAD ==== Intentionally vulnerable AD environment for learning. '''Features:''' * Realistic misconfigurations * Multiple attack paths * Educational focus * Smaller resource footprint ==== Custom Labs ==== Building your own custom lab allows: * Specific scenario testing * Custom vulnerability creation * Tailored attack simulation * Precise resource control {{Note|Pre-built labs are great starting points, but eventually you'll want to build custom labs for specific testing scenarios.}} --- === Network Configuration === ==== Lab Network Isolation ==== Isolate lab network from production systems. '''Best Practice:'''<syntaxhighlight lang="text"> Host Computer (Your Machine) ├─ External Network (Internet) │ └─ Production Systems └─ Lab Virtual Network ├─ DC1 (192.168.1.10) ├─ WS1 (192.168.1.20) ├─ WS2 (192.168.1.21) └─ Server1 (192.168.1.30) [Lab network completely isolated from prod] </syntaxhighlight> ===== Hyper-V Virtual Switch ===== <syntaxhighlight lang="powershell"> # Create internal virtual switch New-VMSwitch -Name "Lab-Network" ` -SwitchType Internal # Configure vNIC IP New-NetIPAddress -IPAddress 192.168.1.1 ` -PrefixLength 24 ` -InterfaceAlias "vEthernet (Lab-Network)" </syntaxhighlight> ===== VMware Virtual Network ===== Create isolated virtual network in VMware settings.{{Important|Network isolation prevents lab traffic from affecting production. Always isolate your lab environment from your main network.}}--- === Tools Installation === ==== On the Lab Domain Controller ==== <syntaxhighlight lang="powershell"> # Install Remote Server Administration Tools (RSAT) Add-WindowsFeature RSAT-ADDS, RSAT-ADLDS, ` RSAT-DFS-Mgmt-Con, RSAT-FSRM-Mgmt # Install other useful tools # Active Directory Users and Computers: dsa.msc # Group Policy Management: gpmc.msc # Active Directory Domains and Trusts: domain.msc </syntaxhighlight> ==== On Testing Workstation ==== <syntaxhighlight lang="bash"> # Install Python tools pip install impacket pip install pycryptodome pip install ldap3 # Install Kerberoast git clone https://github.com/nidem/kerberoast.git # Install BloodHound (Java required) # Download from: https://github.com/BloodHoundAD/BloodHound/releases # Install ADPenTest pip install adpentest </syntaxhighlight>{{Note|Most tools run best on Linux/Kali, but Windows testing workstations are useful for certain techniques like token impersonation.}} --- === Creating Realistic Vulnerabilities === ==== Intentional Misconfigurations ==== Create vulnerabilities to practice exploitation. ===== Weak Password Policy ===== <syntaxhighlight lang="powershell"> # Disable strong password requirement secedit /export /cfg C:\secpol.cfg # Edit secpol.cfg: PasswordComplexity = 0 secedit /configure /db secedit.sdb /cfg C:\secpol.cfg # Set weak passwords Set-ADAccountPassword -Identity "john.smith" ` -Reset ` -NewPassword (ConvertTo-SecureString "Password123" -AsPlainText -Force) </syntaxhighlight> ===== Disable Kerberos Preauthentication ===== <syntaxhighlight lang="powershell"> # Find user account $user = Get-ADUser jane.doe # Disable preauthentication Set-ADAccountControl -Identity $user -doesNotRequirePreAuth $true </syntaxhighlight> ===== Kerberoasting Setup ===== <syntaxhighlight lang="powershell"> # Create service account with SPN New-ADUser -Name "admin.service" ` -SamAccountName "admin.service" ` -ServicePrincipalNames "HTTP/admin.service", ` "HTTP/admin.service.corp.local" # Set weak password to practice cracking Set-ADAccountPassword -Identity "admin.service" ` -Reset ` -NewPassword (ConvertTo-SecureString "ServicePass123" -AsPlainText -Force) </syntaxhighlight> ===== Over-Privileged Groups ===== <syntaxhighlight lang="powershell"> # Add regular user to admin group (intentional vuln) Add-ADGroupMember -Identity "Domain Admins" ` -Members "john.smith" # Create custom admin group New-ADGroup -Name "IT-Admins" -GroupScope Global Add-ADGroupMember -Identity "IT-Admins" -Members "jane.doe" # Grant permissions to file share # (This will be discovered during enumeration) </syntaxhighlight>{{Important|Only create vulnerabilities you intend to practice exploiting. Don't create unnecessary security holes in your lab.}}--- === Lab Snapshots & Backups === Save lab state for recovery and experimentation. ==== Taking Snapshots (Hyper-V) ==== <syntaxhighlight lang="powershell"> # Create checkpoint Checkpoint-VM -Name "DC1" -SnapshotName "Clean-State" # List checkpoints Get-VMSnapshot -VMName "DC1" # Restore checkpoint Restore-VMSnapshot -Name "Clean-State" -VM (Get-VM "DC1") -Confirm:$false </syntaxhighlight>{{Note|Snapshots allow you to quickly return to a known good state after testing, without reinstalling everything.}} ==== Automated Backup ==== <syntaxhighlight lang="powershell"> # Backup VM configuration Export-VM -Name "DC1" -Path "E:\Lab-Backups" # Schedule regular backups $backupTask = @{ TaskName = "Lab-Backup" Action = New-ScheduledTaskAction -Execute "PowerShell" ` -Argument "-Command Export-VM -Name DC1 -Path E:\Lab-Backups" Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 10:00AM } Register-ScheduledTask @backupTask </syntaxhighlight>--- === Troubleshooting Common Lab Issues === {| class="wikitable" !Issue !Cause !Solution |- |VMs won't network |Switch misconfiguration |Verify virtual switch settings, check IP configuration |- |Domain join fails |DNS resolution issue |Ensure DNS points to DC, check host resolution |- |AD services won't start |Missing prerequisites |Reinstall AD DS, check event logs |- |Slow performance |Insufficient RAM |Allocate more RAM to VMs, reduce VM count |- |Can't access DC from workstation |Firewall blocking |Disable Windows Firewall in lab, open ports |- |Snapshots won't restore |Snapshot corruption |Delete snapshot, create new one |- |Disk space issues |VMs too large |Clean disk space, reduce VM snapshots |} {{Note|Check Windows Event Viewer on DC for detailed error messages when AD services don't start.}} --- === Lab Maintenance === Regular maintenance keeps your lab running smoothly. ==== Weekly Maintenance ==== * Verify all VMs can start * Test domain functionality * Clean up temporary files * Review disk space ==== Monthly Maintenance ==== * Update Windows patches * Update security tools * Review and clean snapshots * Backup critical configurations ==== Quarterly Maintenance ==== * Full lab rebuild test * Verify automation/scripts * Update tool versions * Document any changes --- === Lab Documentation === Document your lab setup for future reference. ===== Lab Diagram ===== <syntaxhighlight lang="text"> Corp.local Forest ├─ DC1 (192.168.1.10) │ ├─ OS: Windows Server 2022 │ ├─ vCPU: 2, RAM: 4GB │ └─ Disk: 50GB ├─ WS1 (192.168.1.20) │ ├─ OS: Windows 10 21H2 │ ├─ vCPU: 2, RAM: 4GB │ ├─ Disk: 40GB │ └─ User: john.smith (group: Engineers) ├─ WS2 (192.168.1.21) │ └─ User: jane.doe (group: Finance) └─ Server1 (192.168.1.30) └─ Services: File Share, Print Server </syntaxhighlight> ===== Configuration Spreadsheet ===== Create spreadsheet with: * VM names and IPs * OS versions and patch levels * User accounts and group memberships * Services and roles installed * Vulnerabilities intentionally created * Snapshot names and dates {{Note|Good documentation allows you to quickly recreate your lab if needed and share configurations with others.}} --- === Knowledge Check === Test your lab setup knowledge: # What are the minimum hardware requirements for a basic AD lab? # Name three virtualization platforms suitable for AD labs. # List the steps to create a basic single-domain lab (high-level). # What is GOAD and what advantages does it offer? # How should lab networks be isolated from production? # Name three intentional vulnerabilities you could create in your lab. # What is a VM snapshot and how is it useful? # What tools should be installed on a testing workstation? # Why is lab documentation important? # True or False: It's okay to test on production systems if you're careful. {{Note|Answers: 1) 16GB RAM, 4+ cores, 200GB disk 2) Hyper-V, VMware, KVM, VirtualBox 3) Create DC VM → install AD → create workstations → join domain → create users/groups → configure GPO 4) Open-source multi-domain lab with intentional vulnerabilities; automated setup via Terraform 5) Isolated virtual network, separate from production network 6) Weak passwords, disabled Kerberos preauthentication, Kerberoasting setup, over-privileged accounts 7) Point-in-time copy of VM state; allows quick recovery and experimentation 8) Impacket, Kerberoast, BloodHound, ADPenTest, crackmapexec 9) Quickly recreate lab, share with others, troubleshoot issues 10) False - NEVER test on production without explicit authorization and careful planning}} --- === Hands-On Exercise === {{Note|'''Exercise: Build Your Own AD Lab''' 1. '''Choose Platform:''' Select Hyper-V, VMware, or VirtualBox 2. '''Plan Lab:''' - Document VM names, IPs, roles - Plan user/group structure - Sketch network diagram 3. '''Create DC:''' - Install Windows Server - Promote to DC - Create corp.local domain 4. '''Create Workstations:''' - Install Windows 10/11 - Join to corp.local - Verify domain connectivity 5. '''Create Users & Groups:''' - Create 5-10 test users - Organize into groups - Create OUs 6. '''Configure GPO:''' - Create test GPO - Apply to OU - Verify application 7. '''Create Vulnerabilities:''' - Disable password complexity - Over-privilege one user - Create Kerberoastable account 8. '''Take Snapshot:''' - Save clean-state snapshot - Document configuration 9. '''Test Access:''' - Log in from workstation - Verify domain functionality - Confirm vulnerabilities exist Timeline: 4-8 hours for initial setup Success Criteria: - Domain fully functional - Multiple user accounts working - Group Policy applying - Snapshots saving/restoring - Lab documentation complete}} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Chapter 4: Introduction to ADPenTest]] * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[github:Orange-Cyberdefense/GOAD|GOAD - Game of Active Directory]] * [[github:clong/DetectionLab|DetectionLab - Multi-tier Lab]] * [https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/get-started-with-active-directory-domain-services Microsoft Learn: AD DS Setup] * [https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v Microsoft Learn: Hyper-V Setup] --- 9vfsytxxki2ce9oepupszyluetlqw2y Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest 0 485825 4672031 2026-09-24T03:09:58Z נתנאל שטרן 3337472 Created page with "== Chapter 4: Introduction to ADPenTest == === Learning Objectives === By the end of this chapter, you will understand: * What ADPenTest is and its design philosophy * Key capabilities and features of the framework * How ADPenTest differs from manual penetration testing * The safety mechanisms built into ADPenTest * When and how to use ADPenTest in a real engagement === Prerequisites === * Basic understanding of Active Directory architecture (see Active Directory S..." 4672031 wikitext text/x-wiki == Chapter 4: Introduction to ADPenTest == === Learning Objectives === By the end of this chapter, you will understand: * What ADPenTest is and its design philosophy * Key capabilities and features of the framework * How ADPenTest differs from manual penetration testing * The safety mechanisms built into ADPenTest * When and how to use ADPenTest in a real engagement === Prerequisites === * Basic understanding of Active Directory architecture (see [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1]]) * Familiarity with penetration testing concepts (see [[Active Directory Security and Penetration Testing/Chapter 2 - Penetration Testing Fundamentals|Chapter 2]]) * Command-line proficiency in Linux/Windows --- === What is ADPenTest? === '''ADPenTest''' is a Python-based framework for automated penetration testing of Active Directory environments. Designed specifically for authorized security assessments, it orchestrates multiple attack tools and techniques into a cohesive workflow that can be executed efficiently across large or complex AD domains. {{Note|ADPenTest is a specialized tool designed for ''authorized'' penetration testing only. It requires explicit authorization flags and operates in "dry-run" (preview) mode by default.}} ==== Design Philosophy ==== ADPenTest was built on three core principles: # '''Automation:''' Reduce manual, repetitive reconnaissance and exploitation tasks # '''Orchestration:''' Coordinate 35+ specialized tools in parallel for maximum efficiency # '''Safety:''' Require explicit authorization and default to non-destructive operations This approach lets security teams: * Conduct comprehensive assessments faster * Reduce human error in tool execution * Maintain consistent, reproducible testing methodology * Generate detailed, searchable audit trails --- === Core Capabilities === ==== 1. Automated Domain Controller Discovery ==== ADPenTest can identify all Domain Controllers in a network through multiple mechanisms: * '''DNS SRV Record Queries:''' _ldap._tcp.dc._msdcs.DOMAIN queries * '''LDAP RootDSE Probes:''' Direct LDAP queries to identify DC infrastructure * '''Port Fingerprinting:''' Scanning for Kerberos (88), LDAP (389), GC (3268) ports * '''Subnet Scanning:''' Comprehensive subnet sweeps for DC identification * '''WAF Bypass:''' When firewalls block direct access, attempts raw LDAP/Kerberos protocols Each discovery method is assigned a confidence score, allowing testers to prioritize high-confidence targets. {{Warning|Large-scale subnet scanning can generate significant network traffic. Always ensure proper network capacity and authorization before running broad scans.}} ==== 2. Tool Orchestration ==== ADPenTest integrates and orchestrates 35+ specialized security tools: '''Reconnaissance Tools:''' * nmap — Network mapping and port scanning * masscan — High-speed port scanning * DNSdumpster — DNS enumeration '''SMB & LDAP Tools:''' * crackmapexec — SMB/LDAP enumeration and exploitation * smbclient — SMB share browsing * ldapdomaindump — LDAP domain dumping '''Kerberos Tools:''' * Kerberoast — AS ticket extraction and cracking * Impacket Suite — Kerberos exploitation toolkit * GetUserSPNs — Service Principal Name enumeration '''Certificate Tools:''' * certipy — ADCS exploitation framework * ESC1/ESC3/ESC9 — Certificate template abuse techniques '''Exploitation & Persistence:''' * Mimikatz — Credential dumping * secretsdump (impacket) — Hash extraction * schtasks — Task scheduling exploitation '''Performance Benefits:''' ADPenTest uses multi-threading to execute tools in parallel: * {{colorbox|lightblue|16 parallel workers}} for tool execution * {{colorbox|lightblue|32 parallel workers}} for port/DNS tasks * {{colorbox|lightblue|10-15x speedup}} compared to sequential execution <syntaxhighlight lang="bash"> # Example: ADPenTest orchestrates these tools automatically adpentest --target corp.local --scope-confirmed # Behind the scenes, it runs: # - nmap/masscan for port discovery # - crackmapexec for SMB enumeration # - Kerberoast for service ticket extraction # - certipy for ADCS enumeration # - And 30+ other tools in parallel </syntaxhighlight> ==== 3. CVE Scanning & Detection ==== ADPenTest includes 7 built-in vulnerability scanners targeting critical AD CVEs: {| class="wikitable" |- ! CVE / Vulnerability !! CVSS !! Detection Method |- | Spring LDAP Hardcoded Credentials || 9.4 || Anonymous LDAP query |- | Certificate Enrollment Bypass (TOCTOU) || 8.8 || Template enumeration |- | NTLM Authentication Relay || 8.1 || Network signature detection |- | Kerberos AS-REP Roasting || 7.5 || Kerberos RC4 detection |- | SMB Null Session || 7.5 || SMB probing |- | LDAP Anonymous Bind || 7.5 || LDAP anonymous query |- | Unpatched Kerberos Vulnerability || 7.5 || Version fingerprinting |} All scanners use '''safe, read-only methods''' - port probes and anonymous queries only. No credentials are modified or systems compromised. ==== 4. Web Application Firewall (WAF) Bypass ==== When targets are protected by firewalls blocking traditional AD protocols, ADPenTest attempts multiple bypass techniques: * '''Header Spoofing:''' Manipulating HTTP headers to evade WAF rules * '''TCP Fragmentation:''' Breaking packets into fragments to bypass signature detection * '''Raw Protocol Tunneling:''' LDAP and Kerberos over raw TCP/UDP sockets * '''HTTPS Interception Bypass:''' Certificate pinning and SSL inspection evasion * '''Timing-Based Evasion:''' Slowing scan rates to evade rate-limiting {{Important|WAF bypass techniques should only be used on systems you own or have explicit written authorization to test. Some bypass techniques may be disruptive.}} ==== 5. Persistent Scan History & Reporting ==== All ADPenTest results are automatically stored in SQLite: * '''Location:''' ~/.adpentest/scan_history.db * '''Searchable Schema:''' Query by date, target, tool, CVE, status * '''Trend Analysis:''' Compare findings across multiple scans * '''Audit Trail:''' Complete execution log for compliance reporting <syntaxhighlight lang="bash"> # View scan history adpentest --history # Generate CVE report adpentest --cve-report # Query specific findings adpentest --query "kerberoasting" </syntaxhighlight> --- === Key Differences from Manual Testing === {| class="wikitable" |- ! Aspect !! Manual Testing !! ADPenTest Automated |- | Time to Complete || Days/Weeks || Hours |- | Tool Coordination || Manual || Automatic |- | Consistency || Variable (human-dependent) || Reproducible |- | Parallel Execution || Limited || Up to 48 workers |- | CVE Coverage || Ad-hoc || Standardized 7-scanner suite |- | Reporting || Manual compilation || Automatic SQLite database |- | Scalability || Difficult for large domains || Designed for scale |} {{Note|ADPenTest is ''not'' a replacement for manual testing—it's a force multiplier. Manual testing remains crucial for complex attack chains, advanced persistence, and business logic vulnerabilities.}} --- === Safety Mechanisms === ADPenTest includes several safety features to prevent accidental misuse: ==== 1. Dry-Run Mode (Default) ==== All scans run in preview mode by default: <syntaxhighlight lang="bash"> # This only PREVIEWS what would be scanned—no actual probes adpentest --target corp.local # To actually execute the scan, use --scope-confirmed adpentest --target corp.local --scope-confirmed </syntaxhighlight> ==== 2. Scope Definition ==== Testers must explicitly define the scope: <syntaxhighlight lang="bash"> # Scope to specific OUs adpentest --target corp.local --ou "OU=Engineering,DC=corp,DC=local" --scope-confirmed # Scope to specific servers adpentest --target corp.local --hosts "dc1.corp.local,dc2.corp.local" --scope-confirmed </syntaxhighlight> ==== 3. Rate Limiting ==== To avoid disrupting production environments: <syntaxhighlight lang="bash"> # Limit concurrent workers adpentest --target corp.local --max-workers 8 --scope-confirmed # Throttle scan speed adpentest --target corp.local --rate-limit 50 --scope-confirmed # 50 requests/sec </syntaxhighlight> ==== 4. Non-Destructive Operations ==== By design, ADPenTest never: * Modifies Active Directory objects * Creates unauthorized accounts * Changes group memberships * Disables security features * Deletes data All operations are read-only reconnaissance and exploitation simulation. {{Important|Some exploitation techniques (like Kerberoasting) do extract tickets from memory but do not modify AD. These are still considered safe operations in an authorized test.}} --- === When to Use ADPenTest === ADPenTest is ideal for: ✓ '''Internal penetration tests''' of company AD domains ✓ '''Red team exercises''' for incident response training ✓ '''Periodic security assessments''' of AD environments ✓ '''Compliance testing''' (PCI DSS, HIPAA, SOC 2) ✓ '''Large-scale domain testing''' (many OUs, hundreds of users) ✓ '''Automated vulnerability scanning''' of AD infrastructure ✓ '''Proof-of-concept testing''' for security findings ADPenTest is '''not ideal''' for: ✗ Unauthorized testing (illegal) ✗ Client testing without explicit written authorization ✗ Testing production systems without change management approval ✗ Persistence mechanisms (use manual techniques instead) ✗ Business logic exploitation requiring custom tooling --- === Real-World Example === {{Example| '''Scenario:''' A Fortune 500 company needs to assess AD security across 5 domains with 50,000+ users. '''Manual Approach:''' * Weeks of reconnaissance and enumeration * Manual tool execution for each domain * Days of result compilation and reporting * Inconsistent coverage across domains '''ADPenTest Approach:''' * Automated multi-domain DC discovery * 35+ tools orchestrated in parallel * Comprehensive CVE scanning * Automated reporting with searchable database * Complete assessment in ''3-5 days'' instead of weeks }} --- === Knowledge Check === Test your understanding: # What are the three core principles of ADPenTest design? # Name three DC discovery mechanisms ADPenTest uses # How many tools does ADPenTest orchestrate? What performance benefit does this provide? # What does "dry-run mode" mean and when is it used? # True or False: ADPenTest can modify Active Directory objects {{Note|Answers: 1) Automation, Orchestration, Safety 2) DNS SRV records, LDAP probes, port fingerprinting 3) 35+, 10-15x speedup 4) Preview-only mode that doesn't execute actual scans (default behavior) 5) False—all operations are read-only}} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [https://github.com/netanelcyber/AdPentestAI-Python ADPenTest GitHub Repository] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [[en.wikipedia:Security_assessment|Wikipedia: Security Assessment]] --- [[Category:Active Directory Security and Penetration Testing]] [[Category:Security Tools]] 8jk196w47xq9bp4xrukx9uj40s5q7yh Active Directory Security and Penetration Testing/Part 2 - ADPenTest Framework 0 485826 4672032 2026-09-24T03:10:28Z נתנאל שטרן 3337472 Created blank page 4672032 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration 0 485827 4672034 2026-09-24T03:12:55Z נתנאל שטרן 3337472 Created page with "== Chapter 5: Installation and Configuration == === Learning Objectives === By the end of this chapter, you will be able to: * Install ADPenTest from PyPI * Understand system requirements and dependencies * Configure ADPenTest for your environment * Set up the scan history database * Configure authentication credentials * Understand configuration file structure * Troubleshoot common installation issues * Verify installation correctness === Prerequisites === * Complet..." 4672034 wikitext text/x-wiki == Chapter 5: Installation and Configuration == === Learning Objectives === By the end of this chapter, you will be able to: * Install ADPenTest from PyPI * Understand system requirements and dependencies * Configure ADPenTest for your environment * Set up the scan history database * Configure authentication credentials * Understand configuration file structure * Troubleshoot common installation issues * Verify installation correctness === Prerequisites === * Completion of [[Active Directory Security and Penetration Testing/Chapter 4 - Introduction to ADPenTest|Chapter 4: Introduction to ADPenTest]] * Linux or Windows system with Python 3.8+ * Basic familiarity with Python and pip * Administrator/sudo access to install packages * Network access to target AD domain --- === System Requirements === ==== Minimum Requirements ==== {| class="wikitable" |- ! Component !! Requirement |- | Python || 3.8 or higher |- | Operating System || Linux (preferred) or Windows |- | RAM || 4GB minimum (8GB+ recommended) |- | Disk Space || 2GB for ADPenTest and dependencies |- | Network || Access to target domain |- | Privileges || User with sudo/admin access |} ==== Recommended Setup ==== * '''OS:''' Linux (Ubuntu 20.04 LTS or Kali Linux) * '''Python:''' 3.10 or higher * '''RAM:''' 8GB+ * '''Disk:''' 500GB+ for scan databases * '''Network:''' Dedicated interface for lab/testing network {{Note|Windows runs ADPenTest fine, but Linux provides better tool integration and performance for penetration testing.}} --- === Installing Python === ==== Linux (Ubuntu/Debian) ==== Check Python version: <syntaxhighlight lang="bash"> python3 --version </syntaxhighlight> Install Python 3.10+: <syntaxhighlight lang="bash"> sudo apt-get update sudo apt-get install python3.10 python3-pip python3-venv </syntaxhighlight> Verify installation: <syntaxhighlight lang="bash"> python3.10 --version pip3 --version </syntaxhighlight> ==== Windows ==== '''Option 1: Microsoft Store (Easiest)''' <syntaxhighlight lang="powershell"> # Install from Microsoft Store # Search for "Python 3.10" or higher # Click Install </syntaxhighlight> '''Option 2: Python.org''' 1. Go to https://www.python.org/downloads/ 2. Download Python 3.10+ installer 3. Run installer 4. {{Important|Check "Add Python to PATH"}} 5. Complete installation Verify: <syntaxhighlight lang="bash"> python --version pip --version </syntaxhighlight> '''Option 3: Chocolatey (Windows)''' <syntaxhighlight lang="powershell"> choco install python </syntaxhighlight> --- === Installing ADPenTest === ==== Simple Installation ==== The easiest way to install ADPenTest: <syntaxhighlight lang="bash"> pip install adpentest </syntaxhighlight> Verify installation: <syntaxhighlight lang="bash"> adpentest --version adpentest --help </syntaxhighlight> Expected output: <syntaxhighlight lang="text"> ADPenTest v1.2.0 Usage: adpentest [OPTIONS] [COMMAND] ... </syntaxhighlight> {{Note|pip automatically installs all required dependencies (nmap, crackmapexec, impacket, etc.).}} ==== Installing Specific Version ==== Install a specific ADPenTest version: <syntaxhighlight lang="bash"> pip install adpentest==1.2.0 </syntaxhighlight> List available versions: <syntaxhighlight lang="bash"> pip index versions adpentest </syntaxhighlight> ==== Upgrade Existing Installation ==== Update to the latest version: <syntaxhighlight lang="bash"> pip install --upgrade adpentest </syntaxhighlight> --- === Installing from Source === For development or custom builds: <syntaxhighlight lang="bash"> # Clone repository git clone https://github.com/netanelcyber/AdPentestAI-Python.git cd AdPentestAI-Python # Install in development mode pip install -e . # Or install with dependencies pip install -r requirements.txt python setup.py install </syntaxhighlight> {{Note|Source installation gives you access to latest features but may be less stable than PyPI release.}} --- === Required Dependencies === ADPenTest automatically installs these tools: ==== Network Scanning ==== * '''nmap''' - Port scanning and OS fingerprinting * '''masscan''' - High-speed port scanning * '''dnspython''' - DNS queries and enumeration ==== SMB & LDAP ==== * '''crackmapexec''' - SMB/LDAP enumeration and exploitation * '''impacket''' - Protocol implementation and exploitation * '''ldap3''' - LDAP protocol implementation * '''pysmbclient''' - SMB client implementation ==== Kerberos ==== * '''pycryptodome''' - Cryptographic implementations * '''pyspnego''' - Kerberos and NTLM authentication ==== Exploitation ==== * '''certipy-ad''' - ADCS exploitation * '''bloodhound.py''' - Attack path mapping * '''pypykatz''' - Credential extraction ==== Database & Storage ==== * '''sqlalchemy''' - Database abstraction * '''sqlite3''' - Result storage {{Note|Some tools (like nmap) may require separate installation on certain systems. See troubleshooting section if tools aren't found.}} --- === System-Level Dependencies === ==== Linux ==== Install system packages: <syntaxhighlight lang="bash"> sudo apt-get install -y \ nmap \ masscan \ git \ curl \ wget \ build-essential \ python3-dev </syntaxhighlight> ==== Windows ==== Some tools work better when pre-installed: <syntaxhighlight lang="powershell"> # Install via Chocolatey choco install nmap choco install git choco install curl </syntaxhighlight> Or install manually from: * nmap: https://nmap.org/download.html * Git: https://git-scm.com/download/win --- === First-Time Setup === ==== Create Working Directory ==== <syntaxhighlight lang="bash"> mkdir -p ~/adpentest-lab cd ~/adpentest-lab </syntaxhighlight> ==== Initialize Configuration ==== <syntaxhighlight lang="bash"> # Create default configuration adpentest --init </syntaxhighlight> This creates: <syntaxhighlight lang="text"> ~/.adpentest/ ├─ config.yaml # Main configuration ├─ credentials.yaml # Stored credentials ├─ scan_history.db # SQLite database └─ logs/ └─ adpentest.log # Log file </syntaxhighlight> ==== Test Installation ==== <syntaxhighlight lang="bash"> # Check version adpentest --version # Display help adpentest --help # Test connectivity adpentest --test-connection corp.local </syntaxhighlight> --- === Configuration Files === ==== Main Configuration (config.yaml) ==== Located at: `~/.adpentest/config.yaml` '''Default configuration:''' <syntaxhighlight lang="yaml"> # ADPenTest Configuration # General settings general: timeout: 300 retries: 3 log_level: INFO # Network settings network: max_threads: 16 dns_servers: - 8.8.8.8 - 8.8.4.4 rate_limit: 0 # 0 = unlimited # Tool settings tools: nmap: enabled: true aggressive: false masscan: enabled: true rate: 1000 crackmapexec: enabled: true timeout: 60 kerberoast: enabled: true certipy: enabled: true # Database settings database: type: sqlite path: ~/.adpentest/scan_history.db # Scan settings scan: phases: - reconnaissance - enumeration - vulnerability_assessment - exploitation preserve_evidence: true safe_mode: true </syntaxhighlight> ===== Key Configuration Options ===== * '''timeout''' - Seconds before operation times out * '''retries''' - Number of retries on failure * '''max_threads''' - Maximum parallel workers * '''rate_limit''' - Requests per second (0 = unlimited) * '''safe_mode''' - Default to dry-run (no actual exploitation) * '''preserve_evidence''' - Keep scan data for auditing ==== Credentials Configuration (credentials.yaml) ==== Located at: `~/.adpentest/credentials.yaml` '''Format:''' <syntaxhighlight lang="yaml"> # AD Credentials credentials: - domain: corp.local username: administrator password: "SecurePassword123!" ntlm_hash: null ticket_path: null - domain: corp.local username: serviceaccount password: "ServicePass456!" ntlm_hash: null ticket_path: null </syntaxhighlight> {{Warning|credentials.yaml contains sensitive data. Protect it with appropriate file permissions (chmod 600).}} ===== Permission Settings ===== <syntaxhighlight lang="bash"> # Restrict credentials file to owner only chmod 600 ~/.adpentest/credentials.yaml # Verify permissions ls -la ~/.adpentest/credentials.yaml </syntaxhighlight> --- === Environment Variables === Configure ADPenTest via environment variables: <syntaxhighlight lang="bash"> # Set target domain export ADPENTEST_TARGET=corp.local # Set DNS servers export ADPENTEST_DNS=192.168.1.10,8.8.8.8 # Set logging level export ADPENTEST_LOG_LEVEL=DEBUG # Set maximum workers export ADPENTEST_MAX_WORKERS=8 # Run with environment variables adpentest </syntaxhighlight> ===== Common Environment Variables ===== {| class="wikitable" |- ! Variable !! Purpose !! Example |- | ADPENTEST_TARGET || Target domain || corp.local |- | ADPENTEST_DNS || DNS servers || 192.168.1.10,8.8.8.8 |- | ADPENTEST_LOG_LEVEL || Logging level || DEBUG, INFO, WARNING, ERROR |- | ADPENTEST_MAX_WORKERS || Parallel threads || 16 |- | ADPENTEST_TIMEOUT || Operation timeout || 300 |- | ADPENTEST_RATE_LIMIT || Rate limit || 100 |} --- === Database Setup === ADPenTest stores results in SQLite database. ==== Automatic Setup ==== Database is created automatically on first run: <syntaxhighlight lang="bash"> adpentest --target corp.local # Creates: ~/.adpentest/scan_history.db </syntaxhighlight> ==== Manual Database Initialization ==== Create database manually: <syntaxhighlight lang="bash"> adpentest --init-db </syntaxhighlight> ==== Database Schema ==== <syntaxhighlight lang="text"> scan_history.db ├─ scans (scan metadata) │ ├─ scan_id │ ├─ target_domain │ ├─ start_time │ ├─ end_time │ └─ status ├─ discoveries (enumeration results) │ ├─ discovery_id │ ├─ scan_id │ ├─ object_type (user, group, computer) │ ├─ object_name │ └─ attributes ├─ vulnerabilities (found vulnerabilities) │ ├─ vuln_id │ ├─ scan_id │ ├─ cvss_score │ ├─ description │ └─ remediation └─ evidence (exploitation proof) ├─ evidence_id ├─ scan_id ├─ attack_chain └─ impact_assessment </syntaxhighlight> ==== Backup Database ==== Regular backups protect your scan history: <syntaxhighlight lang="bash"> # Create backup cp ~/.adpentest/scan_history.db ~/.adpentest/scan_history.db.backup.$(date +%Y%m%d) # Automated daily backup 0 2 * * * cp ~/.adpentest/scan_history.db ~/.adpentest/backups/scan_history.db.$(date +\%Y\%m\%d) </syntaxhighlight> {{Note|SQLite databases are portable. You can copy scan_history.db to another machine to analyze results.}} --- === Proxy Configuration === Configure ADPenTest to work through proxies. ==== HTTP/HTTPS Proxy ==== <syntaxhighlight lang="yaml"> # In config.yaml network: proxy: http: http://proxy.corp.local:8080 https: https://proxy.corp.local:8080 no_proxy: - localhost - 127.0.0.1 - 192.168.1.0/24 </syntaxhighlight> ==== SOCKS Proxy ==== <syntaxhighlight lang="yaml"> # In config.yaml network: proxy: socks5: socks5://proxy.corp.local:1080 socks5_user: username socks5_pass: password </syntaxhighlight> ==== Environment Variables ==== <syntaxhighlight lang="bash"> export HTTP_PROXY=http://proxy.corp.local:8080 export HTTPS_PROXY=https://proxy.corp.local:8080 export NO_PROXY=localhost,127.0.0.1 adpentest --target corp.local --scope-confirmed </syntaxhighlight> --- === Logging Configuration === ==== Log Levels ==== Configure verbosity of logging: {| class="wikitable" |- ! Level !! Verbosity !! Use Case |- | DEBUG || Very verbose || Troubleshooting issues |- | INFO || Normal || Regular scanning |- | WARNING || Minimal || Production use |- | ERROR || Only errors || Quiet mode |} ==== Configure Logging ==== <syntaxhighlight lang="yaml"> # In config.yaml logging: level: INFO format: "[%(asctime)s] %(levelname)s: %(message)s" file: ~/.adpentest/logs/adpentest.log file_size: 10485760 # 10MB backup_count: 5 console: true </syntaxhighlight> ==== View Logs ==== <syntaxhighlight lang="bash"> # Real-time log viewing tail -f ~/.adpentest/logs/adpentest.log # Search logs for errors grep ERROR ~/.adpentest/logs/adpentest.log # View last 100 lines tail -100 ~/.adpentest/logs/adpentest.log </syntaxhighlight> --- === Virtual Environment Setup === Best practice: Use Python virtual environment. ==== Create Virtual Environment ==== <syntaxhighlight lang="bash"> # Create virtual environment python3 -m venv adpentest-env # Activate (Linux/Mac) source adpentest-env/bin/activate # Activate (Windows) adpentest-env\Scripts\activate </syntaxhighlight> ==== Install in Virtual Environment ==== <syntaxhighlight lang="bash"> # Ensure activated which python # Should show path to venv # Install ADPenTest pip install adpentest # Verify adpentest --version </syntaxhighlight> ==== Deactivate Virtual Environment ==== <syntaxhighlight lang="bash"> deactivate </syntaxhighlight> {{Note|Virtual environments isolate Python packages, preventing conflicts with system packages. Recommended for production use.}} --- === Verifying Installation === ==== Comprehensive Verification ==== <syntaxhighlight lang="bash"> # Check version and help adpentest --version adpentest --help # Test connectivity to domain adpentest --test-connection corp.local # List available tools adpentest --list-tools # Check configuration adpentest --show-config # Verify database adpentest --check-database # Test authentication (if configured) adpentest --test-auth </syntaxhighlight> ==== Expected Output ==== <syntaxhighlight lang="text"> ADPenTest v1.2.0 Configuration: - Config file: ~/.adpentest/config.yaml - Database: ~/.adpentest/scan_history.db - Log file: ~/.adpentest/logs/adpentest.log Available Tools: ✓ nmap (v7.91) ✓ masscan (v1.0.5) ✓ crackmapexec (v5.4.1) ✓ impacket (v0.9.24) ✓ kerberoast (latest) ✓ certipy (v4.0.0) Database Status: OK Configuration: Valid Connectivity: Ready </syntaxhighlight> ==== Troubleshooting Installation ==== If verification fails, check: 1. '''Python version:''' `python3 --version` (should be 3.8+) 2. '''pip version:''' `pip --version` (should be recent) 3. '''ADPenTest installed:''' `pip show adpentest` 4. '''Tools available:''' `which nmap`, `which masscan` 5. '''Permissions:''' Ensure user can write to ~/.adpentest 6. '''Network:''' Test connectivity to domain --- === Troubleshooting Installation === {| class="wikitable" |- ! Problem !! Cause !! Solution |- | "command not found: adpentest" || Not in PATH || Reinstall: `pip install --force-reinstall adpentest` |- | "ModuleNotFoundError" || Missing dependency || `pip install adpentest[full]` |- | "Permission denied" error || File permissions || `chmod +x ~/.local/bin/adpentest` |- | "nmap not found" || nmap not installed || `apt-get install nmap` (Linux) |- | Database errors || Corrupted DB || Delete and recreate: `rm ~/.adpentest/scan_history.db && adpentest --init-db` |- | Slow installation || Network/mirror issue || Use specific PyPI: `pip install -i https://pypi.org/simple/ adpentest` |} --- === Post-Installation Steps === ==== 1. Configure Credentials ==== Edit ~/.adpentest/credentials.yaml: <syntaxhighlight lang="bash"> nano ~/.adpentest/credentials.yaml </syntaxhighlight> Add domain credentials: <syntaxhighlight lang="yaml"> credentials: - domain: corp.local username: administrator password: "YourPassword123!" </syntaxhighlight> {{Important|Protect credentials file: `chmod 600 ~/.adpentest/credentials.yaml`}} ==== 2. Test Connectivity ==== <syntaxhighlight lang="bash"> adpentest --target corp.local --test-connection </syntaxhighlight> ==== 3. Take a Trial Scan ==== <syntaxhighlight lang="bash"> # Dry-run (no actual scans) adpentest --target corp.local # Review output and verify no issues </syntaxhighlight> ==== 4. Review Configuration ==== <syntaxhighlight lang="bash"> adpentest --show-config </syntaxhighlight> Ensure settings match your requirements. --- === Knowledge Check === Test your installation knowledge: # What are the minimum Python and OS requirements for ADPenTest? # How do you install ADPenTest from PyPI? # What does the ~/.adpentest directory contain? # Where are credentials stored and how should they be protected? # Name three tools that ADPenTest automatically installs. # How do you create a Python virtual environment? # What is the purpose of the scan_history.db file? # How can you verify ADPenTest installation? # What log levels are available for ADPenTest? # True or False: You should store credentials in plaintext in config files. {{Note|Answers: 1) Python 3.8+, Linux or Windows 2) `pip install adpentest` 3) Configuration files, database, credentials, logs 4) credentials.yaml; protected with chmod 600 5) nmap, crackmapexec, impacket, kerberoast, certipy 6) `python3 -m venv env-name` 7) Persistent storage of all scan results 8) `adpentest --version`, `adpentest --test-connection`, `adpentest --check-database` 9) DEBUG, INFO, WARNING, ERROR 10) False - use strong passwords and file permissions}} --- === Hands-On Exercise === {{Note| '''Exercise: Install and Configure ADPenTest''' 1. '''Install Python:''' - Verify Python 3.8+ installed - Verify pip working 2. '''Create Virtual Environment:''' - Create: `python3 -m venv adpentest-env` - Activate: `source adpentest-env/bin/activate` 3. '''Install ADPenTest:''' - Run: `pip install adpentest` - Verify: `adpentest --version` 4. '''Initialize Configuration:''' - Run: `adpentest --init` - Review created files 5. '''Configure Credentials:''' - Edit: `~/.adpentest/credentials.yaml` - Add your lab domain credentials - Set permissions: `chmod 600` 6. '''Verify Installation:''' - Test connectivity: `adpentest --test-connection corp.local` - Check tools: `adpentest --list-tools` - View config: `adpentest --show-config` 7. '''Test Dry-Run:''' - Run: `adpentest --target corp.local` - Review output (no actual scans should occur) Success Criteria: - ADPenTest installed and executable - All tools verified available - Configuration file created and edited - Database initialized - Dry-run completes without errors }} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] * [https://github.com/netanelcyber/AdPentestAI-Python ADPenTest GitHub - Installation Guide] * [https://pypi.org/project/adpentest/ ADPenTest on PyPI] * [https://docs.python.org/3/tutorial/venv.html Python Virtual Environment Documentation] --- [[Category:Active Directory Security and Penetration Testing]] [[Category:ADPenTest Framework]] [[Category:Installation and Setup]] m8ns3s3f9g24oftvfk525rtkg0cjfba Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage 0 485828 4672035 2026-09-24T03:14:07Z נתנאל שטרן 3337472 Created page with "== Chapter 6: Basic Usage == === Learning Objectives === By the end of this chapter, you will know how to: * Install ADPenTest from PyPI * Understand the command-line interface * Run your first scan * Interpret scan results * Manage scan history and reports * Use common flags and options === Prerequisites === * Linux or Windows system with Python 3.8+ * Proper authorization to test target AD domain * Network connectivity to target domain controllers * Familiarity wit..." 4672035 wikitext text/x-wiki == Chapter 6: Basic Usage == === Learning Objectives === By the end of this chapter, you will know how to: * Install ADPenTest from PyPI * Understand the command-line interface * Run your first scan * Interpret scan results * Manage scan history and reports * Use common flags and options === Prerequisites === * Linux or Windows system with Python 3.8+ * Proper authorization to test target AD domain * Network connectivity to target domain controllers * Familiarity with command-line interfaces --- === Installation === ==== Quick Install ==== The simplest way to install ADPenTest: <syntaxhighlight lang="bash"> pip install adpentest </syntaxhighlight> ==== Verify Installation ==== Check that ADPenTest is properly installed: <syntaxhighlight lang="bash"> adpentest --version adpentest --help </syntaxhighlight> Expected output: <syntaxhighlight lang="bash"> ADPenTest 1.2.0 Usage: adpentest [OPTIONS] ... </syntaxhighlight> ==== System Requirements ==== {| class="wikitable" |- ! Component !! Requirement |- | Python || 3.8 or higher |- | Operating System || Linux (preferred) or Windows |- | RAM || Minimum 4GB (8GB+ recommended for large domains) |- | Disk Space || 2GB+ for database and tool storage |- | Network || Access to target domain on ports 53 (DNS), 88 (Kerberos), 389/636 (LDAP) |- | Tools || nmap, crackmapexec, certipy (automatically installed as dependencies) |} {{Note|On Windows, it's recommended to run ADPenTest in WSL2 (Windows Subsystem for Linux) for best compatibility.}} --- === Command-Line Interface Overview === ==== Basic Syntax ==== <syntaxhighlight lang="bash"> adpentest [OPTIONS] [COMMAND] </syntaxhighlight> ==== Global Options ==== {| class="wikitable" |- ! Option !! Description !! Example |- | --version || Show version information || adpentest --version |- | --help || Display help message || adpentest --help |- | --verbose || Enable verbose output || adpentest --target corp.local --verbose |- | --quiet || Suppress output || adpentest --target corp.local --quiet |- | --config FILE || Use custom config file || adpentest --config custom.conf |} ==== Common Commands ==== {| class="wikitable" |- ! Command !! Purpose !! Example |- | --target DOMAIN || Specify target domain || adpentest --target corp.local |- | --scope-confirmed || Authorize actual scan (required) || adpentest --target corp.local --scope-confirmed |- | --history || View past scans || adpentest --history |- | --cve-report || Generate CVE report || adpentest --cve-report |- | --query TERM || Search results || adpentest --query kerberoasting |} --- === Your First Scan === ==== Step 1: Preview Mode (No Authorization Required) ==== Always start by previewing what ADPenTest will do: <syntaxhighlight lang="bash"> adpentest --target corp.local </syntaxhighlight> This command: * Discovers Domain Controllers * Shows what tools will be executed * Displays target scope * '''Does NOT''' perform actual scans Expected output: <syntaxhighlight lang="text"> ADPenTest v1.2.0 - Active Directory Penetration Testing Framework ================================================================= Target: corp.local Mode: DRY-RUN (Preview only) [*] Domain Controller Discovery └─ DC1.corp.local (192.168.1.10) - Confidence: 100% └─ DC2.corp.local (192.168.1.11) - Confidence: 95% [*] Scheduled Tools - nmap port scanning - crackmapexec enumeration - Kerberoast service ticket extraction - certipy ADCS scanning - [32 additional tools] [!] To execute this scan, use: --scope-confirmed Total estimated time: 2 hours, 15 minutes </syntaxhighlight> {{Note|'''Always review the preview output before authorizing a scan.''' Ensure the target scope matches your authorization.}} ==== Step 2: Scope Review ==== Before running the actual scan, verify: * '''Correct Domain:''' Is corp.local the right target? * '''Expected DCs:''' Are all Domain Controllers listed? * '''Tool Coverage:''' Will all necessary tools run? * '''Estimated Time:''' Is 2+ hours acceptable? * '''Network Impact:''' Will scan bandwidth be acceptable? ==== Step 3: Authorize & Execute ==== Once you've reviewed the preview, authorize the scan: <syntaxhighlight lang="bash"> adpentest --target corp.local --scope-confirmed </syntaxhighlight> {{Important|The <code>--scope-confirmed</code> flag confirms you have authorization to test this domain. Use it only when you have explicit written permission.}} The scan will now execute: <syntaxhighlight lang="text"> [+] Authorization confirmed [+] Starting Domain Controller Discovery... [✓] DC1.corp.local discovered [✓] DC2.corp.local discovered [+] Initializing tool orchestration (16 parallel workers) [+] Starting reconnaissance phase... [✓] nmap port scanning [✓] masscan high-speed scanning [✓] DNS enumeration [+] Starting enumeration phase... [✓] SMB enumeration [✓] LDAP domain dump [✓] Kerberos reconnaissance [+] CVE scanning phase... [✓] Spring LDAP check [✓] Certificate enrollment scan [✓] Kerberos vulnerability scan [+] Scan completed in 2:14:37 [+] Results stored: ~/.adpentest/scan_history.db </syntaxhighlight> --- === Understanding Scan Results === ==== Result Structure ==== ADPenTest organizes results hierarchically: <syntaxhighlight lang="text"> Scan ID: 20250924-143052 ├─ Reconnaissance │ ├─ DC Discovery │ │ └─ DC1.corp.local (192.168.1.10) │ ├─ DNS Enumeration │ │ └─ 47 A records found │ └─ Port Scanning │ └─ 312 open ports discovered ├─ Enumeration │ ├─ SMB Shares │ │ └─ 23 shares enumerated │ ├─ LDAP Users │ │ └─ 1,247 user objects │ └─ Service Principals │ └─ 89 SPNs found ├─ Exploitation Simulation │ ├─ Kerberoasting Results │ │ └─ 12 vulnerable service accounts │ ├─ ADCS Vulnerable Templates │ │ └─ 3 exploitable templates │ └─ Privilege Escalation Paths │ └─ 5 potential escalation methods └─ CVE Findings ├─ Critical (CVSS 9.0+) │ └─ Spring LDAP Hardcoded Credentials ├─ High (CVSS 7.0-8.9) │ ├─ Certificate Enrollment Bypass │ └─ Kerberos RC4 Accepted └─ Medium (CVSS 4.0-6.9) └─ LDAP Anonymous Bind </syntaxhighlight> ==== Viewing Results ==== View detailed scan results: <syntaxhighlight lang="bash"> # Show most recent scan adpentest --show-results # Show specific scan by ID adpentest --show-results 20250924-143052 # Show only CVE findings adpentest --show-cve-results # Export results as JSON adpentest --export-json results.json # Export results as HTML report adpentest --export-html report.html </syntaxhighlight> --- === Advanced Usage Options === ==== 1. Scope to Specific OUs ==== Test only specific Organizational Units: <syntaxhighlight lang="bash"> adpentest --target corp.local \ --ou "OU=Engineering,DC=corp,DC=local" \ --scope-confirmed </syntaxhighlight> Test multiple OUs: <syntaxhighlight lang="bash"> adpentest --target corp.local \ --ou "OU=Engineering,DC=corp,DC=local" \ --ou "OU=Finance,DC=corp,DC=local" \ --scope-confirmed </syntaxhighlight> ==== 2. Scope to Specific Hosts ==== Test only specific Domain Controllers: <syntaxhighlight lang="bash"> adpentest --target corp.local \ --hosts "dc1.corp.local,dc2.corp.local" \ --scope-confirmed </syntaxhighlight> ==== 3. Limit Parallelization ==== For production environments, reduce parallel workers: <syntaxhighlight lang="bash"> # Default: 16 workers, reduced to 8 adpentest --target corp.local \ --max-workers 8 \ --scope-confirmed </syntaxhighlight> ==== 4. Rate Limiting ==== Throttle scan speed to avoid network saturation: <syntaxhighlight lang="bash"> # Limit to 50 requests per second adpentest --target corp.local \ --rate-limit 50 \ --scope-confirmed </syntaxhighlight> ==== 5. Tool Selection ==== Run only specific tool categories: <syntaxhighlight lang="bash"> # Only reconnaissance phase adpentest --target corp.local \ --phases reconnaissance \ --scope-confirmed # Multiple phases adpentest --target corp.local \ --phases reconnaissance,enumeration \ --scope-confirmed # Exclude specific tools adpentest --target corp.local \ --exclude-tools masscan,nmap \ --scope-confirmed </syntaxhighlight> ==== 6. Credential Authentication ==== When Domain Controller requires authentication: <syntaxhighlight lang="bash"> # Using username/password adpentest --target corp.local \ --username administrator \ --password "P@ssw0rd" \ --scope-confirmed # Using NTLM hash (pass-the-hash) adpentest --target corp.local \ --username administrator \ --hash "8846f7eaee8fb117ad06bdd830b7586c" \ --scope-confirmed # Using Kerberos ticket adpentest --target corp.local \ --ticket "/tmp/krb5.ccache" \ --scope-confirmed </syntaxhighlight> {{Note|Store credentials securely! Use environment variables or encrypted config files, never hardcode passwords in scripts.}} --- === Scan History & Reporting === ==== View Scan History ==== List all past scans: <syntaxhighlight lang="bash"> adpentest --history </syntaxhighlight> Output: <syntaxhighlight lang="text"> Scan History ============ ID | Target | Date/Time | Status | Duration 20250924-143052 | corp.local | 2025-09-24 14:30:52 | Completed | 2:14:37 20250923-091245 | corp.local | 2025-09-23 09:12:45 | Completed | 2:08:19 20250922-155030 | sales.local | 2025-09-22 15:50:30 | Completed | 1:47:02 </syntaxhighlight> ==== Generate CVE Report ==== Create a summary of all discovered CVEs: <syntaxhighlight lang="bash"> adpentest --cve-report </syntaxhighlight> Sample output: <syntaxhighlight lang="text"> CVE Report - Active Directory Assessments ========================================== Target: corp.local (Most Recent Scan) CRITICAL FINDINGS (CVSS 9.0+) ──────────────────────────── 1. Spring LDAP Hardcoded Credentials (CVSS 9.4) Status: Confirmed Affected: DC1.corp.local Remediation: Update Spring LDAP library HIGH FINDINGS (CVSS 7.0-8.9) ──────────────────────────── 2. Certificate Enrollment Bypass (CVSS 8.8) Status: Confirmed Template: SubCA Remediation: Restrict certificate template permissions MEDIUM FINDINGS (CVSS 4.0-6.9) ────────────────────────────── 3. Kerberos RC4 Encryption Accepted (CVSS 7.5) Status: Confirmed Impact: Weak encryption support Remediation: Disable RC4 in domain </syntaxhighlight> ==== Export Results ==== Export scan results in various formats: <syntaxhighlight lang="bash"> # Export as JSON (for programmatic processing) adpentest --export-json report.json # Export as HTML (for client presentations) adpentest --export-html report.html # Export as CSV (for spreadsheet analysis) adpentest --export-csv report.csv # Export specific scan adpentest --scan-id 20250924-143052 --export-html report_20250924.html </syntaxhighlight> --- === Query Scan Database === Search for specific findings across all scans: <syntaxhighlight lang="bash"> # Search for Kerberoasting results adpentest --query "kerberoasting" # Search for ADCS vulnerabilities adpentest --query "certificate" # Search by date range adpentest --query "after:2025-09-20 before:2025-09-25" # Search by CVSS score adpentest --query "cvss:>7.0" # Complex query adpentest --query "certificate AND corp.local AND cvss:>8.0" </syntaxhighlight> --- === Hands-On Exercise === {{Note| '''Exercise: Run Your First ADPenTest Scan''' '''Objective:''' Execute a complete ADPenTest scan against your lab environment. '''Steps:''' 1. Set up a lab domain (or use GOAD if available) 2. Review the preview: <code>adpentest --target lab.local</code> 3. Verify the scope matches your authorization 4. Execute the scan: <code>adpentest --target lab.local --scope-confirmed</code> 5. Wait for completion (typically 2-3 hours) 6. Review results: <code>adpentest --show-results</code> 7. Generate report: <code>adpentest --export-html lab_assessment.html</code> 8. Analyze findings and plan remediation '''Expected Outcomes:''' * At least 50+ findings across reconnaissance/enumeration * 2-5 CVE discoveries * Documented attack paths * Actionable remediation recommendations }} --- === Troubleshooting === ==== Common Issues ==== {| class="wikitable" |- ! Issue !! Cause !! Solution |- | "Permission Denied" error || User lacks execute permissions || <code>chmod +x ~/.local/bin/adpentest</code> |- | "Target domain not found" || DNS resolution failure || Verify DNS server, check domain name spelling |- | "No Domain Controllers discovered" || Network connectivity issue || Test connectivity: <code>nslookup _ldap._tcp.dc._msdcs.corp.local</code> |- | "Tool execution timeout" || Network latency || Increase timeout: <code>--timeout 300</code> |- | "Database locked" error || Concurrent scan attempt || Wait for previous scan to complete |} ==== Verbose Output ==== Enable detailed logging for troubleshooting: <syntaxhighlight lang="bash"> adpentest --target corp.local --verbose --scope-confirmed </syntaxhighlight> Check log file: <syntaxhighlight lang="bash"> tail -f ~/.adpentest/adpentest.log </syntaxhighlight> --- === Knowledge Check === Test your understanding: # What flag is required to execute an actual scan (not preview)? # How do you view all past scans? # What is the default number of parallel workers? # Name three export formats for scan results # How would you scope a scan to only the "Engineering" OU? {{Note|Answers: 1) <code>--scope-confirmed</code> 2) <code>adpentest --history</code> 3) 16 4) JSON, HTML, CSV 5) <code>adpentest --target corp.local --ou "OU=Engineering,DC=corp,DC=local" --scope-confirmed</code>}} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 5 - Installation and Configuration|Chapter 5: Installation and Configuration]] * [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] * [https://github.com/netanelcyber/AdPentestAI-Python ADPenTest GitHub - Usage Examples] --- [[Category:Active Directory Security and Penetration Testing]] [[Category:How-to guides]] qni18yybdowiub30lzhpehuv5k4bjrj Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery 0 485829 4672036 2026-09-24T03:14:34Z נתנאל שטרן 3337472 Created page with "== Chapter 7: Domain Controller Discovery == === Learning Objectives === By the end of this chapter, you will understand: * Why Domain Controller discovery is critical in AD penetration testing * Multiple DC discovery mechanisms * How ADPenTest discovers Domain Controllers * Confidence scoring and validation * WAF bypass techniques for DC discovery * How to identify DC roles and capabilities * DNS-based discovery methods * LDAP-based discovery methods * Network-based d..." 4672036 wikitext text/x-wiki == Chapter 7: Domain Controller Discovery == === Learning Objectives === By the end of this chapter, you will understand: * Why Domain Controller discovery is critical in AD penetration testing * Multiple DC discovery mechanisms * How ADPenTest discovers Domain Controllers * Confidence scoring and validation * WAF bypass techniques for DC discovery * How to identify DC roles and capabilities * DNS-based discovery methods * LDAP-based discovery methods * Network-based discovery methods === Prerequisites === * Completion of [[Active Directory Security and Penetration Testing/Chapter 6 - Basic Usage|Chapter 6: Basic Usage]] * Understanding of DNS and LDAP protocols * Basic network reconnaissance knowledge * Access to network where target domain resides --- === Why Domain Controller Discovery is Critical === Domain Controllers are the core of Active Directory infrastructure. ==== Strategic Importance ==== '''Domain Controllers are:''' * '''Central authority''' - Manage all AD authentication and authorization * '''Key targets''' - Compromise a DC often means full domain compromise * '''High value''' - Contain master copies of all AD data * '''Critical infrastructure''' - Used by all domain members {{Important|Finding all Domain Controllers in a target domain is often the first major objective in AD penetration testing. Missing a DC means missing potential attack paths.}} ==== DC Compromise Impact ==== Compromising a Domain Controller grants: ✓ Full credentials of all domain users and computers ✓ Ability to modify AD objects (create accounts, change permissions) ✓ Access to all domain data and resources ✓ Ability to create persistent backdoors ✓ Control over all authentication in the domain --- === Domain Controller Discovery Mechanisms === ADPenTest uses multiple discovery methods for comprehensive coverage. ==== 1. DNS SRV Record Queries ==== Domain Controllers advertise themselves via DNS SRV records. ===== How It Works ===== Kerberos services are published as DNS SRV records: <syntaxhighlight lang="bash"> # Query for Kerberos DC locators nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.local # Expected response shows all DCs: _ldap._tcp.dc._msdcs.corp.local IN SRV 0 100 389 dc1.corp.local _ldap._tcp.dc._msdcs.corp.local IN SRV 0 100 389 dc2.corp.local _ldap._tcp.dc._msdcs.corp.local IN SRV 0 100 389 dc3.corp.local </syntaxhighlight> ===== Why This Works ===== * Public information (DNS is typically accessible) * Comprehensive (all DCs register their SRV records) * Accurate (DCs maintain their registrations) * No credentials required ===== Limitations ===== * Requires DNS access * Blocked by firewall rules * Some domains restrict DNS queries * May return stale records ===== Using ADPenTest ===== <syntaxhighlight lang="bash"> # ADPenTest automatically queries SRV records adpentest --target corp.local --discovery-method dns # View DNS-discovered DCs adpentest --show-discovery --method dns </syntaxhighlight> ==== 2. LDAP RootDSE Probes ==== LDAP protocol exposes directory information. ===== How It Works ===== Query LDAP root DSE (Directory Service Entry): <syntaxhighlight lang="bash"> # Query LDAP RootDSE ldapsearch -x -H ldap://corp.local -b "" -s base "*" dnsHostName # Returns LDAP server information including: # - dnsHostName (DC name) # - dsServiceName (DC identifier) # - currentTime (DC system time) # - highestCommittedUSN (replication info) </syntaxhighlight> ===== Why This Works ===== * Direct LDAP protocol information * Reliable identification of LDAP servers * Provides detailed server information * No credentials required for anonymous queries ===== Limitations ===== * LDAP must be accessible (port 389/636) * Some environments disable anonymous LDAP * May not discover all DCs (if behind load balancer) ===== Using ADPenTest ===== <syntaxhighlight lang="bash"> # LDAP-based discovery adpentest --target corp.local --discovery-method ldap # Specify LDAP server adpentest --target corp.local --ldap-server dc1.corp.local </syntaxhighlight> ==== 3. Port Fingerprinting ==== Scan for common DC ports to identify servers. ===== Common Ports ===== {| class="wikitable" |- ! Port !! Protocol !! Service !! Use |- | 53 || TCP/UDP || DNS || Domain Name Service |- | 88 || TCP/UDP || Kerberos || Authentication |- | 135 || TCP || RPC Endpoint Mapper || Remote Procedure Call |- | 389 || TCP || LDAP || Directory Access |- | 445 || TCP || SMB || File Sharing |- | 636 || TCP || LDAPS || Secure LDAP |- | 3268 || TCP || Global Catalog || Forest-wide queries |- | 3269 || TCP || Global Catalog SSL || Secure GC |} ===== Port Scanning for DC Detection ===== <syntaxhighlight lang="bash"> # Scan for common DC ports nmap -p 53,88,135,389,445,636,3268,3269 corp.local # More aggressive scan nmap -p 53,88,135,389,445,636,3268,3269 -sV corp.local # High-speed scanning with masscan masscan 192.168.1.0/24 -p 53,88,389,445,3268 --rate 1000 </syntaxhighlight> ===== Why This Works ===== * Identifies servers running DC services * Works through some firewall restrictions * Can probe specific IP ranges * Detects servers that don't advertise via DNS ===== Limitations ===== * Time-consuming for large networks * Firewall may block scans * Doesn't definitively identify DCs * May find non-DC servers running same ports ===== Using ADPenTest ===== <syntaxhighlight lang="bash"> # Port-based discovery adpentest --target corp.local --discovery-method port-scan # Scan specific network range adpentest --target corp.local --network 192.168.1.0/24 --discovery-method port-scan </syntaxhighlight> ==== 4. Subnet Scanning ==== Comprehensive scanning of target subnets. ===== How It Works ===== Scan entire subnets for hosts running DC services: <syntaxhighlight lang="bash"> # Enumerate hosts on subnet nmap -sn 192.168.1.0/24 # Host discovery # Port scan enumerated hosts nmap -p 53,88,389,445,3268 192.168.1.0/24 # SMB scanning for computer identification crackmapexec smb 192.168.1.0/24 --shares </syntaxhighlight> ===== Why This Works ===== * Comprehensive coverage * Discovers all systems on network * Identifies backup DCs * Finds RODC (Read-Only Domain Controllers) ===== Limitations ===== * Very time-consuming * Generates significant network traffic * Easily detected by monitoring * May violate authorization scope ===== Using ADPenTest ===== <syntaxhighlight lang="bash"> # Comprehensive subnet scanning adpentest --target corp.local --subnet-scan 192.168.1.0/24 --scope-confirmed # Multiple subnets adpentest --target corp.local --subnets 192.168.1.0/24,192.168.2.0/24 </syntaxhighlight> --- === Confidence Scoring === ADPenTest assigns confidence scores to discovered DCs. ==== Scoring Methodology ==== Each discovery method contributes to confidence: {| class="wikitable" |- ! Discovery Method !! Confidence Level !! Evidence Type |- | DNS SRV Record || 100% || Definitive DC registration |- | LDAP RootDSE || 95% || Direct LDAP response |- | Kerberos KDC || 90% || Kerberos authentication service |- | Port Scanning || 75% || Multiple DC ports open |- | SMB Identification || 85% || SMB server banner |- | Zone Transfer || 100% || Full DNS zone data |} ===== Composite Scoring ===== When multiple methods identify same server: <syntaxhighlight lang="text"> DC1.corp.local: ├─ DNS SRV Record ✓ (100%) ├─ LDAP RootDSE ✓ (95%) ├─ Port Scan ✓ (75%) └─ Composite Confidence: 98% [HIGH CONFIDENCE] Server2.corp.local: ├─ Port Scan ✓ (75%) └─ Composite Confidence: 75% [MEDIUM CONFIDENCE] </syntaxhighlight> ==== Using Confidence Scores ==== <syntaxhighlight lang="bash"> # View DC discovery results with confidence adpentest --show-discovery --confidence # Filter by minimum confidence adpentest --show-discovery --min-confidence 90 </syntaxhighlight> {{Note|High-confidence results are more reliable for targeting. Low-confidence results need verification before attack planning.}} --- === DC Information Gathering === Once DCs are discovered, gather detailed information. ==== Domain Controller Roles ==== Different DCs may have different roles: ===== PDC Emulator ===== Primary Domain Controller Emulator: * Handles password changes * Serves as time source * Manages time sync <syntaxhighlight lang="bash"> # Find PDC Emulator adpentest --find-pdc corp.local </syntaxhighlight> ===== Global Catalog Server ===== Holds forest-wide information: * Replicated objects from all domains * Faster queries than full LDAP * Typically highly available ===== RODC (Read-Only DC) ===== Read-only Domain Controller: * Cannot write changes * Useful for branch offices * Filtered replication ==== Detailed DC Information ==== Gather comprehensive DC details: <syntaxhighlight lang="bash"> # Get DC information ldapsearch -x -H ldap://dc1.corp.local -b "" -s base "*" \ dnsHostName \ operatingSystem \ operatingSystemVersion \ serverReferenceBL \ msDS-DomainControllerType # Results include: # - Hostname # - OS version # - Domain role # - RODC status # - Replication partners </syntaxhighlight> ==== DC Capabilities ==== Identify DC capabilities: <syntaxhighlight lang="bash"> # Query DC capabilities adpentest --enumerate-dc-caps corp.local # Results show: # - AD schema version (2003, 2008 R2, 2012, 2016, 2019, 2022) # - Forest functional level # - Domain functional level # - Available features (ADCS, Exchange, etc.) </syntaxhighlight> --- === WAF Bypass Techniques === When firewalls block standard DC discovery. ==== 1. Raw Protocol Tunneling ==== Use raw LDAP/Kerberos over TCP: <syntaxhighlight lang="bash"> # Standard LDAP (may be blocked) ldapsearch -x -H ldap://dc1.corp.local ... # Raw LDAP over TCP (more likely to work) ldapsearch -x -H ldap://dc1.corp.local:389 \ -E pr=1000/noprompt ... </syntaxhighlight> ==== 2. TCP Fragmentation ==== Fragment packets to evade IDS/firewall: <syntaxhighlight lang="bash"> # Fragmented LDAP queries timeout 5 bash -c 'echo -n "timeout 5" | \ nc -w 5 dc1.corp.local 389' | xxd </syntaxhighlight> ==== 3. DNS over HTTPS/TLS ==== Encrypted DNS to bypass restrictions: <syntaxhighlight lang="bash"> # DNS over HTTPS dig +https _ldap._tcp.dc._msdcs.corp.local # DNS over TLS dig +tls _ldap._tcp.dc._msdcs.corp.local </syntaxhighlight> ==== 4. Header Spoofing ==== Modify request headers to bypass WAF: <syntaxhighlight lang="bash"> # Spoofed HTTP headers curl -H "X-Forwarded-For: 10.0.0.1" \ -H "User-Agent: Mozilla/5.0" \ ldap://dc1.corp.local </syntaxhighlight> ==== 5. Timing-Based Evasion ==== Slow down requests to avoid rate limiting: <syntaxhighlight lang="bash"> # Rate-limited LDAP queries for i in {1..100}; do ldapsearch -x -H ldap://dc1.corp.local ... & sleep 0.5 # Slow rate done </syntaxhighlight> {{Warning|WAF bypass techniques may be blocked or considered excessive. Always stay within authorized scope and rules of engagement.}} --- === ADPenTest DC Discovery Workflow === How ADPenTest orchestrates DC discovery: <syntaxhighlight lang="text"> ADPenTest DC Discovery Process: 1. Parse Target Domain └─ Extract domain name, check format 2. Execute Discovery Methods (parallel) ├─ DNS SRV Records │ └─ Query _ldap._tcp.dc._msdcs.domain ├─ LDAP RootDSE │ └─ Anonymous LDAP query ├─ Port Scanning │ └─ nmap common DC ports └─ Subnet Scanning (if enabled) └─ masscan/nmap on networks 3. Aggregate Results ├─ Combine all discoveries ├─ Remove duplicates └─ Calculate confidence scores 4. Validate Discoveries ├─ Verify each DC ├─ Test connectivity ├─ Enumerate capabilities └─ Identify roles 5. Report Results ├─ List discovered DCs ├─ Show confidence levels ├─ Display roles/capabilities └─ Suggest next steps </syntaxhighlight> --- === Practical DC Discovery Examples === ==== Example 1: Simple Discovery ==== <syntaxhighlight lang="bash"> # Basic discovery adpentest --target corp.local --discovery-only # Output: # Domain: corp.local # Discovered Domain Controllers: # 1. DC1.corp.local (192.168.1.10) # - Confidence: 100% # - OS: Windows Server 2022 # - Role: PDC Emulator # # 2. DC2.corp.local (192.168.1.11) # - Confidence: 95% # - OS: Windows Server 2019 # - Role: Global Catalog </syntaxhighlight> ==== Example 2: Multi-Method Discovery ==== <syntaxhighlight lang="bash"> # Comprehensive discovery with all methods adpentest --target corp.local \ --discovery-methods dns,ldap,port-scan,subnet-scan \ --network 192.168.1.0/24 \ --discovery-only # Combines all methods for maximum coverage </syntaxhighlight> ==== Example 3: Filter by Confidence ==== <syntaxhighlight lang="bash"> # Only high-confidence results adpentest --target corp.local \ --discovery-only \ --min-confidence 90 # Only returns DCs with 90%+ confidence </syntaxhighlight> --- === Troubleshooting DC Discovery === {| class="wikitable" |- ! Problem !! Likely Cause !! Solution |- | No DCs discovered || DNS blocked || Try LDAP or port-scan methods |- | Incomplete DC list || WAF filtering || Use bypass techniques or expanded scope |- | Low confidence scores || Mixed results || Cross-validate with multiple methods |- | Timeout errors || Network latency || Increase timeout value |- | Authentication errors || Credentials invalid || Verify credentials, check LDAP access |- | "Domain not found" || Invalid domain name || Verify domain name spelling |} --- === Knowledge Check === Test your DC discovery knowledge: # Why is Domain Controller discovery critical in AD penetration testing? # Name four DC discovery methods used by ADPenTest. # What is a DNS SRV record and why is it useful for DC discovery? # Explain what confidence scoring means in DC discovery. # What are three common DC ports and their protocols? # What is the purpose of a PDC Emulator? # What is a Global Catalog server and what does it store? # Name three WAF bypass techniques for DC discovery. # How would you discover DCs in a firewalled environment? # True or False: All discovered servers with common DC ports are definitely Domain Controllers. {{Note|Answers: 1) DCs control auth, are high-value targets, control all AD data 2) DNS SRV, LDAP RootDSE, port scanning, subnet scanning 3) DNS record advertising Kerberos services; useful because all DCs register themselves 4) Confidence level that discovered server is actually a DC 5) 53 (DNS), 88 (Kerberos), 389 (LDAP), 445 (SMB), 3268 (Global Catalog) 6) Handles password changes, serves as time source 7) Holds forest-wide replicated objects, faster queries 8) Raw protocol tunneling, TCP fragmentation, DNS over HTTPS, header spoofing, timing-based evasion 9) Try LDAP/Kerberos methods, use DNS over HTTPS, slower requests, WAF bypass techniques 10) False - could be other servers; need confirmation}} --- === Hands-On Exercise === {{Note| '''Exercise: Discover Domain Controllers in Your Lab''' 1. '''Identify Target Domain:''' - Note your lab domain name (e.g., corp.local) - Verify network access 2. '''DNS SRV Discovery:''' - Query: `nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.local` - Record discovered DCs - Note confidence (should be 100%) 3. '''LDAP Discovery:''' - Query: `ldapsearch -x -H ldap://corp.local -b "" -s base "*"` - Identify LDAP server - Extract dnsHostName attribute - Compare with DNS results 4. '''Port Scanning:''' - Scan network for common DC ports: 53, 88, 389, 445, 3268 - Identify servers with multiple DC ports open - Verify against DNS/LDAP results 5. '''ADPenTest Discovery:''' - Run: `adpentest --target corp.local --discovery-only` - Review discovered DCs - Check confidence scores - Compare with manual results 6. '''DC Information Gathering:''' - Query each discovered DC - Identify roles (PDC Emulator, GC, etc.) - Check OS version - Document findings 7. '''Validation:''' - Verify all DCs discovered - Confirm no false positives - Document methodology used - Create summary report Success Criteria: - All DCs in domain discovered - High confidence scores - Roles identified - Cross-validated with multiple methods }} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration|Chapter 8: Reconnaissance and Enumeration]] * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/forest-design-models Microsoft Learn: Forest Design] * [https://attack.mitre.org/tactics/TA0007/ MITRE ATT&CK: Discovery] * [https://nmap.org/ Nmap Documentation] --- [[Category:Active Directory Security and Penetration Testing]] [[Category:ADPenTest Framework]] [[Category:Domain Controller Discovery]] ea79c9xw0van40k6lgbjc82q4uwsauq Active Directory Security and Penetration Testing/Chapter 8 - Reconnaissance and Enumeration 0 485830 4672037 2026-09-24T03:17:35Z נתנאל שטרן 3337472 Created page with "== Chapter 8: Reconnaissance and Enumeration == === Learning Objectives === By the end of this chapter, you will understand: * The difference between reconnaissance and enumeration in AD testing * SMB-based enumeration techniques * LDAP query methods for AD discovery * DNS enumeration for AD infrastructure * User and group discovery techniques * Computer and service discovery * How to identify valuable targets * How ADPenTest automates enumeration * Common enumeration..." 4672037 wikitext text/x-wiki == Chapter 8: Reconnaissance and Enumeration == === Learning Objectives === By the end of this chapter, you will understand: * The difference between reconnaissance and enumeration in AD testing * SMB-based enumeration techniques * LDAP query methods for AD discovery * DNS enumeration for AD infrastructure * User and group discovery techniques * Computer and service discovery * How to identify valuable targets * How ADPenTest automates enumeration * Common enumeration tools and their uses * How to interpret enumeration results === Prerequisites === * Completion of [[Active Directory Security and Penetration Testing/Chapter 7 - Domain Controller Discovery|Chapter 7: Domain Controller Discovery]] * Understanding of SMB, LDAP, and DNS protocols * Basic Active Directory concepts from [[Active Directory Security and Penetration Testing/Chapter 1 - Active Directory Basics|Chapter 1]] * Network connectivity to target domain --- === Reconnaissance vs. Enumeration === Two critical phases that often overlap. ==== Reconnaissance ==== '''Reconnaissance''' is gathering information about the target without direct interaction. * '''Passive''' - No direct system contact * '''External''' - Uses public information * '''Low risk''' - Difficult to detect * '''Examples:''' DNS queries, OSINT, public records ==== Enumeration ==== '''Enumeration''' is active probing to discover specific resources and information. * '''Active''' - Direct system interaction * '''Internal''' - Requires network access * '''Higher risk''' - Can be detected * '''Examples:''' LDAP queries, SMB scans, user listings {{Note|Modern AD penetration testing combines reconnaissance and enumeration into a continuous discovery process. ADPenTest handles both seamlessly.}} --- === SMB Enumeration === Server Message Block (SMB) provides rich information about AD infrastructure. ==== SMB Protocol Basics ==== SMB (ports 445, 139) exposes: * Domain information * Computer names and details * User and group information * Printer and share information * Session information ==== Null Session Enumeration ==== Anonymous SMB connections can reveal AD information. ===== Checking for Null Sessions ===== <syntaxhighlight lang="bash"> # Test null session access smbclient -L //dc1.corp.local -N # If successful, shows shares and computer info # If blocked: "NT_STATUS_ACCESS_DENIED" </syntaxhighlight> ===== Enumerating with Null Sessions ===== <syntaxhighlight lang="bash"> # List shares (null session) smbclient -L //192.168.1.10 -N # Enumerate users rpcclient -U "" -N 192.168.1.10 -c "enumdomusers" # Enumerate groups rpcclient -U "" -N 192.168.1.10 -c "enumdomgroups" # Get domain info rpcclient -U "" -N 192.168.1.10 -c "querydominfo" </syntaxhighlight> ===== Using CrackMapExec for SMB Enumeration ===== <syntaxhighlight lang="bash"> # Enum shares crackmapexec smb 192.168.1.0/24 --shares # Enum users crackmapexec smb 192.168.1.10 -u '' -p '' --users # Enum groups crackmapexec smb 192.168.1.10 -u '' -p '' --groups # Enum computers crackmapexec smb 192.168.1.10 -u '' -p '' --computers </syntaxhighlight> {{Important|Many organizations disable null sessions. When available, they're extremely valuable for initial enumeration.}} ==== Share Enumeration ==== Discover accessible shares and their contents. <syntaxhighlight lang="bash"> # List shares on server net view \\dc1.corp.local # Connect to share smbclient \\\\dc1.corp.local\\share_name -U username # Mount share (Linux) mount -t cifs \\\\192.168.1.10\\share_name /mnt/share -o username=user </syntaxhighlight> ===== Common Share Names to Probe ===== * <code>ADMIN$</code> - Administrative share * <code>C$</code>, <code>D$</code> - Drive letters * <code>SYSVOL</code> - Group Policy scripts * <code>NETLOGON</code> - Logon scripts * <code>Users</code> - User profiles * <code>Documents</code> - Shared documents {{Warning|Accessing shares without authorization is illegal. Only access shares you have explicit permission to enumerate.}} ==== Group Policy Discovery ==== Group Policy files stored on SYSVOL contain useful information. <syntaxhighlight lang="bash"> # Connect to SYSVOL share smbclient \\\\dc1.corp.local\\SYSVOL -U user # List directory dir # Download GPO files get Groups.xml get gpsecurity.txt </syntaxhighlight> ===== Sensitive Information in Group Policy ===== * Passwords in GPP (Group Policy Preferences) * Scheduled task configurations * Service account credentials * Printer configurations * Software deployment settings {{Important|Group Policy files often contain credentials or other sensitive data. They should be carefully reviewed.}} --- === LDAP Enumeration === LDAP (Lightweight Directory Access Protocol) provides comprehensive AD information. ==== LDAP Basics ==== LDAP ports: 389 (clear), 636 (SSL) LDAP allows querying: * Users and their attributes * Groups and memberships * Computers and their properties * Organizational structure * Service accounts and SPNs ==== Anonymous LDAP Queries ==== Many systems allow anonymous LDAP access. ===== Basic LDAP Query ===== <syntaxhighlight lang="bash"> # Simple LDAP query (no authentication) ldapsearch -x -H ldap://dc1.corp.local \ -b "DC=corp,DC=local" \ -s sub "(objectClass=*)" </syntaxhighlight> ===== Query Parameters ===== * <code>-x</code> - Simple authentication (no Kerberos) * <code>-H</code> - LDAP URL (ldap:// or ldaps://) * <code>-b</code> - Search base (DN) * <code>-s</code> - Search scope (base, one, sub, subordinate) ===== Search Scopes ===== * <code>base</code> - Search only the base object * <code>one</code> - Search one level below base * <code>sub</code> - Search recursively from base * <code>subordinate</code> - Search all below base ==== User Enumeration ==== Query all users in the domain. <syntaxhighlight lang="bash"> # Enumerate all users ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "objectClass=user" \ sAMAccountName displayName mail # Output shows: # sAMAccountName: john.smith # displayName: John Smith # mail: john.smith@corp.local </syntaxhighlight> ===== Useful User Attributes ===== {| class="wikitable" |- ! Attribute !! Purpose !! Example |- | sAMAccountName || Username || john.smith |- | displayName || Full name || John Smith |- | mail || Email address || john.smith@corp.local |- | telephoneNumber || Phone || 555-1234 |- | department || Department || Engineering |- | title || Job title || Senior Engineer |- | manager || Manager DN || CN=Jane Doe,... |- | memberOf || Groups || CN=Engineers,... |- | userAccountControl || Account status || 512 (enabled) |- | pwdLastSet || Password change date || Timestamp |- | lastLogon || Last logon time || Timestamp |} ==== Group Enumeration ==== Query all groups and memberships. <syntaxhighlight lang="bash"> # List all groups ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "objectClass=group" \ sAMAccountName description # Get group membership ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "sAMAccountName=Domain Admins" \ member # Output shows all members of Domain Admins </syntaxhighlight> ===== Privileged Groups to Identify ===== * <code>Domain Admins</code> - Full domain control * <code>Enterprise Admins</code> - Forest-wide admin * <code>Schema Admins</code> - Schema modifications * <code>Account Operators</code> - User/computer management * <code>Backup Operators</code> - Backup privileges * <code>Server Operators</code> - Server management * <code>Remote Desktop Users</code> - RDP access {{Important|Identifying who is in privileged groups is critical for targeting high-value accounts.}} ==== Computer Enumeration ==== Discover computers in the domain. <syntaxhighlight lang="bash"> # List all computers ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "objectClass=computer" \ name operatingSystem dNSHostName # Results show: # name: WORKSTATION-01 # operatingSystem: Windows 10 Enterprise # dNSHostName: workstation-01.corp.local </syntaxhighlight> ===== Useful Computer Attributes ===== * <code>name</code> - Computer name * <code>operatingSystem</code> - OS version * <code>operatingSystemVersion</code> - OS build * <code>dNSHostName</code> - Fully qualified name * <code>pwdLastSet</code> - Last password change * <code>lastLogon</code> - Last logon timestamp * <code>enabled</code> - Account status ==== Service Principal Name (SPN) Enumeration ==== Discover services and applications. <syntaxhighlight lang="bash"> # Find all SPNs ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "servicePrincipalName=*" \ sAMAccountName servicePrincipalName # Results show: # sAMAccountName: admin.service # servicePrincipalName: HTTP/webserver.corp.local # servicePrincipalName: HTTP/webserver </syntaxhighlight> ===== Common Service Types ===== * <code>HTTP/</code> - Web services * <code>MSSQLSvc/</code> - SQL Server * <code>LDAP/</code> - LDAP services * <code>Kerberos/</code> - Kerberos services * <code>HOST/</code> - Computer accounts * <code>RestrictedKrbHost/</code> - Restricted Kerberos {{Note|SPNs are targets for Kerberoasting attacks. See [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9]] for details.}} ==== LDAP Filter Examples ==== Common LDAP filters for targeting: <syntaxhighlight lang="bash"> # Disabled accounts ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "(userAccountControl:1.2.840.113556.1.4.803:=2)" # Accounts with no password expiry ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "(|(userAccountControl:1.2.840.113556.1.4.803:=65536)(userAccountControl:1.2.840.113556.1.4.803:=262144))" # Service accounts (common naming) ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "(|(sAMAccountName=*service*)(sAMAccountName=*svc*))" # Kerberoastable accounts ldapsearch -x -H ldap://corp.local \ -b "DC=corp,DC=local" \ "(&(sAMAccountName!=krbtgt)(servicePrincipalName=*))" </syntaxhighlight> --- === DNS Enumeration === Domain Name System reveals AD infrastructure. ==== Zone Transfers ==== Complete copy of DNS zone (if misconfigured). <syntaxhighlight lang="bash"> # Attempt zone transfer dig axfr @dns.corp.local corp.local # If successful, shows all DNS records: # corp.local. IN SOA ... # dc1.corp.local. IN A 192.168.1.10 # dc2.corp.local. IN A 192.168.1.11 # etc. </syntaxhighlight> {{Warning|Zone transfers should not be allowed to unauthenticated users. Many organizations still have this misconfiguration.}} ==== SRV Record Queries ==== Service records reveal infrastructure. <syntaxhighlight lang="bash"> # Kerberos services dig SRV _kerberos._tcp.dc._msdcs.corp.local dig SRV _ldap._tcp.dc._msdcs.corp.local # Global Catalog dig SRV _gc._tcp.corp.local # LDAP dig SRV _ldap._tcp.corp.local # Kerberos Password Change dig SRV _kpasswd._tcp.corp.local </syntaxhighlight> ==== A Record Queries ==== Resolve services to IP addresses. <syntaxhighlight lang="bash"> # Resolve domain dig A corp.local # Resolve DC dig A dc1.corp.local # Resolve services dig A webserver.corp.local dig A mailserver.corp.local </syntaxhighlight> ==== Reverse DNS Lookups ==== Identify servers from IP addresses. <syntaxhighlight lang="bash"> # Reverse lookup dig -x 192.168.1.10 # Returns: dc1.corp.local # Reverse zone transfer dig axfr @dns.corp.local 1.168.192.in-addr.arpa </syntaxhighlight> --- === Automated Enumeration Tools === ==== ADPenTest Enumeration ==== Orchestrates all enumeration methods. <syntaxhighlight lang="bash"> # Run enumeration phase adpentest --target corp.local \ --phases enumeration \ --scope-confirmed # Generates comprehensive report: # - All users and groups # - All computers # - All services and SPNs # - Permission analysis # - Privilege mapping </syntaxhighlight> ==== ldapdomaindump ==== Comprehensive LDAP enumeration tool. <syntaxhighlight lang="bash"> # Full domain dump ldapdomaindump corp.local \ -u 'CORP\username' \ -p 'password' # Generates CSV files: # - computers.csv # - groups.csv # - users.csv # - policy.csv # - memberships.csv </syntaxhighlight> ==== Impacket Tools ==== Python-based AD tools. <syntaxhighlight lang="bash"> # Get user information python3 GetADUsers.py -all corp.local/username:password # Get domain info python3 GetDomainInfo.py corp.local/username:password # Get group information python3 GetNPUsers.py corp.local/username:password </syntaxhighlight> ==== BloodHound ==== Attack path visualization. <syntaxhighlight lang="bash"> # Collect data python3 bloodhound.py -u 'username' -p 'password' \ -d corp.local -ns 192.168.1.10 \ -c All # Generates JSON files for analysis # Open in BloodHound GUI for visualization </syntaxhighlight> --- === Building a Target Profile === Enumeration results reveal high-value targets. ==== User Targeting ==== Identify valuable user accounts: <syntaxhighlight lang="text"> Target Profile for john.smith: ├─ Account Status: Enabled ├─ Last Logon: 2 days ago (recently active) ├─ Groups: │ ├─ Domain Admins ⚠️ (HIGH PRIORITY) │ ├─ Backup Operators │ └─ Remote Desktop Users ├─ Services: None ├─ Password Expiry: No (never expires) ⚠️ └─ Risk Level: CRITICAL → Compromising this account = domain compromise </syntaxhighlight> ==== Service Account Targeting ==== Identify service accounts for exploitation: <syntaxhighlight lang="text"> Target Profile for admin.service: ├─ Account Type: Service Account ├─ Services: │ ├─ HTTP/webserver.corp.local (Kerberoastable) │ └─ HTTP/sqlserver.corp.local (Kerberoastable) ├─ Groups: Domain Users (minimal privileges) ├─ Password: Unknown ├─ Kerberoastable: YES ⚠️ └─ Attack Path: Kerberoast → Credential Recovery → Access </syntaxhighlight> ==== Computer Targeting ==== Identify valuable systems: <syntaxhighlight lang="text"> Target Profile for SERVER-01: ├─ OS: Windows Server 2022 ├─ Active: YES (last logon: today) ├─ Services: SQL Server, IIS ├─ Users Logged In: Administrator, ServiceAccount ├─ Shares: ADMIN$, C$, SYSVOL ├─ Vulnerabilities: Unconstrained Delegation ⚠️ └─ Priority: HIGH → Compromising = access to database </syntaxhighlight> --- === Enumeration Output Analysis === ==== Interpreting Results ==== Useful metrics from enumeration: {| class="wikitable" |- ! Metric !! Indicates !! Concern Level |- | Null sessions allowed || SMB misconfiguration || HIGH |- | Anonymous LDAP access || LDAP misconfiguration || MEDIUM |- | Weak passwords || Policy misconfiguration || HIGH |- | Passwords never expire || Policy misconfiguration || HIGH |- | Service accounts in admin groups || Over-privileging || MEDIUM |- | Kerberoastable accounts || Vulnerable SPNs || MEDIUM |- | Disabled accounts || Stale/unused accounts || LOW |- | Recently modified GPO || Active testing/changes || MEDIUM |} ==== Creating Enumeration Report ==== Document findings: <syntaxhighlight lang="text"> Enumeration Summary Report ========================== Domain: corp.local Enumeration Date: 2025-09-24 Methodology: SMB, LDAP, DNS USERS DISCOVERED ├─ Total: 1,247 ├─ Enabled: 1,189 ├─ Disabled: 58 ├─ Service Accounts: 45 ├─ Never Expires: 123 ⚠️ GROUPS DISCOVERED ├─ Total: 234 ├─ Privileged Groups: 12 │ ├─ Domain Admins: 8 members │ ├─ Enterprise Admins: 3 members │ └─ Schema Admins: 2 members COMPUTERS DISCOVERED ├─ Total: 456 ├─ Domain Controllers: 3 ├─ Servers: 67 ├─ Workstations: 386 SERVICES DISCOVERED ├─ Total: 234 ├─ Kerberoastable: 45 ⚠️ ├─ HTTP Services: 89 ├─ SQL Services: 23 └─ Other Services: 77 HIGH-VALUE TARGETS IDENTIFIED ├─ john.smith (Domain Admin, no password expiry) ├─ admin.service (Kerberoastable, high privileges) └─ SERVER-01 (Unconstrained delegation, SQL services) </syntaxhighlight> --- === Knowledge Check === Test your enumeration knowledge: # What is the difference between reconnaissance and enumeration? # Name three SMB enumeration techniques. # What is LDAP and what information can it reveal? # What is a Service Principal Name (SPN) and why is it important? # How would you enumerate all users in a domain using LDAP? # What are privileged groups and why should you identify them? # What is a zone transfer and when is it useful? # Name three enumeration tools used in AD penetration testing. # How would you identify Kerberoastable accounts? # True or False: Anonymous LDAP queries are always blocked. {{Note|Answers: 1) Recon is passive, enumeration is active probing 2) Null sessions, share enumeration, group policy discovery 3) Directory protocol; users, groups, computers, services, SPNs 4) Service identifier; used for targeting and Kerberoasting 5) ldapsearch with objectClass=user filter 6) Admin/high privilege groups; compromising members = domain compromise 7) Complete DNS zone copy if misconfigured; reveals all infrastructure 8) ADPenTest, ldapdomaindump, crackmapexec, impacket, BloodHound 9) Query for servicePrincipalName attributes in LDAP 10) False - many systems allow anonymous LDAP}} --- === Hands-On Exercise === {{Note| '''Exercise: Enumerate Your Lab Domain''' 1. '''Prepare Lab:''' - Ensure connectivity to lab domain - Have valid domain credentials ready 2. '''SMB Enumeration:''' - Check for null sessions: `smbclient -L //dc1.corp.local -N` - Enumerate users: `rpcclient -U "" -N dc1 -c "enumdomusers"` - Try crackmapexec: `crackmapexec smb 192.168.1.10 --users` 3. '''LDAP Enumeration:''' - List users: `ldapsearch -x -H ldap://corp.local -b "DC=corp,DC=local" "objectClass=user"` - List groups: `ldapsearch -x -H ldap://corp.local -b "DC=corp,DC=local" "objectClass=group"` - Find SPNs: `ldapsearch -x -H ldap://corp.local -b "DC=corp,DC=local" "servicePrincipalName=*"` 4. '''DNS Enumeration:''' - Query A records: `dig A corp.local` - Query SRV records: `dig SRV _ldap._tcp.dc._msdcs.corp.local` - Attempt zone transfer: `dig axfr @dc1 corp.local` 5. '''Automated Tools:''' - Run ldapdomaindump - Run crackmapexec full scan - Try ADPenTest enumeration: `adpentest --target corp.local --phases enumeration` 6. '''Analysis:''' - Document users found - Identify privileged accounts - Find service accounts with SPNs - Locate computers and services - Create target profile for top 3 accounts 7. '''Reporting:''' - Create enumeration summary - Document high-value targets - List potential attack paths - Prioritize by risk level Success Criteria: - All users enumerated - Privileged groups identified - Service accounts located - SPNs discovered - Target profiles created - At least 5 potential attack paths identified }} --- === Further Reading === * [[Active Directory Security and Penetration Testing/Chapter 9 - Kerberos Attacks|Chapter 9: Kerberos Attacks]] * [[Active Directory Security and Penetration Testing/Chapter 11 - Privilege Escalation|Chapter 11: Privilege Escalation]] * [[Active Directory Security and Penetration Testing/Chapter 14 - Scan Results and Reporting|Chapter 14: Scan Results and Reporting]] * [https://www.offsec.com/metasploit-unleashed/smb-enumeration SMB Enumeration Guide] * [https://book.hacktricks.xyz/windows-hardening/active-directory-methodology AD Methodology Reference] * [https://bloodhound.readthedocs.io/ BloodHound Documentation] --- [[Category:Active Directory Security and Penetration Testing]] [[Category:Enumeration and Discovery]] [[Category:Attack Vectors]] 5icwyq87o22dofa1y9qk2sb10zgmbzs Cookbook talk:Mohingha (Burmese Fish Noodle Soup) 103 485831 4672041 2026-09-24T03:41:45Z Diamonial 3503762 /* Inauthentic and likely inedible */ new section 4672041 wikitext text/x-wiki == Inauthentic and likely inedible == Not a single step or ingredient here is correct here. Tabasco sauce, onion, chilis, or fish fingers are never added onto mohinga, and neither is ketchup or lemonade. [[User:Diamonial|Diamonial]] ([[User talk:Diamonial|discuss]] • [[Special:Contributions/Diamonial|contribs]]) 03:41, 24 September 2026 (UTC) 46p52c175mlpsqppzyt6m1fo0i2ld6l Infrastructure Policy Casebook 0 485833 4672109 2026-09-24T10:29:54Z JGiffordAtMason 3358507 create page de novo 4672109 wikitext text/x-wiki This casebook contains case studies developed by students in the '''Infrastructure Policy''' course at [https://www.gmu.edu/ George Mason University]. The course is offered through the [https://schar.gmu.edu/ Schar School of Policy and Government] in collaboration with the [https://civil.gmu.edu/ Sid and Reva Dewberry Department of Civil, Environmental, and Infrastructure Engineering]. == Fall 2026 Cases == * [[Infrastructure Policy Casebook/Colorado River|Colorado River]] * [[Infrastructure Policy Casebook/NYC Subway Accessibility|NYC Subway Accessibility]] * [[Infrastructure Policy Casebook/Steel River Energy Center|Steel River Energy Center]] * [[Infrastructure Policy Casebook/HS2|HS2 – Britain's High-Speed Rail]] fw9tyjan28w7yfgwi8j352rzpbdz496 4672110 4672109 2026-09-24T10:32:41Z JGiffordAtMason 3358507 spell out NYC 4672110 wikitext text/x-wiki This casebook contains case studies developed by students in the '''Infrastructure Policy''' course at [https://www.gmu.edu/ George Mason University]. The course is offered through the [https://schar.gmu.edu/ Schar School of Policy and Government] in collaboration with the [https://civil.gmu.edu/ Sid and Reva Dewberry Department of Civil, Environmental, and Infrastructure Engineering]. == Fall 2026 Cases == * [[Infrastructure Policy Casebook/Colorado River|Colorado River]] * [[Infrastructure Policy Casebook/NYC Subway Accessibility|New York City Subway Accessibility]] * [[Infrastructure Policy Casebook/Steel River Energy Center|Steel River Energy Center]] * [[Infrastructure Policy Casebook/HS2|HS2 – Britain's High-Speed Rail]] 5sx84cnj74bi6u8g0u8ym9wv8nowzhn